惯导(IMU)的使用

提示:和上一篇关于利用imu计算位移的文章相比,这篇我对imu的理解应该是更加深刻了。

目录

前言

一、imu调试

二、利用IMU计算旋转

1.引入库

2.读入数据

总结


前言

        这次使用的imu和上一篇文章中所提到的imu是同一款,时隔几个月再一次使用的时候发现有点错误,所以前来记录一下,附上一张使用的imu的图片。

         这次使用的时候出现了几个问题:

        1、imu的数据采集频率过低,需要在上位机调整。

        2、关于imu坐标系对采集的数据的影响。

        3、在 ROS 中对数据附加时间戳的问题。

        也有其他的一些小问题我会边写边说的。


一、imu调试

        距离上次调试是在几个月前,直接导致这一次的忘记如何调试,一直在问售后,所以一定要记录下来防止下次再忘。

        因为我使用的是100HZ的采样频率,但是上一次不知道为什么就改成了5HZ所以要改回来。如果你需要使用的是100HZ,那就可以不用修改因为这个imu默认的采样频率就是100HZ。

        如果想要修改的话,按如下图的步骤添加设备。

 ​​

         修改相关的配置参数。这里的采样频率和波特率也是有关系的,我之前设置的波特率是115200,但是采样频率设置的是100HZ,就会出现报警,设备时而连接时而断开的现象。就是因为波特率和采样频率不匹配的原因。100HZ的采样频率至少对应的波特率是230400。所以不同的采样频率要对应不同的波特率,否则影响采样结果。这里我就是直接使用的默认值。

 

对应的launch文件中的波特率也要做修改:

 

二、利用IMU计算旋转

1.引入库

        这里我使用了slam十四讲里提到的Sophus库、Eigen库,Eigen库是基于C++编写的矩阵库,Sophus是在Eigen的基础上编写的矩阵运算的库。非常好用!!

//安装Eigen
sudo apt-get install libeigen3-dev

Sophus可以去高博的slambook中搜索。 

2.读入数据

        要注意imu上的坐标系的标注,我见的多的坐标系都是Z轴向上的,这一款是Z轴向下的。所以在考虑重力的时候要格外注意一下。因为imu的加速度计的输出是 f=a-g 。因为重力是向下的并且该款imu的Z轴正方向也是向下的,所以g是正的。

        还有就是关于imu数据的时间戳的附加,我一开始使用的是ros中的纳秒,解算出来的数据很大,然后就采用了ros中的秒的函数结果就正确了。后来一想是因为用纳秒的时候没有换算单位哎。

        然后下面这个图就是我测试了一下代码的准确性,发现其旋转矩阵的计算精度还是比较可靠的。但是速度和位移就不是很好,目前我可以找到的原因有两个:其一是我没有进行Imu的内参标定也就是没有减去零偏,其二是Imu在求解速度和位移的时候都是要进行积分的,也就是说在这个过程中,误差也是会累计的,所以尽量不要用Imu来进行长距离的位移测量,误差会很大。


总结

        简单记录了一下该款imu的使用以及在编写程序中遇到的一些小问题。欢迎大家一起讨论~

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值