前言
ROS功能包:livox_camera_lidar_calibration提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。
前一篇链接中在gazebo中搭建了ROS功能包(livox_camera_lidar_calibration)的仿真场景
本篇在gazebo中进行相机内参的标定
采集相机标定内参的棋盘标定板图像
要求:
要准备20张以上的照片数据,各个角度和位置都要覆盖
启动搭建的gazebo场景
通过rqt_image_view来保存获取的图像
rqt_image_view
点击那个保存的图标就行了.
在livox_camera_lidar_calibration文件夹下,新建data/camera/photos文件夹,在data/camera下新建in.txt文件
把图片保存在photos下面就行了
然后移动棋盘标定板
在gazebo中有个可以直接移动的图标,就是那个十字箭头,然后选中棋盘标定板,出现3个轴,然后拖动鼠标就可以移动
我在各个位置拍了8张
然后不同角度的拍照,旋转棋盘标定板,改变一定角度,不要太大也.
gazebo也有个图片可以改变物体姿态,
然后在改变3个轴的姿态,再拍几张
重复上面的过程,拍了21张图片
相机内参标定配置
编辑in.txt文件,写入所有需要使用的照片名称
然后编辑cameraCalib.launch文件,将里面的配置弄好
需要改的是
图片名称路径和文件路径
行数和列数 与每个格的尺寸
进行相机内参标定
修改好后输入指令开始标定
roslaunch camera_lidar_calibration cameraCalib.launch
其中有的图片运行会非常慢,或者找不到角点,经过调试发现
调用的节点的CPP中有这样一行
if (0 == findChessboardCorners(imageInput, board_size, image_points_buf)) {
这的检测时间和条件是很高的.
我一开始采的很多图片就识别不了.因为opencv的那个函数就是那样子的.
对于这个问题,可以使用 camera_calibration 这个功能包,在线的采集标定图像,方便一些
最后求到相机内参是这样的: