1 前言
imu_filter_madgwick:一种滤波器,可将来自常规IMU设备的角速度,加速度和磁力计读数(可选)融合到一个方向中。基于工作:
imu_complementary_filter:一种滤波器,它使用一种基于互补融合的新颖方法,将来自通用IMU设备的角速度,加速度和磁力计读数(可选)融合到方向四元数中。基于文献:
rviz_imu_plugin:rviz插件,可显示sensor_msgs::Imu消息。
2 安装imu_tools
创建catkin工作空间:
mkdir -p ~/imu_tools_catkin_ws/src
安装git:
sudo apt-get install git-core
下载仓库到catkin工作空间中:
cd ~/imu_tools_catkin_ws/src
git clone -b <distro> https://github.com/ccny-ros-pkg/imu_tools.git
注意:为ROS版本,比如:melodic。
使用rosdep安装依赖:
rosdep install imu_tools
编译:
cd ..
catkin_make
3 使用
这里,我使用瑞芬的tl740IMU进行测试。
启动ROS驱动:
roscore
rosrun tl740d_driver tl740d_driver
然后在终端打印IMU数据:
rostopic echo /imu/data_raw
从上图可以看出,只输出了加速度(linear_acceleration)和角速度(angular_velocity),没有计算方位(orientation),而且也没有协方差(covariance)。
打开文件:
~/imu_tools_ws/src/imu_tools/imu_complementary_filter/src/complementary_filter_ros.cpp
,有如下代码:
// Register IMU raw data subscriber.
imu_subscriber_.reset(new ImuSubscriber(nh_, ros::names::resolve("imu") + "/data_raw", queue_size));
可以看出,imu_tools订阅的topic为imu/data_raw,而IMU发布的topic为/imu/data_raw,因此需要修改代码,使topic一致:
// Register IMU raw data subscriber.
imu_subscriber_.reset(new ImuSubscriber(nh_, "/imu/data_raw", queue_size));
打开rviz:
rviz
在rviz中,点击【Add】,添加【rviz_imu_plugin】。
设置【Fixed Frame】为odom,设置【IMU】中的【Topic】为/imu/data。
IMU静止时,rviz中的模型也保持静止;转动IMU,rviz中的模型会显示IMU的运动。