本文仅用于记录自己学习过程。
使用方法
Kalibr包括:相机内参,多相机外参, (已知IMU和相机内参的)相机与IMU标定,以及扩展Kalibr支持IMU内参标定。
当已知IMU内参和相机内参后,使用按照指定方式录制的rosbag,用如下指令进行标定:
rosrun kalibr kalibr_calibrate_imu_camera \
--bag /home/larrydong/imu_ws/data/imu_cam.bag \
--cam /home/larrydong/imu_ws/data/imu_cam-camchain.yaml \
--imu /home/larrydong/imu_ws/data/imu.yaml \
--target /home/larrydong/imu_ws/data/aprilgrid.yaml
可以看到,输入参数包括:rosbag,相机内参,imu内参,和棋盘格配置文件。
内参获取
相机内参获取
个人实际使用时,首先将相机内参单独标定,以获得xxx-camchain.yaml
配置文件,可以采用kalibr的代码,但它这个代码初始化时总有些问题,无法收敛。因此我采用matlab先进行标定,再将matlab标定的参数修改camchain.yaml
配置文件。
IMU内参标定
IMU内参标定理论上可以用Kalibr-extend进行,但这里采用另一个工具,imu_utils
进行标定。详见:【学习记录】IMU内参标定:Allan方差与代码。同样,标定后修改imu.yaml
配置文件。
运行过程与结果
可以看到进行了一个优化,
最后优化得到了最终结果,误差还是蛮大的(毕竟相机和IMU都比较差),得到了IMU到camera的坐标系变换:旋转矩阵基本是
[
1
,
0
,
0
;
0
,
0
,
−
1
;
0
,
1
,
0
]
[1,0,0; 0,0,-1; 0,1,0]
[1,0,0;0,0,−1;0,1,0],即绕x轴正向转了90°: