【SLAM】kalibr工具IMU和双目相机标定
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【SLAM】kalibr工具IMU和双目相机标定相关的知识,希望对你有一定的参考价值。
参考技术A 推荐看一下博客,评论内容也很丰富 ,很多问题都能在评论中找到答案: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博客
kalibr标定IMU
步骤:
1:如何标定
2:标定的结果
3:如何验证标定结果的正确性
相机IMU标定的准备工作
【1】环境配置:需要安装ROS,可根据http://wiki.ros.org/ROS/Installation 选择安装版本(我安装的ubuntu版,http://wiki.ros.org/cn/jade/Installation/Ubuntu ).ROS安装成功的标志为,任意打开一个终端,运行:roscore,无报错
【2】标定工具箱:
The following two sources for the toolbox are available:
(1)building from source(我选择的这个,参考http://www.cnblogs.com/Jessica-jie/p/6536272.html)
Depends on a working installation of ROS indigo and a catkin workspace.
(2)CDE package
1.如何标定https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration
标定所需文件:
【1】 XX.bag:包含有图片信息和IMU数据的ROS包
-
将采集的数据制成.bag文件,.bag文件制作参考: https://github.com/ethz-asl/kalibr/wiki/bag-format
- .bag文件的生成需要:采集图片和Imu数据
- Kalibr的所有应用程序使用ROS包作为图像和IMU数据的源。
- .bag文件生成命令: (创建ROS包)
kalibr_bagcreater –folder dataset-dir –output-bag awsome.bag - 需要注意的是:在包含图片的文件夹的同一目录下需要一个:output空白文件夹,否则 .bag 文件无法生成
- 生成的.bag文件使用:rosbag info XX.bag 判定是否生成成功,如果只有4kb,则生成失败,而一般情况都是路径问题
提示:
- 标定工具中需要目标标定板:使用的目标标定板为April类型中的 7*5
-
图像数据的采集,采集的图像是为了制成可被接下来使用的bag包,其中相机的采集频率建议为20Hz,IMU的采集频率建议为200Hz
- 图像采集时,尽量激活所有的IMU轴,包括旋转和平移
- 避免震动,特别是在开始和结束时
- 不可移动过快,否则会出现移动模糊
【2】camchain.yaml:包含相机的内参和畸变参数的文件YAML formats(该文件包含相机内在和外在参数的校准以及IMU相对于相机的空间和时间校准参数。)
【3】IMU.yaml:包含IMU的基本参数,噪音等 YAML formats
【4】target.yaml:标定目标板的参数。(标定工具中需要目标标定板:使用的目标标定板为April类型中的 7*5)
当上述的文件都有时,使用命令,完成标定.
kalibr_calibrate_imu_camera --bag [filename.bag] --cam [camchain.yaml]
--imu [imu.yaml] --target [target.yaml]
默认情况下,时间校准关闭,可以使用--time-calibration参数启用。
有关选项的详细信息,请使用help参数:
kalibr_calibrate_imu_camera --h
2.标定结果(由以下示例跑出的结果)
3.标定结果的评定标准:
校准将生成以下输出文件
- report-imucam-%BAGNAME%.pdf :以PDF格式报告。 包含所有图表的文档。
- results-imucam-%BAGNAME%.txt :将结果摘要作为文本文件。
- camchain-imucam-%BAGNAME%.yaml :YAML格式的结果。 此文件基于输入camchain.yaml ,所有摄像机相对于IMU添加了转换(以及可选的时间移位)。
使用示例数据集的示例:
从Downloads页面下载数据集IMU-camera calibration并解压(需要FQ下载)。
The archive will contain the bag, calibration target and IMU configuration file.
使用命令,完成标定.
kalibr_calibrate_imu_camera –target xx/target.yaml –cam xx/camchain.yaml
–imu xx/IMU.yaml –bag xx/xx.bag –bag-from-to 5 45
注意:由于数据集中存在冲击,因此仅使用5到45秒之间的数据。
以上是关于【SLAM】kalibr工具IMU和双目相机标定的主要内容,如果未能解决你的问题,请参考以下文章