目录
前言
记录利用 imu_utils 标定 imu,最近在使用imu做导航,要对imu进行标定,使用标定得到的加速度的噪声和加速度随机游走噪声以及角速度的噪声和角速度的随机游走噪声。
写的可能不详细,有问题的话可以直接评论交流!
一、安装 imu_utils
1、安装依赖项
sudo apt-get install libdw-dev
2、安装ceres
参考高博slam十四讲,安装ceres。
3、编译 code_utils
cd ~/imu_calib_ws/src
git clone https://github.com/gaowenliang/code_utils
cd imu_calib_ws
catkin_make
4、编译 imu_utils
cd ~/imu_calib_ws/src
git clone https://github.com/gaowenliang/imu_utils
cd imu_calib_ws
catkin_make
二、编译出现的错误
1、找到报错的文件 sumpixel_test.cpp 把 #include "backward.hpp" 改为 #include "code_utils/backward.hpp"。
2、关于 vector 的错误,同样找到报错的文件,在头文件中添加#include <vector>即可。
三、操作步骤
1、录制 imu 数据
rosbag record -o imu_calib_data/data/imu_data.bag your_imu_topic
大概要录制两个小时左右
2、编写 launch 文件
在 imu_utils 下的 launch 文件夹中创建 imu_test.launch 。内容如下
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/mobile_base/sensors/imu_data"/>//这里的value是你的imu的topic
<param name="imu_name" type="string" value= "wheeltec"/>//这里的value是你的imu名字自定义
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/>//这里的value值是你录制的imu的数据包的时间长度,这个value值一定要小于你录制的imu数据包
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
从下图中可以看出,录制的imu的数据包的时长是 7436s 。
3、 运行 imu_test.launch 文件
cd ~/imu_utils_ws
source devel/setup.sh
roslaunch imu_utils imu_test.launch
下图是标定之后的结果:
4、播放bag包
rosbag play -r 100 imu_calib_data/data/imu_data.bag
四、结果
实验结果如下图,其中标定得到的参数存放在 .yaml 文件中
文件中的内容如下,其中gry_n,gry_w,acc_n,acc_w可以使用。要使用平均值的也就是avg-axis。
五、总结
标定的时长要在两小时左右,否则标定出来的参数不够准确。标定得到的参数可以从imu的测量值中得到真实值,加速度角速度的真实值。