关于部署EFK的移动机器人发生IMU 零偏漂移现象的解决

关于部署EFK的移动机器人发生IMU 零偏漂移现象的解决 问题描述这段时间笔者一直在研究基于动态协方差的多传感器软融合定位系统在研究过程中发现刚打开Rviz时机器人模型很正常板板正正的待在原点不偏不倚。但是随着时间的推移机器人模型会逐渐向前栽如下图所示。——————————————————————————————————————————————问题分析因为廉价 IMU 陀螺仪存在微小的常数零偏噪音EKF 在通过积分推算俯仰角时会将这个微小误差随时间不断累积放大从而产生了系统误以为机器人正在持续前倾的虚假物理漂移。——————————————————————————————————————————————问题解决方法一如果你的移动机器人只是在平地上工作则你可以打开EKF 的配置文件ekf.yaml将 two_d_mode 设置为 true。two_d_mode: true方法二如果你的移动机器人不只是在平地上工作则可以插入一个Madgwick 滤波器节点。这个节点会结合重力加速度和角速度强行算出不受零偏影响的绝对空间姿态然后再喂给 EKF。第一步安装 ROS 官方滤波器工具包在你的终端中运行以下命令把数学滤波工具包下载到本地sudo apt-get update sudo apt-get install ros-noetic-imu-tools第二步运行 Madgwick 滤波器修改 Launch找一个合适的地方比如robot_bringup.launch 文件中加入以下这小段极其关键的 XML 代码node pkgimu_filter_madgwick typeimu_filter_node nameimu_filter_madgwick outputscreen remap fromimu/data_raw to/camera/imu / remap fromimu/data to/imu/data_filtered / param nameuse_mag valuefalse / param namepublish_tf valuefalse / param nameworld_frame valueenu / param namegain value0.1 / /node第三步配置 ekf.yaml 文件将如下话题名称修改成上面remap后的新的话题名称imu0: /camera/imu # 原来的将其修改为新的imu0: /imu/data_filtered # 新的再将其下矩阵做如下调整。# IMU (核心修改接纳 Madgwick 算出的绝对姿态 Roll, Pitch, Yaw) imu0: /imu/data_filtered # [x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az] imu0_config: [false, false, false, true, true, true, false, false, false, true, true, true, false, false, false] imu0_nodelay: false imu0_relative: true imu0_queue_size: 50 imu0_remove_gravitational_acceleration: false