目前做相机激光雷达联合标定的主要方法有两种,一种是基于棋盘格的标定方法,一种是基于特征点的标定方法。
其中基于棋盘格的标定方法可以通过Autoware实现,基于特征点的可以用Apollo实现。
笔者体验过Apollo(如何使用内网安装Apollo可以参看我的另一个博客:点这里),觉得它更适合拥有智能驾驶完整硬件系统的玩家使用,因为需要具备IMU、GPS等其他硬件才能完成标定。
也在github上找过纯程序标定,效果都不太理想。
综合考虑,决定还是使用Autoware,但是安装过的人都清楚,安装Autoware必须用歪网,但是如果你也和笔者一样只想做一个联合标定,其实可以只安装它的标定工具包,这个用内网完全可以完成。
毕竟,低耦合性是ROS的一大优势。
以下步骤在ubuntu18.04上完成。
mkdir -p ~/CL_calibration_ws/src
cd ~/CL_calibration_ws/src
git clone https://github.com/XidianLemon/calibration_camera_lidar.git
cd ~/CL_calibration_ws
catkin_make
source devel/setup.bash
nlopt 是github上一个很有名的开源项目,用来解决优化问题的,可以按照如下链接进行安装:
参考链接------https://github.com/stevengj/nlopt
新开一个终端
roscore
用原来的终端窗口,执行:
rosrun calibration_camera_lidar calibration_toolkit
如果安装成功,则弹出窗口如下所示:
笔者使用的是usb免驱动的摄像头,安装usb_cam这个package之后就可以被ROS调用。
参考链接:https://www.cnblogs.com/CZM-/p/6024600.html
另开终端,操作命令如下:
mkdir -p ~/camera_ws/src
cd ~/camera_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ~/camera_ws
catkin_make
source devel/setup.bash
修改usb_cam包的启动文件usb_cam.launch:
也就是这一行:
<param name="video_device" value="/dev/video0" />
我用的是笔记本,video0是笔记本自带的摄像头,video1是我的另一个usb外设,我改成video2就可以了。
启动摄像头:
roslaunch usb_cam usb_cam-test.launch
新开一个终端,启动雷达
source ~/leishen_ws /devel/setup.bash
roslaunch lslidar_c32_decoder lslidar_c32.launch --screen
可以用以下命令查看节点流:
rosrun rqt-graph rqt_graph
结果为:
可以看到激光雷达和相机的话题分别为/lslidar_point_cloud 和 /image_view 。
下面录制包,
rosbag record -a
录制的时候,可以打开rviz看一下,注意红框中的设置
录制的时候尽量录得长一点,这样的话后续可以有足够的时间调试。
参考别人的说法,录制的时候要手拿标定板,经过六个位置:
近处左、近处中、近处右
远处左、远处中、远处右
经过每个位置的时候,应该有五个动作:
平拿、左倾、右倾、上倾、下倾
我们先回放一下:
这里要注意,autoware 标定工具箱可以自定义相机话题,但是点云节点是默认的,即 /points_raw , 所以我们回放的时候要把雷达点云重映射一下:
rosbag play BAGNAME.bag /lslidar_point_cloud:=/points_raw
这时候马上打开标定工具箱:
cd ~/CL_calibration_ws
rosrun calibration_camera_lidar calibration_toolkit
弹出对话框中点击下拉框,选择相机图像节点,根据我们上面查阅的节点流,我们可以知道是/usb_cam/image_view
然后选择 Camera–> Velodyne
点击ok进入下面界面:
0.108是棋盘格每个方框的边长(单位为米),我的棋盘格是7行9列,所以另两个数是6和8。
这时候结束暂停,继续回放我们的bag文件,应该可以看到:
单击右边红框内的激光雷达界面,然后按键盘b键,设置背景为白色
这个时候还是看不到点云,此时应该使用键盘调整点云位置,键盘主要操作为:
左右上下键调整点云的上下左右,
q w e a s d可以使点云旋转,
,和。分别是缩小和放大
其中缩小或放大的速度可以由鼠标滚轮控制,
小键盘7是恢复鸟瞰图,
p是加深点云,o是使点云变淡。
这个键盘操作非常难用。。。。。。。
在播放时找到合适的场景时,点击右上角Grab即可抓取一帧,如果没有反应,可能是没有捕捉到棋盘格,可以再抓取别的时刻。每一帧点云通过单击鼠标左键进行抓取平面。
抓取足够多的帧后(一般是20帧),点击右上角的calibration,进行计算
也可以点击project进行验证,如下图所示,红点均匀分布在标定版上,说明结果合理。
感谢点赞,欢迎讨论。