ros入门(六)–imu融合里程计robot_pose_ekf扩展卡尔曼融合包

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.git
cd ..

catkin_make -DCATKIN_WHITELIST_PACKAGES='handsfree_ros_imu'
#如果git上下载慢,可以在gitee上下载:git clone https://gitee.com/HANDS-FREE/handsfree_ros_imu.git

3.修改权限
cd src/handsfree_ros_imu/scripts/
sudo chmod 777 *.py

4.插上imu设备运行可视化程序
ls /dev/ttyUSB*
sudo chmod 777 /dev/ttyUSB0
roslaunch handsfree_ros_imu rviz_and_imu.launch

5.查看topic 信息
rostopic list
rostopic echo /handsfree/imu

ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包

内容解析:

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/src
git clone https://github.com/ros-planning/robot_pose_ekf.git

2.编译
rosdep install robot_pose_ekf
roscd robot_pose_ekf
rosmake

3.运行
roslaunch robot_pose_ekf.launch

4.查看topic
rostopic list

ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包
2. 在启动文件中进行配置:
<launch>
  <node pkg="robot_pose_ekf" type="robot_pose_ekf" name="robot_pose_ekf">
    <param name="output_frame" value="odom">
    <param name="base_footprint_frame" value="base_link">   #&#x8FD9;&#x91CC;&#x6539;&#x6210;&#x81EA;&#x5DF1;&#x7684;&#x57FA;&#x5750;&#x6807;&#x7CFB;
    <param name="freq" value="30.0">
    <param name="sensor_timeout" value="1.0">
    <param name="odom_used" value="true">
    <param name="imu_used" value="true">
    <param name="vo_used" value="false">

    <remap from="/imu_data" to="/handsfree/imu">  #&#x6539;&#x6210;&#x5DF2;&#x7ECF;&#x53D1;&#x5E03;imu&#x6570;&#x636E;&#x7684;&#x8BDD;&#x9898;&#x540D;&#x79F0;&#xFF0C;odom&#x5982;&#x679C;&#x4E0D;&#x662F;&#x5B9E;&#x9645;&#x7684;&#x4E5F;&#x9700;&#x8981;&#x4FEE;&#x6539;&#x4E3A;&#x5B9E;&#x9645;odom&#x6570;&#x636E;&#x8BDD;&#x9898;&#x540D;&#x79F0;
  </remap></node>
</launch>

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

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

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

output_frame=:odom, 里程计(可以随意命名)。底盘中发布的

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

#&#x6620;&#x5C04;&#x5904;&#x7406;
remap:&#x5C06;&#x60F3;&#x8981;&#x63A5;&#x6536; IMU &#x8BDD;&#x9898;&#xFF0C;&#x6620;&#x5C04;&#x5230;&#x5B9E;&#x9645;IMU &#x53D1;&#x5E03;&#x7684;&#x8BDD;&#x9898;&#x540D;&#xFF1A;/handsfree/imu

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

ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包
3. 节点之间的数据传输
&#x5F00;&#x542F;&#x5E95;&#x76D8;&#x7684;launch&#x53D1;&#x5E03;odom&#x7684;topic
&#x5F00;&#x542F;imu&#x7684;launch&#x53D1;&#x5E03;imu&#x7684;topic
&#x5F00;&#x542F;&#x8FD0;&#x884C;robot_pose_ekf&#x7684;launch

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

ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包

查看tf树:rosrun rqt_tf_tree rqt_tf_tree

ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包
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

Original: https://blog.csdn.net/weixin_51157015/article/details/125199199
Author: wqm-story027
Title: ros入门(六)–imu融合里程计robot_pose_ekf扩展卡尔曼融合包

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/718632/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球