如何使用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)_第1张图片

六、录制包

笔者使用的是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

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第2张图片
笔者使用的是镭神32线激光雷达,

新开一个终端,启动雷达

source ~/leishen_ws /devel/setup.bash
roslaunch lslidar_c32_decoder lslidar_c32.launch --screen

可以用以下命令查看节点流:

rosrun rqt-graph rqt_graph

结果为:

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第3张图片
可以看到激光雷达和相机的话题分别为/lslidar_point_cloud 和 /image_view 。

下面录制包,

rosbag record -a 

录制的时候,可以打开rviz看一下,注意红框中的设置

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第4张图片

录制的时候尽量录得长一点,这样的话后续可以有足够的时间调试。

参考别人的说法,录制的时候要手拿标定板,经过六个位置:

近处左、近处中、近处右

远处左、远处中、远处右

经过每个位置的时候,应该有五个动作:

平拿、左倾、右倾、上倾、下倾

七、回放、标定

我们先回放一下:

这里要注意,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

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第5张图片

然后选择 Camera–> Velodyne

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第6张图片

点击ok进入下面界面:

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第7张图片这里有四个参数要调整,如下图红框所示:

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第8张图片0.108是棋盘格每个方框的边长(单位为米),我的棋盘格是7行9列,所以另两个数是6和8。

这时候结束暂停,继续回放我们的bag文件,应该可以看到:

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第9张图片

单击右边红框内的激光雷达界面,然后按键盘b键,设置背景为白色
如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第10张图片这个时候还是看不到点云,此时应该使用键盘调整点云位置,键盘主要操作为:

左右上下键调整点云的上下左右,

q w e a s d可以使点云旋转,

,和。分别是缩小和放大

其中缩小或放大的速度可以由鼠标滚轮控制,

小键盘7是恢复鸟瞰图,

p是加深点云,o是使点云变淡。

这个键盘操作非常难用。。。。。。。

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第11张图片在播放时找到合适的场景时,点击右上角Grab即可抓取一帧,如果没有反应,可能是没有捕捉到棋盘格,可以再抓取别的时刻。每一帧点云通过单击鼠标左键进行抓取平面。
如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第12张图片
抓取足够多的帧后(一般是20帧),点击右上角的calibration,进行计算

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第13张图片
其中左下角红框是重投影误差,越小越好。

也可以点击project进行验证,如下图所示,红点均匀分布在标定版上,说明结果合理。

如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第14张图片
点击左上角save,

以下两个都选否:
如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第15张图片
如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)_第16张图片
至此标定完成。

感谢点赞,欢迎讨论。

你可能感兴趣的:(自动驾驶,github,linux)