本文记录使用 Kalibr 标定双目相机内外参数以及和IMU之间外参数的标定过程. 采用的硬件设备为小觅的双目VIO设备( MyntEYE), 并且默认你已经有了ROS的知识基础.
标定 stereo-imu 之前, 需要知道双目的内外参数, 所以先进行双目内外参数的标定.
标定板可以用 kalibr 提供的pdf, 里面有三种类型的标定板(Aprilgrid, Checkerboard, Circlegrid). 由于Aprilgrid能提供序号信息, 能够防止姿态计算时出现跳跃的情况, 所以建议采用Aprilgrid进行标定.
我直接下载这个pdf, 将电脑屏幕当成了标定板, 在标定前, 注意测量格子的尺寸信息填入yaml文件, 尺寸信息具体是哪些数据可以看看kalibr的说明.
如果你已经有了通过 ROS 发布 image 消息的节点, 我们只需要使用 rosbag record 工具将拍摄到的标定板图像制作成 bag 文件就行了. 注意: 通常设备采集的频率为 20-60 hz, 这会使得标定的图像过多, 而导致计算量太大. 最好将ros topic的频率降低到4hz左右进行采集. (我采集里200多张照片, 计算了估计有一两个小时)
ROS 提供了改变 topic 发布频率的节点throttle, 指令如下 :
rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /left
rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right
对左右目的ros topic降低频率后就可以制作bag了
rosbag record -O stereo_calibra.bag /left /right
采集好数据集以后, 就可以用已经安装好的 Kalibr 标定双目相机了, 指令如下:
source ros_ws/kalibr/devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras --bag /home/heyijia/stereo_calibra.bag --topics /left /right --models pinhole-radtan pinhole-radtan --target /home/heyijia/april_6x6_80x80cm_A0.yaml
或者采用 pinhole-equi 模型,对畸变大的相机效果不错
rosrun kalibr kalibr_calibrate_cameras --bag /home/heyijia/stereo_calibra.bag --topics /left /right --models pinhole-equi pinhole-equi --target /home/heyijia/april_6x6_80x80cm_A0.yaml
在标定完双目内外参数以后, 可以接着标定和 IMU 之间的外参数了. 这次采用同样的标定板, 采集数据的最佳频率为图像20Hz, IMU 200 Hz (当然其他频率也没问题).
rosbag record -O stereo_imu_calibra.bag /mynteye/left/image_raw /mynteye/right/image_raw /mynteye/imu/data_raw
注意事项:
标定 stereo-imu 外参数时,需要利用前面标定好stereo内外参数文件camchain-homeheyijiastereo_calibra.yaml,标定指令如下:
kalibr_calibrate_imu_camera --target /home/heyijia/april_6x6_80x80cm_A0.yaml --cam /home/heyijia/camchain-homeheyijiastereo_calibra.yaml --imu /home/heyijia/imu_mynteye.yaml --bag /home/heyijia/stereo_imu_calibra.bag --bag-from-to 2 37