imu_utils的使用流程
- 本篇博客不含有编译的过程,只是记录一下流程备忘。一共三篇分别记录
imu_utils,kalibr_allan和imu_tk的使用过程,本篇是01篇imu_utils。 - IMU需要标定的参数主要是确定性误差和随机误差,确定性误差主要标定bias,scale和misalignment,随机误差主要标定noise和random walk,
imu_utils是用于求取随机误差的开源工具。
使用步骤 step-by-step
一、连接IMU到电脑
- 输入命令
$ ls /dev/ttyUSB* - 一般只有一个USB连接的话,输出
/dev/ttyUSB0则连接正确,串口已识别。
二、录制 ROS_bag
-
打开一个
terminal,打开ROS主节点:$ roscore -
打开一个
terminal,进入所对应IMU提供的SDK的包内查看节点,我们使用了Xsens提供的官方ROS驱动,输入命令$ roscd xsens_driver/launch,查看文件$ ls -
launch下有一个文件xsens_driver.launch,打开查看文件内容,输入命令$ gedit xsens_driver.launch,一般不需要修改,如果打开节点遇到timeout问题,可以适当将timeout default改大一点。 -
打开节点,输入命令
$ roslanuch xsens_driver.launch,看到输出没有报错,节点启动成功。 -
打开一个
terminal,输入命令$ rostopic list查看所有话题,正常情况下会看到6个话题:/imu/data/imu/mag/imu_data_str/rosout/rosout_agg/velocity -
查看输出数据,输入命令
$ rostopic echo /imu/data,看到节点正确输出IMU数据即可。 -
为存放
bag数据新建一个文件夹,位置随意,并进入这个文件夹打开一个terminal,输入命令$ rosbag record /imut/data -o test_imu_2020,这时输出命令类似如下。 -
查看文件夹,会看到
test_imu_2020_20xx-xx-xx-xx-xx-xx.bag.active这个文件,就是正在录制的bag,静止不动,录制两个小时以上,录制完毕后ctrl + C停止即可。
三、使用imu_utils计算allan方差
-
打开一个
terminal,进入之前编译好的imu_utils文件夹下xsens.launch文件查看相关设置$ gedit xsens.launch。 -
这里有一个
max_time_min表示使用bag数据的最大时长,单位是分钟,默认是120分钟,程序会在最大时间截断读取数据,然后终端下输入命令roslaunch imu_utils xsens.launch,先放着不要执行。 -
之前录制
bag的终端不要关闭,由于我们在编译imu_utils时肯定会加载环境变量,因此在任何终端都可以调用ROS下的函数,在bag包存放的路径下使用rosbag提供的快速回放命令,rosbag play -r 200 test_imu_2020_20xx-xx-xx-xx-xx-xx.bag,也不要执行,先放着。 -
这一步是关键,在执行上上步
roslaunch imu_utils xsens.launch之后,程序会进入等待话题的状态。 -
尽快执行
rosbag play -r 200 test_imu_2020_20xx-xx-xx-xx-xx-xx.bag,程序进入bag读取,并计算allan方差。当bag包加速回放完毕后,执行launch的窗口仍然会显示wait for imu data.,等待一段时间计算,计算完毕后会显示计算结果。 -
显示
done之后,在catkin_ws/src/imu_utils/data这个文件夹下会出现一系列的data文件,打开xsens_imu_param.yaml这个文件,会看到计算出来的噪声和随机游走的系数值。
四、绘制allan方差曲线
- 在
/catkin_ws/src/imu_utils/scripts这个文件夹,有一些matlab的脚本,用于绘制allan方差曲线。需要修改data文件存放的路径和名字,但这些脚本没有提供计算函数,只是绘图,根据5个斜率值 [1] 可以从曲线计算出yaml文件对应的项目。 -
Matlab中具体的参数读取参考这个博主即可,写得很好 [2]。
参考资料
[1] 厉宽宽, 陈允芳, 程敏, et al. MEMS-IMU随机误差的Allan方差分析[J]. 全球定位系统, 2016, 41(006):102-106.
[2] waihekor,CSDN博客, IMU噪声参数辨识-艾伦方差