本文主要使用了kalibr工具标定ZED2双目相机+IMU,并运行VINS-Fusion。
阐述了标定板的选择方法,以及标定中的注意事项。
参考博客:
ZED2相机标定及运行VINS-mono
用imu_utils标定IMU,之后用于kalibr中相机和IMU的联合标定
Ubuntu16.04利用kalibr工具进行ZED2相机的标定
1、使用kalibr工具标定ZED2双目相机,按照上述博客安装kalibr工具。我最开始用的eigen版本为3.3.9,发现这个版本编译kalibr总是报错,换成eigen3.3.7之后就没有问题了。
2、用imu_utils标定IMU,依次安装编译code_utils、imu_utils。
imu_utils下载地址为:https://github.com/gaowenliang/imu_utils
code_utils下载地址为: https://github.com/gaowenliang/code_utils
注意,不要同时把imu_utils和code_utils一起放到src下进行编译。
由于imu_utils 依赖 code_utils,所以先把code_utils放在工作空间的src下面,进行编译。然后再将imu_utils放到src下面,再编译。
关于标定板的选择,checkerboard和aprilgrid这两种是比较常用的。相机需要距离标定板1-2m,标定板占据视野60%以上。
**注意:**标定过程中,标定板不要离开相机视野范围,开始和结束要平稳进行,尽量使标定板出现在视野所有角落。
checkerboard:
注意,targetCols、targetRows数的是内角点数目
target_type: 'checkerboard' #gridtype
targetCols: 6 #number of internal chessboard corners
targetRows: 8 #number of internal chessboard corners
rowSpacingMeters: 0.17 #size of one chessboard square [m]
colSpacingMeters: 0.17 #size of one chessboard square [m]
aprilgrid:
tagSpacing=小方格边长/大方格边长
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.088 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
标定板下载:https://github.com/ethz-asl/kalibr/wiki/downloads#calibration-targets
也可以使用命令生成PDF文件:
kalibr_create_target_pdf --type checkerboard --nx 6 --ny 6 --csx 0.03 --csy 0.03
kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.08 --tspace 0.03
首先,启动ZED2的ROS节点:
roscore
roslaunch zed_wrapper zed2.launch
查看topic,开启可视化图像,确保标定板处于左右目图像中:
rostopic list
rosrun image_view image_view image:=/zed2/zed_node/left/image_rect_gray
rosrun image_view image_view image:=/zed2/zed_node/right/image_rect_gray
降低图像频率,查看当前频率:
rosrun topic_tools throttle messages /zed2/zed_node/imu/data 280 /imu/data
rosrun topic_tools throttle messages /zed2/zed_node/left/image_rect_gray 4.0 /left/gray
rosrun topic_tools throttle messages /zed2/zed_node/right/image_rect_gray 4.0 /right/gray
rostopic hz /left/gray
rostopic hz /right/gray
开始录制一个bag文件:
rosbag record -O Kalib_data_vga.bag /imu/data /left/gray /right/gray
标定相机参数:
kalibr_calibrate_cameras --bag Kalibr_data.bag \
--topics /left/gray /right/gray \
--models pinhole-radtan pinhole-radtan
--target april_6x6_80x80cm.yaml
把相机静止放置,录制两小时imu数据,修改launch文件。
rosbag record -O imu_calibration /imu/data
"imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/zed2/zed_node/imu/data_raw"/>
<param name="imu_name" type="string" value= "ZED2"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/>
<param name="max_cluster" type="int" value= "200"/>
</node>
</launch>
roslaunch imu_utils ZED2_calibration.launch
rosbag play -r 200 imu_calibration.bag
联合标定主要是为了获得相机和IMU轴系的转换关系
kalibr_calibrate_imu_camera --bag Kalibr_data.bag \
--cam camchain-Kalibr_data.yaml \
--imu imu-params.yaml \
--target target april_6x6_80x80cm.yaml
到这里就大功告成啦!