目录
标定介绍
内参-外参
标定分为内参和外参标定,其中内参标定是确定传感器自身的模型参数,即确定仅与传感器自身存在关系的参数,所以imu和相机都需要进行内参标定。外参标定则是确定imu和相机之间的刚体变换关系,也就是确定两个传感器坐标之间的三维变换矩阵。
标定方法
其中相机内参和外参可以使用kalibr标定,具体步骤可以参考下面的kalibr imu-相机标定;
imu标定则需要使用其他工具,如Allan_variance_ros工具、imu-utils工具进行随即误差标定,一般不需要进行imu的系统误差标定,默认imu性能较好,尺度、工装误差(3个轴之间不正交)在出厂时的校正效果可以直接使用,而加速度计和陀螺仪的bias偏差、重力矢量会在标定算法、SLAM算法中估计,无需确定。
此外,最近发现一个已经集成的ros-imu工具箱,可以在rviz中查看imu姿态:https://github.com/CCNYRoboticsLab/imu_tools。
imu标定中的注意事项:
结合之前的几篇博客:
airsim IMU仿真_scjdas的博客-优快云博客(介绍Imu误差模型,连续时间误差与离散时间误差)
结合其他几个大牛技术团队的建议,在imu随机误差标定完成后,可以适当放大随机误差,以保证没有被建模到的误差也被融入算法中。
ORB-SLAM3、kalibr、TUM-VI都这样建议(依次展示):
kalibr imu-相机标定
参考:
Kalibr 之 Camera-IMU 标定 (总结)_晨光ABC的博客-优快云博客
Kalibr标定工具箱使用详细过程_随机游走321的博客-优快云博客
手机上的SLAM(7):Kalibr相机+IMU离线标定 - 知乎
kalibr安装
参考官方安装教程:
参考官方安装教程: https://github.com/ethz-asl/kalibr/wiki/installation
安装完成后使用官方提供的数据包测试
双目标定
相机驱动
双目分为单设备和多设备,我们的双目相机是单设备,也就是双目图像拼接在一起。
使用usb-cam发布ros图像,在其launch文件中设置分辨率的宽度为2倍。这里的分辨率不能乱取,可以根据报错反推对应分辨率!
再写ros包分割拼接在一起的双目图像
相关代码见:
ROS调用USB双目摄像头模组_ros usb_cam_昼行plus的博客-优快云博客
标定
rosbag录制
rosbag record /left_cam/image_raw /right_cam/image_raw -O images.bag
标定板配置文件
#example for aprilgrid
# 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
#example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]
#example for checkerboard
target_type: 'checkerboard' #gridtype
targetCols: 13 #number of internal chessboard corners
targetRows: 11 #number of internal chessboard corners
rowSpacingMeters: 0.05 #size of one chessboard square [m]
colSpacingMeters: 0.05 #size of one chessboard square [m]
标定命令
rosrun kalibr kalibr_calibrate_cameras --target checkBoard_13x11.yaml --bag images.bag --bag-from-to 5 60 --models pinhole-radtan --topics /left_cam/image_raw --show-extraction
imu-相机标定
checkborad
rosrun kalibr kalibr_calibrate_imu_camera --target checkBoard_13x11.yaml --bag images_imu.bag --bag-from-to 5 60 --cam images-camchain.yaml --imu imu.yaml --imu-models scale-misalignment
april_tag
rosrun kalibr kalibr_calibrate_imu_camera --target april_6x6.yaml --bag images_imu.bag --bag-from-to 5 160 --cam images_imu-camchain.yaml --imu imu.yaml --imu-models calibrated
所遇问题:
assert(_bufferTmin <= _time.toScalar() < _bufferTmax) failed [1.40473e+09 <= 1.40473e+09 < 1.40473e+
解决参考:Kalibr进行相机-IMU联合标定踩坑记录RuntimeError: Optimization failed!_HyperZhu的博客-优快云博客
但此处要注意,调大博客中提到的参数会导致计算量增大,运行结果的重投影误差也很大,所以要慎重调整参数,一般这里报错说明数据录制效果不好或者设备采集到的数据质量差,需要重新录制或者更换高质量设备