Kalibr标定camera-IMU详细步骤

Kalibr标定相机和IMU

——Camera-IMU Calibration

基本情况

目的

我们进行camera-IMU标定的目的是为了得到IMU和相机坐标系的相对位姿矩阵T和相对时间延时t_shift(t_imu=t_cam + t_shift)。

需要的文件

1、.bag:包含有图片信息和IMU数据的ROS包
2、camchain.yaml: 包含相机的内参、畸变参数的文件,如果是双目的话,还包含两个相机的位置转换矩阵;
3、IMU.yaml: 包含IMU的噪声密度、随机游走;

4、target.yaml:标定目标板的参数

所以在进行camera-IMU 标定前,我们分别要对camera内参和IMU进行标定得到相应的camchain.yaml和IMU.yaml文件

输出的结果

IMU和相机坐标系的相对位姿矩阵T和重投影误差(或者像素误差,Pixel Error(像素误差)指的是the standard deviation of the reprojection error (in Pixel) in both x and y directions respectivly(在x和y方向上以像素为单位的重投影误差的标准差。根据优化的准则我们知道重投影误差越小,就说相机标定的精度越高)。

  准备工作

提前准备好camchain.yaml(包含相机的内参、畸变参数的文件,如果是双目的话,还包含两个相机的位置转换矩阵)、IMU.yaml(包含IMU的噪声密度、随机游走)、target.yaml(标定目标板的参数),并制作.bag文件。

相机内参标定

可以直接使用matlab的视觉工具箱进行标定,输入文件为20张及以上对标定板在不同角度拍摄的照片和标定板尺寸,具体步骤可以参考:

https://www.cnblogs.com/li-yao7758258/p/5929145.html

    输出结果为相机内参、畸变系数、重投影误差等。

.bag文件

内容

这是在连续时间获得的拍摄标定版的图像和IMU数据包,需要自己采集后再利用kalibr提供的一个工具去转化成.bag包。.bag文件的具体内容是:标定需要的图像以及相对应的imu数据。

图片格式是:19位时间(精度为ns,精度不够可以补0).png。

IMU文件格式是:19位时间戳(精确到ns,精度不够可以补0),角速度,含重力的加速度

制作

输入命令kalibr_bagcreater --folder dataset-dir --output-bag awsome.bag

dataset-dir是数据输入路径:

kalibr_bagcreater --folder kalibr_workspace/renamed/E_up/. --output-bag E_up.bag

注意要在dataset-dir后加上/.,在根目录运行这个命令即可(在文件目录下输出会生成一个很小的bag文件),输出的bag文件就在根目录下。E_up文件夹结构如下,cam0里面为图片:

其内文件结构应是这样:

/cam0/image_raw

/imu0

awsome.bag 是制作好的bag文件。输出默认在kalibr_bagcreater此时在的目录下。

参考

https://github.com/ethz-asl/Kalibr/wiki/bag-format

可以使用rosbag info XX.bag来查看生成的bag文件情况(包括图片、IMU、时间数据等)

yaml文件信息

camchain.yaml:

imu.yaml:

target.yaml:

tagCols 为标定格每行个数

tagRows 为标定格每列个数

tagSize 为标定格二维码边长,单位m

参考:https://github.com/ethz-asl/kalibr/wiki/calibration-targets

标定步骤

将标定板打印出来,置于平稳,光照充足的地方,注意要保持平整。使得相机与IMU位置相对固定,移动camera-IMU系统让IMU三个轴都被激活(不能只有转动,最好在转动的同时移动,确保加速度计也有输出)采集数据。参考:

https://github.com/ethz-asl/kalibr

当需要的四个文件都有时,使用命令: 

     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表示取的标定数据长度,开始部分数据和结束部分可能会有晃动,把它去除)在背后加上--time—calibration可以标定IMU相对于camera的延时。

注意事项

1、要保证cam和imu的时戳有重合部分,不然可能报错传感器时间不同步。处理标定数据的时候最好让cam起始时间和imu起始时间对应上,不然也可能出现该问题。

2、如果标定结果中加速度和陀螺误差曲线(红色)没有包络住误差值(蓝色曲线)或相反的误差值显示得太小,则可以适当放大或缩小imu.yaml中imu的误差参数。

 

标定结果

Timeshift表示的就是IMU相对于camera的延时;

重投影误差,大部分在1说明很准确。一个数值代表差一个像素点。

参考文献

相机-IMU标定

https://blog.csdn.net/zhubaohua_bupt/article/details/80222321

matlab相机内参标定

https://www.cnblogs.com/li-yao7758258/p/5929145.html

yaml文件参数

https://blog.csdn.net/zhubaohua_bupt/article/details/80222321

.bag制作

https://blog.csdn.net/w492751512/article/details/81218618

https://blog.csdn.net/w492751512/article/details/81218618

 

 

  • 26
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文锦渡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值