一个用于 CH104M IMU 传感器的 ROS2 驱动程序,通过串口通信发布 IMU 数据。
此软件包为 CH104M-USB IMU 传感器提供了一个 ROS2 驱动程序。它从串口读取 IMU 数据,并将其作为标准 ROS2 sensor_msgs/Imu 消息发布。驱动程序以 921600 波特率进行采集,请在官方(HiPNUC)上位机中对波特率做对应修改。
- 标准 ROS2 IMU 消息格式(
sensor_msgs/msg/Imu) - IMU 数据:
- 三轴加速度(g)
- 三轴角速度(度/秒)
- 三轴磁场(µT)
- 欧拉角(RPY,度)
- 四元数方向(WXYZ)
- 温度和气压
- CRC16 数据验证
- 异步 I/O 使用 Boost.Asio
- 日志支持 使用 spdlog
# Boost
sudo apt install libboost-all-dev
# spdlog(日志库)
sudo apt install libspdlog-dev
# fmt(格式化库)
sudo apt install libfmt-dev-
创建 ROS2 工作空间(如果尚未创建):
mkdir -p ~/ros2_ws/src cd ~/ros2_ws
-
克隆仓库:
cd ~/ros2_ws/src git clone https://github.com/Gh-Shinku/CH104M_ROS2_Driver.git
-
构建软件包:
colcon build --packages-select imu_publisher
-
加载工作空间:
source install/setup.bash
-
连接 CH104M IMU 到 USB 端口(通常显示为
/dev/CH104M-USB) -
检查设备权限:
# 将用户添加到 dialout 组 sudo usermod -a -G dialout $USER # 注销并重新登录以使更改生效 # 笔者使用 udev 将串口设备重命名成 /dev/CH104M-USB,之后会支持指定串口名
如果需要修改串口设备,暂且编辑
src/imu_publisher.cpp中的源代码:serial_port_(ioc_, "/dev/ttyUSB0", std::bind(&ImuPublisher::publish_imu_data, this, std::placeholders::_1)),
-
运行 IMU 发布程序:
ros2 run imu_publisher imu_publisher
-
验证数据发布:
ros2 topic echo /imu