之前尝试用autoware,配环境配到吐血,配完后按照教程直接点完后报错了,感觉这种手动选取图像和点云坐标的方法不太靠谱。然后就改用camera-laser-calibration的思路,需要打印个QR码
思路
1.图像:提取图像QR码中心点,2D像素坐标
2.激光:
(1)调参,限制xyz范围,提取点云
(2)平面拟合
(3)所有平面点相加,除以点数量,作为图像对应中心点3d坐标。
3.移动标定板,保存多个对应点,solvepnp计算变换T
步骤
- 打印A1大小标定板。我是拼多多打印的,然后贴到硬纸板上。
- 相机和激光位置保持不变。
- calib.yml文件的相机内参改为小觅的内参。我是用了小觅自带的。
- calibration.launch的激光和相机topic改成自己的。onlyDrawPointsColor为false
- roslaunch 激光和相机。
- rosrun rqt_reconfigure rqt_reconfigure 调整激光范围,rviz查看/cloudCut和/plane点云,看拟合的平面是否正确。我这个激光不熟调了半天
- 平面正常后,重新启动roslaunch cam_laser_calib calibration.launch,移动标定板,solvepnp文件下会生成imageCloudPoints.txt,里面保存了对应的激光3d点和图像2D点。
- …/bin/solvepnp运行就可以得到外参Rt
- 将终端的R,t复制到calib.yml,onlyDrawPointsColor改为为true,重新启动roslaunch cam_laser_calib calibration.launch,rviz查看/imgColorCloud,就可以查看相机映射到点云的效果。
麻烦的点
1.rosrun rqt_reconfigure rqt_reconfigure 调整激光范围,容易拟合到墙面,桌面,尽量找个空旷的地方
2. 终端的R,t的逗号有问题,直接复制到yml会无法读取,只能一个个数字复制
3. 最终的结果是有点误差,应该是平面那里少了一点,后面再试试吧