IMU, 一般具有两个基本器件:加速计和陀螺仪。主要用于测量自身位姿,位姿包括位置和姿态。
最近在研究imu 融合里程计方面的内容,初学一些内容,总结一下:

环境信息:

Ubuntu:18.04
ROS : melodic

一. IMU接入ROS系统

imu型号:ROS IMU hfi_a9型号

1.安装ros-imu功能依赖包sudo apt-get install ros-melodic-imu-tools ros-melodic-rviz-imu-plugin   #如果不安装,imu在rviz中无法正常显示2.下载并编译 handsfree_ros_imu 驱动包cd ~/catkin_ws/src/git clone https://github.com/HANDS-FREE/handsfree_ros_imu.gitcd ..catkin_make -DCATKIN_WHITELIST_PACKAGES='handsfree_ros_imu'#如果git上下载慢,可以在gitee上下载:git clone https://gitee.com/HANDS-FREE/handsfree_ros_imu.git3.修改权限cd src/handsfree_ros_imu/scripts/sudo chmod 777 *.py4.插上imu设备运行可视化程序ls /dev/ttyUSB*sudo chmod 777 /dev/ttyUSB0roslaunch handsfree_ros_imu rviz_and_imu.launch5.查看topic 信息rostopic listrostopic echo /handsfree/imu

#内容解析:
linear_acceleration表示线加速度,
linear_acceleration_covariance表示线加速度协方差,
angular_velocity表示角速度,
angular_velocity_covariance角速度协方差,
orientation表示姿态,使用四元数表示,
orientation_covariance表示姿态协方差。

参考链接:视觉-惯导多传感器融合https://blog.csdn.net/hhaowang/article/details/121249997

二. IMU融合里程计—robot_pose_ekf

惯性融合里程计:通过机器人运动学解算可以把测量的电机运动数据转换成里程计数据,电机里程计通过扩展卡尔曼滤波融合IMU偏航角(yaw)的数据后,可以将机器人里程计的精度大大提高。

1.robot_pose_ekf安装编译
1.下载cd ~/catkin_ws/srcgit clone https://github.com/ros-planning/robot_pose_ekf.git2.编译rosdep install robot_pose_ekfroscd robot_pose_ekfrosmake3.运行roslaunch robot_pose_ekf.launch4.查看topicrostopic list

2. 在启动文件中进行配置:
               #这里改成自己的基坐标系                             #改成已经发布imu数据的话题名称,odom如果不是实际的也需要修改为实际odom数据话题名称  

freq: 滤波器更新和发布频率。注意:频率高仅仅意味着一段时间可以获得更多机器人位姿信息,但是并不表示可以提高每次位姿评估的精度。

sensor_timeout: 当传感器停止向滤波器发送信息时,滤波器在没有传感器的情况下等待多长时间才重新开始工作。

odom_used (编码器), imu_used (imu), vo_used (视觉里程计): 确认是否输入

output_frame=:odom, 里程计(可以随意命名)。底盘中发布的 要与源码odom_estimation_node.cpp (112行) 订阅的 保持一致,如果不一致,会影响底盘节点 与 节点之间的数据传输及tf树。

base_footprint_frame: 基坐标系, 需要与imu中hfi_a9_ros.py中imu_msg.header.frame_id =‘base_link’ 保持一致(111行), 不一致会导致tf树报错。

#映射处理remap:将想要接收 IMU 话题,映射到实际IMU 发布的话题名:/handsfree/imu

修改配置之后再次启动,查看话题:

3. 节点之间的数据传输
开启底盘的launch发布odom的topic开启imu的launch发布imu的topic开启运行robot_pose_ekf的launch

查看节点之间的数据传输:rqt_graph

查看tf树:rosrun rqt_tf_tree rqt_tf_tree

4.源码分析

launch启动文件中:type对应的是可执行文件,robot_pose_ekf可执行文件在~/catkin_ws/devel/lib 下robot_pose_ekf文件夹下,robot_pose_ekf 源码是src下的文件。
源码分析请参考链接:源码笔记

参考链接:
IMU和里程计融合
http://wiki.ros.org/robot_pose_ekf
https://www.guyuehome.com/34607