跳到主要内容

SDK ROS2 功能包使用说明

文件结构

SDK ROS2 部分位于 rdk-imu-module-sdk/ros2,它以 C-API 为依赖。ros2 目录实际为一个工作空间目录,可以在该目录下构建功能包,文件结构如下:

构建前:

ros2/
└── src
└── rdk_imu_module
├── CMakeLists.txt # 构建工具
├── launch
│ └── rdk_imu.launch.py # launch 启动文件
├── package.xml
├── scripts
│ └── imu_stress_test.py # 压力测试脚本
└── src
└── rdk_imu_node.cpp # 节点源码

构建后:

ros2/
├── install/
├── build/
├── log/
└── src/

构建方法

构建 ROS2 功能包前,必须保证 SDK 的 C-API 的动态库已被编译,即 core/lib 中的 .so.so.x.so.x.x.x 都存在。ROS2 功能包依赖该动态库文件,但无需用户手动移动,cmake 会自动检测并安装到 install 目录中。

激活环境后在 ros2 目录下使用 colcon build 即可编译。

接口说明

节点功能

  • 融合数据输出:调用 C API 的 rdk_imu_read_fused() 进行一维线性插值,输出时间对齐的六轴数据。
  • 协方差自动计算:根据当前配置的加速度计滤波带宽和陀螺仪带宽,结合 BMI088 手册噪声密度,自动计算并填充 linear_acceleration_covarianceangular_velocity_covariance 的对角方差值。
  • 运行控制:提供 ROS2 服务,可在运行中随时暂停/恢复 IMU 数据采集。
  • 灵活的参数配置:所有传感器参数、话题名、服务名均可通过 ROS 参数在启动时配置。

启动方式

确保已编译 ROS 2 包并 source 了工作空间,然后使用提供的 launch 文件启动:

source install/setup.bash
ros2 launch rdk_imu_module rdk_imu.launch.py

节点默认以 rdk_imu_node 为名启动,输出日志到屏幕。

发布话题

  • 默认话题名/rdkimu/data

  • 消息类型sensor_msgs/msg/Imu

  • 内容

    • header.stamp:融合后的时间戳(基于 CLOCK_MONOTONIC 的纳秒级硬件时间)
    • header.frame_id:坐标系名称,默认 imu_link
    • linear_acceleration:加速度计三轴数据,单位 m/s²
    • angular_velocity:陀螺仪三轴数据,单位 rad/s
    • orientation:未提供,四元数恒为 (0,0,0,1)
    • 协方差矩阵:加速度计和陀螺仪的对角方差已根据传感器带宽和噪声密度计算并填充;姿态协方差全部置为 -1(未知)
    提示

    话题名可通过参数 imu_topic 或 ROS 2 重映射机制修改。

服务

节点提供两个 std_srvs/srv/Trigger 类型服务,用于运行时控制数据采集:

服务名(默认)功能
~/enable使能 IMU 数据采集(启动中断线程)
~/disable暂停 IMU 数据采集(关闭中断线程)
提示

服务名也可通过参数 enable_service_namedisable_service_name 配置。

可配置参数

以下参数均可在 launch 文件或命令行中指定,节点启动时读取,运行时不可更改:

参数名类型默认值说明
frame_idstringimu_linkIMU 消息的坐标系 ID
fuse_bystringaccel融合基准传感器,可选 accelgyro
max_age_nsint50000000融合插值允许的最大时间差(纳秒),建议为 ODR 周期的 3 倍以上
publish_ratedouble0.0固定发布频率(Hz),0.0 表示有数据即发
auto_startbooltrue节点启动后是否自动开始数据采集
imu_topicstringrdkimu/data发布 IMU 数据的话题名
enable_service_namestring~/enable使能服务名称
disable_service_namestring~/disable禁用服务名称
accel_bwpstringNORMAL加速度计滤波模式,可选 OSR4OSR2NORMAL
accel_odrstring400加速度计采样频率,可选 12_525、...、1600
accel_rangestring24G加速度计量程,可选 3G6G12G24G
gyro_rangestring2000DPS陀螺仪量程,可选 125DPS ~ 2000DPS
gyro_bandwidthstringODR400_BW47陀螺仪带宽,可选 ODR2000_BW532 等(见枚举)
accel_drdy_intstringINT1加速度计中断引脚,可选 INT1INT2
accel_int_gpio_modestringPP_H加速度计中断 GPIO 模式,可选 PP_HPP_LOD_HOD_L
gyro_drdy_intstringINT3陀螺仪中断引脚,可选 INT3INT4
gyro_int_gpio_modestringPP_H陀螺仪中断 GPIO 模式,取值同上
accel_drdy_gpio_chipint4SoC 端加速度计中断 GPIO chip 号
accel_drdy_gpio_lineint2SoC 端加速度计中断 GPIO line 号
gyro_drdy_gpio_chipint3SoC 端陀螺仪中断 GPIO chip 号
gyro_drdy_gpio_lineint12SoC 端陀螺仪中断 GPIO line 号
fifo_lengthint256软件 FIFO 长度(帧数)
fifo_modestringOVERWRITEFIFO 满时策略,可选 DROPOVERWRITE
irq_priorityint-1中断线程实时优先级(-1 为自动)
irq_thread_timeout_nsint1000000000中断线程等待超时时间(纳秒)

上述传感器参数与 C API 的 rdk_imu_config_t 一一对应,详细介绍请参阅 C-API 使用说明

运行示例

查看实时数据:

ros2 topic echo /rdkimu/data
ros2 topic hz /rdkimu/data

暂停/恢复采集:

ros2 service call /rdk_imu_node/enable std_srvs/srv/Trigger
ros2 service call /rdk_imu_node/disable std_srvs/srv/Trigger

使用自定义参数启动(例如修改话题名和频率):

ros2 launch rdk_imu_module rdk_imu.launch.py imu_topic:=/my_imu publish_rate:=200.0