rdk_imu 仓库是专为使用 RDK_IMU_MODULE 模组及 RDK_IMU_CONNECTOR 载板的开发者设计的驱动仓库,支持在 RDK X3/X5 系列开发板上快速实现 GPIO、SPI、I2C 等接口外设的控制与驱动。该仓库提供对 BMI088 陀螺仪/加速度计的完整数据读取和处理功能,方便开发者在项目中轻松集成传感器数据采集。通过简易的 API 和示例代码,用户可以快速上手并实现对传感器数据的高效读取与分析,适用于多种物联网和嵌入式应用场景
RDK_IMU_MODULE 示意图:
RDK_IMU_CONNECTOR 示意图:
RDK IMU Pin脚分布:
以下是 RDK IMU 模块的 GPIO 引脚分布信息,包括各引脚的功能、对应的 X3/X5 管脚号、BCM 编码以及物理引脚的 BOARD 编码:
| 功能名 | X3/X5管脚号 | BCM编码 | 物理引脚BOARD编码 |
|---|---|---|---|
| I2C_SDA | 9 | 2 | 3 |
| I2C_SCL | 8 | 3 | 5 |
| LED1 | 6 | 17 | 11 |
| LED2 | 5 | 27 | 13 |
| LED3 | 30 | 22 | 15 |
| SPI_MOSI | 12 | 10 | 19 |
| SPI_MISO | 13 | 9 | 21 |
| SPI_SCLK | 14 | 11 | 23 |
| SPI_CS_ACC | 15 | 8 | 24 |
| SPI_CS_GYRO | 28 | 7 | 26 |
| BELL | 118 | 6 | 31 |
| INT_ACC | 3 | 16 | 36 |
| INT_GYRO | 104 | 20 | 38 |
| DQ_ds18b20 | 105 | 26 | 37 |
说明:
- I2C_SDA 和 I2C_SCL:用于连接 BMI088 传感器 I2C 引脚。
- LED1、LED2 和 LED3:可用于控制 LED 灯,进行指示或状态显示。
- SPI_MOSI、SPI_MISO、SPI_SCLK、SPI_CS_ACC 和 SPI_CS_GYRO:用于 SPI 接口,连接 BMI088 加速度计和陀螺仪传感器。
- BELL:用于蜂鸣器控制。
- INT_ACC 和 INT_GYRO:连接 BMI088 传感器的中断引脚,接收传感器中断信号。
- DQ_ds18b20:用于连接 DS18B20 温度传感器的数据引脚。
注意事项:
-
Python 代码:Python 代码使用 Hobot.GPIO 驱动,在代码中应按照 物理引脚 (BOARD 编码) 进行 GPIO 引脚的调用。BOARD 编码是开发板上实际的物理引脚编号。例如,要控制 LED1 时,应使用 BOARD 编码
11对应的引脚。 -
C 代码:C 代码直接使用 内部芯片引脚号,即 X3/X5 管脚号。因此,在编写 C 代码时,应根据 X3/X5 开发板的管脚号进行引脚操作。例如,要控制 LED1 时,应使用 X3/X5 管脚号
6对应的引脚。
例如:
- Python 代码 控制 LED1:
import Hobot.GPIO as GPIO
GPIO.setup(11, GPIO.OUT) # 使用 BOARD 编码 11
GPIO.output(11, GPIO.HIGH)- C 代码 控制 LED1:
#include <wiringPi.h>
pinMode(6, OUTPUT); // 使用 X3/X5 管脚号 6
digitalWrite(6, HIGH);GPIO 外设可以通过 Python 或 C 语言进行测试,具体操作步骤如下:
Python 测试:
- 使用 root 用户登录开发板: 确保以 root 用户身份登录开发板,以获得对 GPIO 引脚的控制权限。
- 执行测试脚本: 运行 test_GPIO.py 脚本,该脚本会控制蜂鸣器和 LED,验证是否能够正常工作。
python test_GPIO.py执行后,蜂鸣器应发出响声,LED 指示灯将点亮,表示 GPIO 外设功能正常。
C 语言测试:
- 编译 wiringPi: 先确保已经安装好 wiringPi,确保可以直接读取 GPIO 口的状态。可以使用如下命令编译 wiringPi:
git clone https://gitee.com/study-dp/WiringPi.git
cd WiringPi
./build
gpio readall执行成功后,命令行会显示管脚pin口列表:
root@ubuntu:/app/40pin_samples# gpio readall
+-----+-----+-----------+-RDK X3v2-+-----------+-----+-----+
| BCM | xPi | Name | Physical | Name | xPi | BCM |
+-----+-----+-----------+----++----+-----------+-----+-----+
| | | 3.3v | 1 || 2 | 5v | | |
| 2 | 9 | SDA.0 | 3 || 4 | 5v | | |
| 3 | 8 | SCL.0 | 5 || 6 | 0v | | |
| 4 | 101 | I2S0_MCLK | 7 || 8 | TxD.3 | 111 | 14 |
| | | 0v | 9 || 10 | RxD.3 | 112 | 15 |
| 17 | 12 | GPIO. 17 | 11 || 12 | I2S0_BCLK | 102 | 18 |
| 27 | 13 | GPIO. 27 | 13 || 14 | 0v | | |
| 22 | 30 | GPIO. 22 | 15 || 16 | GPIO. 23 | 27 | 23 |
| | | 3.3v | 17 || 18 | GPIO. 24 | 22 | 24 |
| 10 | 6 | SPI1_MOSI | 19 || 20 | 0v | | |
| 9 | 7 | SPI1_MISO | 21 || 22 | GPIO. 25 | 29 | 25 |
| 11 | 3 | SPI1_SCLK | 23 || 24 | SPI1_CSN | 5 | 8 |
| | | 0v | 25 || 26 | GPIO. 7 | 28 | 7 |
| 0 | 15 | SDA.3 | 27 || 28 | SCL.3 | 14 | 1 |
| 5 | 119 | GPIO. 5 | 29 || 30 | 0v | | |
| 6 | 118 | GPIO. 6 | 31 || 32 | PWM4 | 25 | 12 |
| 13 | 4 | PWM0 | 33 || 34 | 0v | | |
| 19 | 103 | I2S0_LRCK | 35 || 36 | GPIO. 16 | 20 | 16 |
| 26 | 117 | GPIO.26 | 37 || 38 | I2S1_SDIO | 108 | 20 |
| | | 0v | 39 || 40 | I2S0_SDIO | 104 | 21 |
+-----+-----+-----------+----++----+-----------+-----+-----+
| BCM | xPi | Name | Physical | Name | xPi | BCM |
+-----+-----+-----------+-RDK X3v2-+-----------+-----+-----+- 编译 C 语言测试代码:在项目目录下编译提供的 C 代码。可以使用如下命令编译测试程序:
gcc -o test_GPIO test_GPIO.c -lwiringPi此命令将 test_GPIO.c 编译为可执行文件 test_GPIO,并链接所需的 WiringPi 库
- 运行测试程序:在编译完成后,通过以下命令运行测试程序:
sudo ./test_GPIO程序运行后,蜂鸣器和 LED 指示灯将按照程序设定的逻辑进行操作,验证 GPIO 引脚的工作状态。
注意事项
- 权限要求: 使用 GPIO 进行硬件控制时,务必以 root 用户身份操作,否则可能会因为权限不足导致操作失败。
- 开发环境: Python 测试需要在开发板上安装相应的 Python 环境和依赖库。C 语言测试则需要确保安装 WiringPi 库。
在使用 SPI 接口读取 BMI088 传感器数据之前,请先进行以下操作:
- 拨码开关设置:确保将开发板上的拨码开关切换到 SPI 一侧,以启用 SPI 接口。拨码开关的位置如下图所示:
- 执行 Python 测试脚本:切换拨码开关后,可以运行 test_BMI088.py 脚本来读取传感器数据。该脚本通过 SPI 接口驱动 BMI088 传感器并获取加速度计和陀螺仪的数据。
python3 test_BMI088_SPI.py如果配置正确,脚本会输出从 BMI088 传感器读取的实时数据,验证 SPI 接口正常工作。
注意事项:
- SPI 接口设置: 使用 SPI 接口时,必须确保拨码开关切换正确,否则可能导致无法读取到有效数据。
- 依赖库: 请确认已安装必要的 Python 库和驱动,以确保脚本正常运行。
在使用 I2C 读取 BMI088 传感器数据之前,请确保完成以下操作步骤:
- 拨码开关设置:
首先,将开发板上的拨码开关切换到 I2C 一侧,启用 I2C 通信接口。拨码开关位置如下图所示:
- 编译可执行文件:
执行以下命令获取项目 IMU 驱动代码并编译 I2C 传感器驱动:
git clone https://github.com/D-Robotics/hobot_imu_sensor.git
cd hobot_imu_sensor
source /opt/tros/setup.bash
pip install -U colcon-common-extensions
colcon build --packages-select imu_sensor上述命令会从 GitHub 拉取代码库,并使用 colcon 工具构建 imu_sensor 包
- 安装驱动模块:
进入 imu 文件夹后,执行以下命令,将编译好的模块安装到系统中:
dpkg -i hobot-*.deb
cp bmi088.ko /lib/modules/4.14.87- 加载驱动并启动 ROS2 节点:
重新上电后,执行以下步骤来加载 BMI088 模块并启动 ROS2 节点:
在终端1:
depmod -a
modprobe bmi088
source /opt/tros/setup.bash
source hobot_imu_sensor/install/setup.bash
ros2 launch imu_sensor imu_sensor.launch.py该操作将会启动 imu_sensor 节点,驱动 BMI088 传感器并开始发布传感器数据。
- 查看 IMU 数据:
在另一个终端(终端2)中,使用以下命令订阅并查看 IMU 数据:
source /opt/tros/setup.bash
ros2 topic echo /imu_data正常情况下,终端2将会显示 BMI088 传感器的实时数据输出,如下图所示:
注意事项:
- I2C 接口设置: 使用 I2C 读取传感器数据时,确保拨码开关已正确切换至 I2C 模式。
- 环境配置: 确保系统已安装必要的 ROS2 环境、colcon 构建工具以及相关驱动程序
DS18B20 温度传感器可以通过编译并运行 C 代码来读取其温度数据,具体操作如下::
- 编译 DS18B20 代码:
在终端中执行以下命令,使用 gcc 编译 DS18B20 温度传感器的 C 代码:
gcc -o ds18b20 ds18b20.c -lwiringPi此命令将 ds18b20.c 文件编译为可执行文件 ds18b20,并链接所需的 WiringPi 库。
- 运行可执行文件:
编译成功后,通过以下命令运行生成的可执行文件并读取温度数据:
sudo ./ds18b20运行成功后,终端将输出 DS18B20 传感器的实时温度数据,显示结果如下图所示:
注意事项
- 权限要求: 由于读取硬件数据需要更高的权限,请使用 sudo 命令运行可执行文件。
- 传感器连接: 确保 DS18B20 传感器正确连接到开发板上的 GPIO 引脚,并已添加适当的上拉电阻(已硬件上拉)。






