最近在做xsens IMU的标定工作,网上资源很多很杂,打算按自己的操作过程、细节及遇到的问题记录一下,里面有参考的博文都附了链接。主体可参考此博文:VIO 中 IMU 的标定流程 (1/3) – imu_utils 使用备忘_勤能补拙的编程备忘录-CSDN博客_imu_utils标定
目录
IMU的驱动
注:以下1、2、3、4步可以在一个终端中完成 。
1.驱动安装:
$ sudo apt-get install ros-melodic-xsens-driver
驱动安装好之后输入命令:
$ roscd xsens_driver/launch/
$ ls
launch
目录下有一个文件 xsens_driver.launch
,打开查看文件内容,输入命令:
$ sudo gedit xsens_driver.launch
如下,可以适当将 timeout default
改大一点,给传感器预留更多的启动时间。
2.接入xsens传感器,先查看端口号(我使用的是ttyUSB0,如果使用的是其他的端口则修改为对应的端口号就可以了):
$ ls /dev/ttyUSB0
然后会输出 /dev/ttyUSB0
,则表示连接正确,串口已被识别。
3.修改访问MTi设备的权限,若USB状态权限不够,否则无法读取传感器的信息:
$ sudo chmod 777 /dev/ttyUSB0
注意:每次重启或者重新连接IMU都需要配置,否则无法识别到IMU。或者可以将此端口号改为默认执行
4.启动xsens传感器:
$ roslaunch xsens_driver xsens_driver.launch
不知道是不是依赖没装好,运行上面命令时会报以下错误:
查找资料,有博主说Fatal: could not find proper MT device是因为没有给端口设置权限,如果我是先执行了前面第2、3步的话,按道理来说不会有这个问题。后面找到了一篇博文:ROS kinetic Xsens传感器(MTI-G-710)驱动安装_qq_34911636的博客-CSDN博客
重新运行上面第4步:$ roslaunch xsens_driver xsens_driver.launch,可以获取到设备的数据。
传感器启动成功,暂时不要关掉当前的终端。
5.查看传感器启动后的主题,重新开启一个终端:
$ rostopic list
会输出以下主题:
然后输入以下命令,查看IMU输出的数据
$ rostopic echo /imu/data
以上两个终端可以暂时不用关闭
bag录制
IMU驱动安装好之后,且能正常启动,可以先录制好bag为后面用imu_utils标定作准备。
在存放bag的路径下打开新的终端:(可根据自己需要命名bag名字,当前只录制/imu/data的数据即可,rosbag record命令的使用参考:ROS 中 rosbag 相关命令总结 – 简书)
$ rosbag record -o /imu/data test_imu
IMU静止不动,录制两个小时以上,录制完毕后 ctrl + C
停止即可。录制两个小时跟imu_utils脚本的设置有关,官网也是建议最好录制两个小时以上。当前我自己录制的bag没有成功标定过,用网上下载的bag可以跑出数据。等后续用自己的数据标定成功再跟大家分享不成功的原因是什么。
当前终端也可以先不关闭,后面还需要用来回放刚刚录制的数据。
至此,IMU的驱动已安装完毕且为后续用imu_utils标定录制了数据。
imu_utils标定工具
1.先安装依赖:
$ sudo apt-get install libdw-dev
2.全局安装ceres
由于code_utils 依赖 ceres,imu_utils依赖code_utils,所以先装ceres,可参考:Ubuntu:安装Ceres_SSS_369-CSDN博客_linux安装ceres 进行安装。里面步骤很详细,而且安装不会出什么问题,所以就不在此赘述了。
3.创建ros工作空间,并初始化工作空间:
可参考ROS学习–第3篇:ROS基础—创建工作空间_BIT王大东-CSDN博客_ros创建工作空间
$ mkdir -p ~/catkin_ws/src
3.下载code_utils
不要同时把 imu_utils 和 code_utils 一起放到src下进行编译。由于imu_utils 依赖 code_utils,所以先把 code_utils 放在工作空间的src下面,进行编译。
$ cd catkin_ws/src
进入到src目录
$ git clone https://github.com/gaowenliang/code_utils.git
修改code_utils功能包下sumpixel_test.cpp中 #include "backward.hpp"为 #include <code_utils backward.hpp>
$ cd ..
返回到catkin_ws目录
$ catkin_make
编译
</code_utils>
注:在 code_utils下面找到 sumpixel_test.cpp,修改#include “backward.hpp”为 #include
4.下载imu_utils
$ cd catkin_vio/src
$ git clone https://github.com/gaowenliang/imu_utils.git
$ cd ..
$ catkin_make
5.查看imu_utils下的xsens.launch文件(也可以使用其他launch文件,但是话题要跟前面录制的的bag话题保持一致)
前面录制两个小时以上的数据就跟这个launch文件有关,需要注意标定的时长设置要小于bag的录制时长,即 max_time_min的值。
6.开始标定
$ rosbag play -r 200 ~/Datasets/imu_xsens.bag
不能循环播放bag,imu_utils程序中有时间判断,200是回放的速率,数字越大,回放越快
先在录制bag的终端输入上述命令,暂不执行
$ roslaunch imu_utils xsens.launch
打开一个终端输入上述命令,执行此命令后尽快执行bag回放的命令
当 bag
包加速回放完毕后,执行 launch
的窗口仍然会显示 <strong>wait for imu data</strong>.
,等待一段时间计算,计算完毕后会显示计算结果。显示 done
之后,在 catkin_ws/src/imu_utils/data
这个文件夹下会出现一系列的 data
文件,查看 xsens_imu_param.yaml
,会看到计算出来的噪声和零偏的系数值。
如果话题对不上或者录的数据包有问题,会一直卡在这里,无法得出标定的结果, xsens_imu_param
.yaml文件的值全是0。
如果标定成功,会得到本次标定的噪声和零偏的系数值(不为0)。
得到噪声值和零偏值,用测量值减去这个噪声和零偏就是理论上的真值了,可以减少后续计算的误差。
其他:
ROS运行roslaunch报错RLException: [turtlebot3_fake.launch] is neither a launch file in package [turtlebot3_fake] nor is [turtlebot3_fake] a launch file name
解决方案:错误原因为环境变量设置有问题,运行source后再运行roslaunch
$ source ~/catkin_ws/devel/setup.bash
Original: https://blog.csdn.net/weixin_38296260/article/details/122533307
Author: KingL_wu
Title: Ubuntu18下xsens IMU的驱动安装及使用imu_utils标定
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/559262/
转载文章受原作者版权保护。转载请注明原作者出处!