imu中文叫做惯性测量单元,它能够获取自身的加速度、角速度信息,有的imu还能够获得地磁量。实验室中使用的是BNO055 Xplained Pro。它有3个加速度计,3个陀螺仪,3个地磁计,能够测量x,y,z方向的信息。因为还在初步学习阶段,没有去了解地磁计,所以只使用了加速度计和陀螺仪获得的加速度和角速度信息。(这里有一个点我要吐槽一下,实验的时候自己烧坏了两个imu和一个usb,原因是BNO055 Xplained Pro这个模块它的管脚不是完全被焊锡包住的,安装在实验室的小车上时管脚直接与小车的金属壳体接触就给烧了,真是蠢哭了- -)l
imu在使用之前一般都要标定,加速度计和陀螺仪的标定是分开的,因为加速度计获得的加速度值飘忽不定,不是一个常量,所以不能直接在结果上减去一个值来完成标定,常用的方法有最小二乘法,具体的方法及原理可以参考这里。陀螺仪获得的信息是一个不变的常量,所以可以直接在结果上减去这个常量就可以完成标定。
本来是打算写一个程序来对加速度计进行标定的,写到后面解其次方程的时候没想到要怎么解,结果发现有用于imu标定的包,于是打算直接用 这个 。按照它的REAME.md来进行,应该是能够得到标定参数的。但是它这里面安装Ceres Solver的链接失效了,可以参考 这里 来安装。
因为写这篇文章的时候在外出差,手边没有imu采集数据,没有办法来做实验,等到回学校了再来验证是否可行吧~
推荐看一下博客,评论内容也很丰富 ,很多问题都能在评论中找到答案:https://blog.csdn.net/u011178262/article/details/83316968#_images__imu__201
https://github.com/gaowenliang/imu_utils
运行程序前修改launch的 topic 等参数
launch文件中, <param name="max_time_min" type="int" value= "80"><param name="max_cluster" type="int" value= "100">这两个参数的意义是什么?应该怎么设置呢?
max_time_min:采集IMU数据的时间,越长越好,单位分钟;
max_cluster:Allan方差的cluster,imu_utils中的launch文件中都是100,我一般也设置100
运行命令
source ~/kalibr_workspace/devel/setup.bash
注意要在dataset-dir后加上/.,在根目录运行这个命令即可(在文件目录下输出会生成一个很小的bag文件),输出的bag文件就在根目录下。
制作bag包
运行标定命令
打开--show-extraction选项在标定过程中可以可视化角点检测情况是否良好
发现角点重投影出现严重错误
角点重投影是为了显示一下用计算出来的相机矩阵对角点进行重投影得到的理论位置。
也是为了显示,理论得到的角点与实际角点之间的差别。
重投影误差最小化通常作为相机标定中的一个目标函数来用的。
然后使用lakibr的相机标定重新标定了一下模组,得到的结果重投影比较准确
注意要选择合适的相机模型和畸变模型
相机模型和畸变模型: https://blog.csdn.net/okasy/article/details/90665534#t7
重投影误差在 0.1~0.2 以内,标定结果较好。 我对相机标定完,发现右边的图范围在1~~1之间, 这样是不是标定的效果很差? 怎么解决呢?
误差范围接近1的话效果应该很差
博主,请问标定误差大 一般出现的原因是什么?
dymymao 9个月前#4楼博主你好,请问一般使用双目会去做双目极线对齐 cv::stereoRectify,这时是把双目矫正后的图像和imu放入kalibr标定Tic,还是先标定Tic',再去双目极线矫正调整Ric=Ric' Rl这两种做法哪个更好?收起回复
白巧克力亦唯心 回复 dymymao
两种都可以,但是要注意使用方式。通常大家都是用没有去畸变的图像和 imu 一起标定外参数,这时候标定的外参数是不能用来和rectify后的图像一起做vio的。因为rectify的图像是在畸变图像上还会加一个微小的旋转,即畸变图像和imu之间的外参数 和 rectify 图像跟imu之间的外参数是不一样的。
dymymao 回复 白巧克力亦唯心
如果是畸变图像和imu做的标定得到Tic',双目矫正的左目旋转为Rcc'->Tcc',则双目VIO的Tic=Tic' Tcc'^T。我理解的对吗? 此外,双目参数的标定 用kalibr的Multiple camera calibration相比直接用opencv接口stereoCalibrate会好很多吗?
白巧克力亦唯心 回复 dymymao
可以这么认为,Tcc' 只是一个旋转矩阵,平移为0. 以前我用过opencv 和kalibra两种方式标定摄像头。在我标定过程中,kalibra标定的结果确实更好,当然这可能跟我采集数据的方式有关。无论如何,kalibra 相对于opencv标定的优点更多,比如 kalibra 使用apriltag 标定板,使得每个标定格子是带 id 的,这样就使得标定过程相机可以只捕捉部分标定板就能完成标定,相机运动可以更任意,更便捷。
IMU噪声模型: 从零开始的 IMU 状态模型推导
IMU校正 IMU校正以及姿态融合 - shenshikexmu的博客 - CSDN博客
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)