自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)

目前做相机激光雷达联合标定的主要方法有两种,一种是基于棋盘格的标定方法,一种是基于特征点的标定方法。
其中基于棋盘格的标定方法可以通过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 nlopt 是github上一个很有名的开源项目,用来解决优化问题的,可以按照如下链接进行安装:
参考链接------https://github.com/stevengj/nlopt
五、启动标定工具包 新开一个终端
roscore

用原来的终端窗口,执行:
rosrun calibration_camera_lidar calibration_toolkit

如果安装成功,则弹出窗口如下所示:
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

六、录制包 笔者使用的是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:
也就是这一行:

我用的是笔记本,video0是笔记本自带的摄像头,video1是我的另一个usb外设,我改成video2就可以了。
启动摄像头:
roslaunch usb_cam usb_cam-test.launch

自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

笔者使用的是镭神32线激光雷达,
新开一个终端,启动雷达
source ~/leishen_ws /devel/setup.bash roslaunch lslidar_c32_decoder lslidar_c32.launch --screen

可以用以下命令查看节点流:
rosrun rqt-graph rqt_graph

结果为:
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

可以看到激光雷达和相机的话题分别为/lslidar_point_cloud 和 /image_view 。
下面录制包,
rosbag record -a

录制的时候,可以打开rviz看一下,注意红框中的设置
【自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)】自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

录制的时候尽量录得长一点,这样的话后续可以有足够的时间调试。
参考别人的说法,录制的时候要手拿标定板,经过六个位置:
近处左、近处中、近处右
远处左、远处中、远处右
经过每个位置的时候,应该有五个动作:
平拿、左倾、右倾、上倾、下倾
七、回放、标定 我们先回放一下:
这里要注意,autoware 标定工具箱可以自定义相机话题,但是点云节点是默认的,即 /points_raw , 所以我们回放的时候要把雷达点云重映射一下:
rosbag play BAGNAME.bag /lslidar_point_cloud:=/points_raw

这时候马上打开标定工具箱:
cd ~/CL_calibration_wsrosrun calibration_camera_lidar calibration_toolkit

弹出对话框中点击下拉框,选择相机图像节点,根据我们上面查阅的节点流,我们可以知道是/usb_cam/image_view
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

然后选择 Camera–> Velodyne
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

点击ok进入下面界面:
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片
这里有四个参数要调整,如下图红框所示:
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片
0.108是棋盘格每个方框的边长(单位为米),我的棋盘格是7行9列,所以另两个数是6和8。
这时候结束暂停,继续回放我们的bag文件,应该可以看到:
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

单击右边红框内的激光雷达界面,然后按键盘b键,设置背景为白色
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片
这个时候还是看不到点云,此时应该使用键盘调整点云位置,键盘主要操作为:
左右上下键调整点云的上下左右,
q w e a s d可以使点云旋转,
,和。分别是缩小和放大
其中缩小或放大的速度可以由鼠标滚轮控制,
小键盘7是恢复鸟瞰图,
p是加深点云,o是使点云变淡。
这个键盘操作非常难用。。。。。。。
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片
在播放时找到合适的场景时,点击右上角Grab即可抓取一帧,如果没有反应,可能是没有捕捉到棋盘格,可以再抓取别的时刻。每一帧点云通过单击鼠标左键进行抓取平面。
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

抓取足够多的帧后(一般是20帧),点击右上角的calibration,进行计算
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

其中左下角红框是重投影误差,越小越好。
也可以点击project进行验证,如下图所示,红点均匀分布在标定版上,说明结果合理。
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

点击左上角save,
以下两个都选否:
自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
文章图片

至此标定完成。
感谢点赞,欢迎讨论。

    推荐阅读