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扩展卡尔曼融合包_第1张图片

#内容解析:
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张图片

2. 在启动文件中进行配置:

  
    
    
    
    
    
    
    
   
    
  

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

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

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

output_frame=:odom, 底盘scout_base.launch中odom_frame的值必须是"odom",如果不是会影响底盘节点scout_base_node与robot_pose_ekf节点的数据传输及tf树。(不知道是不是ekf源码规定的??后续更新)

base_footprint_frame:值必须是"base_link" ,不是会导致tf树报错。
(这个参数理解的不是很透彻,imu 中base_link在哪?学习后再更新)

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

修改配置之后再次启动,查看话题:
ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包_第3张图片

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

查看节点之间的数据传输:rqt_graph
ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包_第4张图片

查看tf树:rosrun rqt_tf_tree rqt_tf_tree
ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包_第5张图片

4.源码分析

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

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

你可能感兴趣的:(ros,传感器,自动驾驶,人工智能)