【Autoware】激光雷达-摄像头联合标定1- Calibration Tool Kit

一.前言

一般自动驾驶车辆上都会配备多种用途的传感器,只使用一种传感器是存在局限性的,为了提高感知定位等系统功能的鲁棒性稳定性,常采用多传感器融合的方式,一般融合包括时间同步以及空间同步。而激光雷达与摄像头之间的联合标定则是属于空间维度上的融合同步了。此外由于点云的稀疏性,在进行点云标注的时候,仅仅依靠点云数据是很难检测出目标对象的类别的,此时如果有时间同步的图像,利用深度学习进行处理,就可以较高效的检测出来了,为了精确标注,还需要把点云反投影到图像上面,判断两者是否重合,此时就需要用到激光雷达与摄像头的联合标定了。

激光雷达与摄像头的联合标定的结果也就是计算出激光雷达相较于摄像头的旋转、平移关系。


图片参考《Calibration of RGB Camera with Velodyne LiDAR.》

基本原理:

  • 与普通cam标定一样,通过标定板的变化算出cam的位姿矩阵
  • 再手动用小圈把点云中对应的标定板框出来,看下文介绍可以理解,小圈最少包含了两条点云线,两条线即可构成一个面,就是标定板所在的平面。
  • 通过lidar相对于这个面的角度推算出lidar的姿态,通过这个面点云的距离算出其位置,再和cam相对比,就能得到cam_lidar的外参矩阵了。

二.准备工作

  • 打开镭神激光雷达:

使用之前先将激光雷达的网线接到主机上;并且修改IPv4地址为:192.168.1.102 255.255.255.0 192.168.1.1;然后ping的通激光雷达的IP地址192.168.1.200即可.
1.source Workspace/catkin_ws_lslidar/devel/setup.bash
2.修改/home/clark/Workspace/catkin_ws_lslidar/src/lslidar_C16/lslidar_c16_decoder/launch/lslidar_c16.launch文件内容,适配autoware
3.roslaunch lslidar_c16_decoder lslidar_c16.launch

  • 打开摄像头:

(查看摄像头设备信息命令:v4l2-ctl --list-devices、lsusb)
1.安装: sudo apt-get install ros-melodic-usb-cam
2.根据摄像头的情况修改配置文件: sudo vim /opt/ros/melodic/share/usb_cam/launch/usb_cam-test.launch
3.启动摄像头:roslaunch usb_cam usb_cam-test.launch

  • rviz显示激光点云与摄像头:

1.在新的终端中打开rviz,修改Global Options中的Fixed FrameVelodyne

2.在右侧Views视窗区域将Type类型修改为ThirdPersonFollower(rviz)这样就能用鼠标自由拖动激光点云数据了。

3.点击左下角Add按钮后,By topic选项卡里面就是当前ros环境中所有的话题各自能用的可视化控件,选择其中/usr_cam/image_raw话题下的Image控件后,就能同时看到摄像头数据以及激光点云数据。

4.内参标定准备

  • 这里需要准备一个标定板,我这里将棋盘格标定板设置成KT板A1尺寸大小,棋盘格的格子数目为12x9,每个棋盘格的边长为65mm,然后去图文店打印出来(共36元),再在KT板后面贴上一层硬纸板加固一下,防止意外弯曲损坏,保证平整。


  • 摄像头为HD USB Camera,两个短焦6mm,一个长焦25mm


  • 激光雷达为镭神智能的Lslidar-c16


5.摄像头内参标定

需要先用上述棋盘格标定板单独标定摄像头的内参,得到yaml内参文件供后续激光雷达摄像头联合标定使用

source /home/autoware/Autoware/install/setup.bash
#使用autoware自带的相机内参标定工具cameracalibrator.py 
rosrun  autoware_camera_lidar_calibrator cameracalibrator.py --square 0.065 --size 11x8 image:=/usb_cam/image_raw camera:=/usb_cam

6.录制ROSBAG包
联合标定准备标定板和录制ROS BAG,标定板用的是内参标定的棋盘格(129个格子,也就是内侧角点数目为118,每个格子边长65cm),需要在小车上录制激光雷达和摄像头的ROS Bag数据包,然后将保存后的Bag再拷贝到自己台式机上播放用于标定的话题输入:摄像头(/usb_cam/image_raw),激光雷达(/points_raw)

  • 在激光雷达与摄像头同时启动的情况下,确保ros环境中存在/points_raw以及/usb_cam/image_raw这两个话题。

  • 开始录制
    rosbag record -O Lslidar_c16_HD_USBCamera_Calibration.bag /usb_cam/image_raw /points_raw,其中Lslidar_c16_HD_USBCamera_Calibration.bag可以是任何随意命名,后面跟着的分别是摄像头与激光雷达的两个话题。
    注:一般录制的时候最好可以按照规定的站位以及拿标定板的动作来进行。1.拿标定板的人需要将标定板始终保持在摄像头视角范围内;2.

三、单独编译标定工具箱calibration_camera_lidar

Autoware1.10中的Sensing模块是自带有Calibration Tool Kit的,但1.10之后就已经取消了这个联合标定工具包了,因此需要单独安装。

autoware1.10自带有标定工具箱


1. 下载并编译安装nlopt

mkdir build  &  cd build
cmake ..  &  make  &  sudo make install

2. 下载并编译安装calibration_camera_lidar

  • 回到src同级目录进行catkin编译
    完整命令如下:
mkdir -p catkin_ws_calibration_lidar_camera/src
cd ..  &&  catkin_make
  • 报错1: Couldn't find executable named calibration_toolkit

    解决1
    因为我的ros是melodic,因此需要将/home/clark/Projects/calibration_camera_lidar-master/catkin_ws_calibration_lidar_camera/src/ls_calibration/calibration_camera_lidar目录下的CMakeLists.txt中第72行、944、114行中分别增加三个melodic
#第72行、944、114行修改前
if ("${ROS_VERSION}" MATCHES "(indigo|jade|kinetic)")
#第72行、944、114行修改后
if ("${ROS_VERSION}" MATCHES "(indigo|jade|kinetic|melodic)")

再退到src同级目录,重新进行编译

  • 报错2: libnlopt.so.0: cannot open shared object file: No such file or directory

    解决2
    这是因为刚才安装的libnlopt.so.0的位置不对,只需要在/etc/ld.so.conf.d目录下新建一个libnlopt.conf文件,在其中输入/usr/local/lib是其库文件安装到的位置
cd /etc/ld.so.conf.d/
sudo vim libnlopt.conf #用vim打开,在其中输入/usr/local/lib,:wq保存退出
sudo ldconfig使配置生效
  • 再重新运行命令rosrun calibration_camera_lidar calibration_toolkit
    就成功跳出了标定工具,则说明标定工具箱安装成功。

3. 利用calibration_camera_lidar标定工具箱进行激光雷达摄像头的联合标定

  • 循环播放刚才录制的ROSBAG
    rosbag play Lslidar_c16_HD_USBCamera_Calibration.bag --loop

  • 可以用rostopic list看到此时ROS环境下的话题信息

  • 进入calibration_camera_lidar的devel目录, source devel/setup.bash,然后运行命令启动联合标定程序rosrun calibration_camera_lidar calibration_toolkit,在下拉框中选择相机话题/usb_cam/image_raw
  • 在下一个框中选择“摄像头到激光雷达” Camera -> Velodyne

  • 然后就会打开标定窗口,在最上方填入Patter Size为0.065 x 0.065(单位为m,因为我用的棋盘格边长为65mm,所以这里填0.065);Pattern Number为11 x 8(棋盘格数目为12 x 9,去掉最外面的一圈,实际内部角点数为11 x 8)


[图片上传中...(image.png-af3ec0-1616032061878-0)]

用ros自带的标定后保存的内参文件是yaml格式,这个标定工具箱需要yml格式,只需要将后缀改一下即可

第一个Load Option选择Yes

第二个Load Option选择No
  • 加载完毕后会看到相机的内参信息


    内参矩阵

    畸变系数
  • 右侧会出现ROSBAG包中摄像头与激光雷达的同步数据内容


  • 此时摄像头区域是在播放状态,切换到ROSBAG播放的终端处,按空格暂停。

播放状态
按空格后,进入暂停状态
  • 右侧的激光点云区域一开始是黑屏的什么也看不见,需要特定的键盘按钮来显示出三维激光点云数据。



    该图出处如水印所示
  • 基本操作如下:
    1.右侧数字小键盘中“上”,“下”,“左”,“右”,“PgUp”以及“PgDn”这六个按键用于平移激光点云。
    2.a、d、w、s、q、e用来旋转激光点云。
    3.数字“1”,“2”用来设置是perspective projection透视投影还是orthogonal projection正交投影。

4.用“o”,“p”控制点云的大小,o变小,p变粗。


按o变细

按p变粗

5.用“-”,“+”控制放大,缩小。


用“-”放大

用“+”缩小
  1. 用“b”来改变激光点云区域的背景(background)颜色,使得点云显示更加明显,方便标定时选择三维点。


    按“b”跳出颜色板选择背景颜色
修改背景色为蓝色突出点云的白色
  • 最后通过上述键盘按键的调整,将左侧摄像头与右侧激光点云画面同步,方便左右选择对应的标定板特征点,并且标定板的点云也很好区分,处于视角正中心。


    通过上述键盘按键的调整,将左侧摄像头与右侧激光点云画面同步,方便左右选择对应的标定板特征点。
  • 然后点击一下右上角的“Grab”按钮,用来捕获当前时刻的图像与点云


标定板的中心位置选择一个圆形的区域,尽量保证向外侧的平面法向量垂直于标定板平面
grab一次后,回到那个暂停的终端,继续跑,跑的差不多了再空格暂停,继续grab

注:若一次grab始终不能鼠标左键单击选择垂直于点云标定板的区域,则点击右侧上方的“Remove”按钮,删除该次Grab,重新跑ROSBAG,在合适的地方空格暂停,继续Grab抓取关键帧与激光点云帧。

  • 当grab到差不多15组点云与图像对后,点击窗口右上角的"Calibrate"按钮进行标定


  • 标定结束后,会在左侧的"CameraExtrinsicMat"窗口显示出外参矩阵


    标定后得到的外参矩阵

  • 我这里联合标定了10组不同的点后会保存到自动将生成的标定结果保存到home目录下,名称类似为:CameraExtrinsicMat03181454.yml,该文件包含内参和外参。
第一个Save Option选择No

第二个Save Option也选择No
  • 如果选是的话,会将所有的标定信息都存入yaml文件中


    外参标定文件

    第一个三维激光点云

    第一个摄像头标定的图像点
第一组点对中棋盘格的姿态信息

标定结果测试

获取到外参标定yaml文件后,需要对联合标定的结果进行测试,可以在Autoware中使用Calibration Publisher,来发布和对齐LiDAR与Camera之间的转换

  • 打开autoware
source /home/autoware/Autoware/install/setup.bash
roslaunch runtime_manager runtime_manager.launch
  • 切换到Sensing感知模块,点击右下区域的Calibration Publisher


  • 打开Autoware/Sensing下的Point Image节点


    打开Autoware/Sensing下的Point Image节点
  • 在Rviz中,Panels/Add New Panel内添加ImageViewerPlugin,填写Image Topic,本例为/camrea/rgb/image_raw,Point Topic,本例为/points_image,


    Panels/Add New Panel内添加ImageViewerPlugin

参考:

  1. M. Velas, M. Spanel, Z. Materna, A. Herout. Calibration of RGB Camera with Velodyne LiDAR. In WSCG 2014 Communication papers proceedings.
    2.autoware1.14安装相机和激光雷达联合标定工具
    3.Autoware完整安装及联合标定工具箱安装
    4.https://adamshan.blog.csdn.net/article/details/81670732
    5.https://www.cnblogs.com/dlonng/p/13091956.html
    6.https://blog.csdn.net/learning_tortosie/article/details/82347694
    7.http://wiki.ros.org/but_calibration_camera_velodyne
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容