ROS学习笔记2--幻宇机器人为模板

ROS中---既然已经有了odom,为什么还要IMU呢?

在ROS机器人系统中,同时使用‌odom ‌(里程计)和‌IMU‌(惯性测量单元)进行姿态计算,主要是为了弥补单一传感器的局限性,实现更鲁棒、精准的位姿估计。以下是具体原因分析:


一、传感器特性差异

  1. odom的局限性

    • 依赖轮式编码器,易受打滑、地面不平等因素影响,导致累计误差‌1
    • 仅能提供平面运动信息(X/Y轴位移和Z轴旋转),无法直接测量垂直方向(Z轴)加速度或姿态角‌2
  2. IMU的优势

    • 通过陀螺仪直接测量角速度,通过加速度计检测重力方向,可快速响应姿态变化‌3
    • 提供6轴(加速度+角速度)或9轴(含磁力计)数据,支持三维空间姿态解算‌45

二、数据融合的必要性

  1. 互补滤波与卡尔曼滤波

    • 陀螺仪角速度积分易漂移,加速度计在运动时易受干扰,两者融合可抵消误差‌6
    • 例如:robot_pose_ekf包通过扩展卡尔曼滤波器(EKF)融合odom和IMU数据,提升位姿估计精度‌27
  2. 动态环境适应性

    • IMU高频响应适合短时姿态跟踪,odom提供长期位移参考,融合后适应复杂运动场景‌。

说白了就是让IMU不断的修正车辆车身姿态的真值结果,有效防止车辆打滑等因素相互补充相互纠正。

程序主程序主要就是发送了odom话题;

构造函数初始化参数:

以及打开串口功能;

析构函数关闭串口;

分解速度函数:

发布odom话题;

读取串口数据以及分析协议层,并一区串口数据;

发布IMU角速度话题;

发布IMU话题;

实时计算odom位置信息以及

发布odom、IMU、IMURaW;

行驶速度scanlin_factor:行驶角速度scanlin_factor: