传感器标定是自动驾驶的基本需求,一个车上装了多个/多种传感器,而它们之间的坐标关系是需要确定的。
多传感器的联合标定是标定传感器之间的相对外参。

  1. 摄像头是RGB图像的像素阵列;
  2. 激光雷达是3-D点云距离信息(有可能带反射值的灰度值);
  3. GPS-IMU给的是车身位置姿态信息;

2D-3DPnP算法(n个3D空间点和它们在相机下图像坐标系的投影位置,估计相机所在的运动位姿)
求解激光雷达的姿态变化采用ICP,而摄像头的运动采用特征匹配。后者有一个单目SFM的scale问题。

1.激光雷达与摄像头性能对比

在无人驾驶环境感知设备中,激光雷达和摄像头分别有各自的优缺点。

摄像头的优点是成本低廉,用摄像头做算法开发的人员也比较多,技术相对比较成熟。摄像头的劣势,第一,获取准确三维信息非常难(单目摄像头几乎不可能,也有人提出双目或三目摄像头去做);另一个缺点是受环境光限制比较大。

激光雷达的优点在于,其探测距离较远,而且能够准确获取物体的三维信息;另外它的稳定性相当高,鲁棒性好。但目前激光雷达成本较高,而且产品的最终形态也还未确定。

就两种传感器应用特点来讲,摄像头和激光雷达摄像头都可用于进行车道线检测。除此之外,激光雷达还可用于路牙检测。对于车牌识别以及道路两边,比如限速牌和红绿灯的识别,主要还是用摄像头来完成。如果对障碍物的识别,摄像头可以很容易通过深度学习把障碍物进行细致分类。但对激光雷达而言,它对障碍物只能分一些大类,但对物体运动状态的判断主要靠激光雷达完成。

2.激光雷达和摄像头分别完成什么工作

无人驾驶过程中,环境感知信息主要有这几部分:一是行驶路径上的感知,对于结构化道路可能要感知的是行车线,就是我们所说的车道线以及道路的边缘、道路隔离物以及恶劣路况的识别;对非结构道路而言,其实会更加复杂。

周边物体感知,就是可能影响车辆通行性、安全性的静态物体和动态物体的识别,包括车辆,行人以及交通标志的识别,包括红绿灯识别和限速牌识别。

对于环境感知所需要的传感器,我们把它分成三类:

感知周围物体的传感器,包括激光雷达、摄像头和毫米波雷达这三类;

实现无人驾驶汽车定位的传感器,就是 GPS 、IMU 和 Encoder;

其他传感器,指的是感知天气情况及温、湿度的传感器。

今天主要讲的是感知周围物体的传感器,即:激光雷达、毫米波雷达和摄像头。其实他们都有各自的优缺点。

在无人驾驶环境感知中,摄像头完成的工作包括:

*车道线检测;
*障碍物检测,相当于把障碍物识别以及对障碍物进行分类;
*交通标志的识别,比如识别红绿灯和限速牌。

对车道线的检测主要分成三个步骤:

第一步,对获取到的图片预处理,拿到原始图像后,先通过处理变成一张灰度图,然后做图像增强;

第二步,对车道线进行特征提取,首先把经过图像增强后的图片进行二值化( 将图像上的像素点的灰度值设置为 0 或 255,也就是将整个图像呈现出明显的黑白效果),然后做边缘提取;

第三步,直线拟合。

车道线检测难点在于,对于某些车道线模糊或车道线被泥土覆盖的情况、对于黑暗环境或雨雪天气或者在光线不是特别好的情况下,它对摄像头识别和提取都会造成一定的难度。

另一个是障碍物检测。上图是我们在十字路口做的实验,获取到原始图像后,通过深度学习框架对物体进行识别。在这当中,做训练集其实是主要的难点。

还有一个是道路标识的识别,这一部分的研究比较多,这里不再赘述。

3.激光雷达能够完成什么工作

第一是路沿检测,也包括车道线检测;第二是障碍物识别,对静态物体和动态物体的识别;第三是定位以及地图的创建。

对于路沿检测,分为三个步骤:拿到原始点云,地面点检测、提取路沿点,通过路沿点的直线拟合,可以把路沿检测出来。

接下来是障碍物识别,识别诸如行人、卡车和私家车等以及将路障信息识别出来。

障碍物的识别有这样几步,当激光雷达获取三维点云数据后,我们对障碍物进行一个聚类,如上图紫色包围框,就是识别在道路上的障碍物,它可能是动态也可能是静态的。

最难的部分就是把道路上面的障碍物聚类后,提取三维物体信息。获取到新物体之后,会把这个物体放到训练集里,然后用 SVM 分类器把物体识别出来。

如上图,左上角、左下角是车还是人?对于机器而言,它是不清楚的。右上角和右下角(上图)是我们做的训练集。做训练集是最难的,相当于要提前把不同物体做人工标识,而且这些标识的物体是在不同距离、不同方向上获取到的。

我们对每个物体,可能会把它的反射强度、横向和纵向的宽度以及位置姿态作为它的特征,进行提取,进而做出数据集,用于训练。最终的车辆、行人、自行车等物体的识别是由SVM分类器来完成。我们用这种方法做出来的检测精确度还是不错的。

利用激光雷达进行辅助定位。定位理论有两种:基于已知地图的定位方法以及基于未知地图的定位方法。

基于已知地图定位方法,顾名思义,就是事先获取无人驾驶车的工作环境地图(高精度地图),然后根据高精度地图结合激光雷达及其它传感器通过无人驾驶定位算法获得准确的位置估计。现在大家普遍采用的是基于已知地图的定位方法。

制作高精度地图也是一件非常困难的事情。举个例子,探月车在月球上,原来不知道月球的地图,只能靠机器人在月球上边走边定位,然后感知环境,相当于在过程中既完成了定位又完成了制图,也就是我们在业界所说的 SLAM 技术。

激光雷达是获取高精度地图非常重要的传感器。通过 GPS、IMU 和 Encoder 对汽车做一个初步位置的估计,然后再结合激光雷达和高精度地图,通过无人驾驶定位算法最终得到汽车的位置信息。

高精地图可分为基础层、道路信息层、周围环境信息层和其他信息层。

比如基础层,有车道的宽度、坡度、倾斜角、航向、高程、车道线信息、人行道和隔离带等等。之后还有信息层,相当于告诉每一个道路上限速的标记、红绿灯标记,还有一个就是环境信息层,相当于周围建筑物的三维模型。其他信息层,比如说天气信息、施工信息等等,天气信息非常重要,它提供一个场景信息,比如说天气非常恶劣的时候,比如下雨天,如果高精度地图能提供天气信息,或者无人驾驶汽车车身所携带的传感器,能够感知到下雨信息,这时非常有利于指导无人驾驶汽车做一些决策。

现在对高精度地图的定义,不同地图厂家有不同定义的方式。做高精度地图是为了辅助无人驾驶,所谓高精度地图就是相比之前的导航地图,前者精确度更高,可以达到厘米级;另一个就是高精度地图包含更多的信息量,比如说车道的宽度、倾斜度等信息。

4.激光雷达与摄像头的融合

激光雷达与摄像头融合,其实相当于是激光雷达发挥激光雷达的优势,摄像头发挥摄像头的优势,他们在某些地方是做得不够好,需要两个传感器甚至多个传感器信息进行底层的融合。

在融合的时候,首先第一步,标定。比如说左上角(上图),我看到凳子,左下角激光雷达也看到的是凳子,那么我通过标定的方式告诉它,其实两个是同一个物体。

其实摄像头发现同一个物体是非常容易的,比如做人的跟踪或车的跟踪。对于激光雷达而言, 要去识别前后帧是否同一辆车和同一个行人是非常困难的。

激光雷达有一个好处:如果可以通过摄像头告诉它前后两帧是同一个物体,那么通过激光雷达就可以知道物体在这前后两帧间隔内:运动速度和运动位移是多少。这是非常关键的,因为只有做运动物体的跟踪才能做一些预测。

人在驾驶的过程中,他得时刻知道周围物体的运动状态。对于无人驾驶,除了对车辆进行位置的估计以及导航之外,其实还需要对周边物体、运动物体的跟踪和预测,这是非常有意义的。

5.算法

由相机捕获的图像数据由(U,V)表示,激光雷达捕获的3维点阵云用(X,Y,Z)表示,我们的目标是建立一个转化矩阵M,将3维点(x,y,z)映射到2维点(u,v),即:

矩阵(fu,fv,u0,v0)是相机参数,fu以及fv是XY轴方向尺度因子(水平方向和垂直方向的有效焦距),u0,v0是像平面(image plane)的中心点,又称主点坐标。R为旋转矩阵,t为平移矢量。

根据不同姿态下定标板平面,可得到一系列的线性方程,解得标定参数。

6.ros中的联合校准包

这个包用于Velodyne激光雷达和相机联合校准,适用于VLP-16及以上,依赖于aruco_ros包和轻微修改的aruco_mapping包

1)构建

clone代码从https://github.com/ankitdhall/lidar_camera_calibration.git,把该代码仓库, dependencies/aruco_ros and dependencies/aruco_mapping 目录放到 path/to/your/ros/workspace/src , 执行下面的命令:

catkin_make -DCATKIN_WHITELIST_PACKAGES="aruco_ros;aruco_mapping"
catkin_make -DCATKIN_WHITELIST_PACKAGES=""

如果,没有安装velodyne包需要先安装该包,make aruco_ros时首先要先安装aruco_msgs和aruco

2)开始

为了相机与激光雷达进行联合校准,两个配置文件需要进行修改,配置文件在lidar_camera_calibration/conf目录下。

config_file.txt

1280 720
-2.5 2.5
-4.0 4.0
0.0 2.5
0.05
2
0
611.651245 0.0 642.388357 0.0
0.0 688.443726 365.971718 0.0
0.0 0.0 1.0 0.0
1.57 -1.57 0.0

文件格式:

image_width image_height
x- x+
y- y+
z- z+ //去除点阵云中不想要 的点
cloud_intensity_threshold
number_of_markers
use_camera_info_topic? //是否使用camera_info topic
fx 0 cx 0
0 fy cy 0
0 0 1 0

MAX_ITERS

initial_rot_x initial_rot_y initial_rot_z

3)使用

通过如下命令进行启动:

roslaunch lidar_camera_calibration find_transform.launch

参考文献

【1】在无人驾驶中,激光雷达给摄像头填了哪些坑*https://www.leiphone.com/news/201611/qffizZw13gxoND6Z.html

【2】Calibration between Color Camera and 3D LIDAR Instrumentswith a Polygonal Planar Board

【3】激光雷达和摄像机联合标定识别作物

【4】ros联合校准包*https://github.com/ankitdhall/lidar_camera_calibration

多传感器的联合标定(三)相关推荐

  1. 超全汇总!多传感器离线/在线时空联合标定方法

    多源异构传感器融合在当今的自动驾驶应用场景中很常见,准确的多传感器时间和空间统一是实现多传感器融合感知和定位的先决条件.许多传感器融合方法假设不同传感器的时间戳精确对齐,这实际上只能通过严格的硬件同步 ...

  2. 激光雷达与视觉联合标定综述!(系统介绍/标定板选择/在线离线标定等)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨汽车人 来源丨自动驾驶之心 点击进入->3D视觉工坊学习交流群 后台回复[相机标定]获取超 ...

  3. 蔚来招聘|多传感器联合标定算法工程师

    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁.如果你需要我们帮助你发布实习或全职岗位,请添加微信号「CV_LAB」. 团队介绍 我们是谁? 蔚来是一家 ...

  4. 由粗到精学习LVI-SAM基础:多传感器内外参标定原理

    作者丨Alvin一路向东@知乎 来源丨https://zhuanlan.zhihu.com/p/462759422 编辑丨3D视觉工坊 一.最小二乘法 1.1 线性最小二乘 遇到线性问题通常采用最小二 ...

  5. 激光雷达和相机联合标定之开源代码和软件汇总(2004-2021)

    作者丨十点雨@知乎 来源丨https://zhuanlan.zhihu.com/p/404762012 编辑丨3D视觉工坊 LiDAR Camera Calibration (LCC)系列,主要介绍激 ...

  6. 开源代码和软件汇总!激光雷达和相机联合标定(2004-2021)

    作者 | 十点雨  编辑 | 我爱计算机视觉 原文链接:https://zhuanlan.zhihu.com/p/404762012 点击下方卡片,关注"自动驾驶之心"公众号 AD ...

  7. 视觉激光雷达信息融合与联合标定

    作者丨Coulson@知乎 来源丨https://zhuanlan.zhihu.com/p/55825255 编辑丨3D视觉工坊 一.引言 最近在为车辆添加障碍物检测模块,障碍物检测可以使用激光雷达进 ...

  8. 多传感器融合感知:传感器外参标定及在线标定算法详解

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[全栈算法]技术交流群 后台回复[相机标定]获取超详细的单目双目相机模型介绍.内外参标定 ...

  9. Matlab激光雷达相机联合标定经验分享

    一. 背景介绍 联合标定是做多传感器融合的基础工作,也是一个没有最好只有更好的研究方向,相关论文也是层出不穷,网上也有许多开源的工作,包括Autoware的工具箱我也试过,感觉标定效果不是特别好,标定 ...

最新文章

  1. PNAS | 理解单个神经元在深度神经网络中的作用
  2. 鸿蒙系统低端机推行,华为正在考虑少量推行搭载鸿蒙系统的中低端手机,有望年底推出!...
  3. android studio 顶部导航栏_5分钟学交互:手机交互组件归纳 导航篇
  4. Java-POI操作excel清除单元格分行字符
  5. python爬虫实际应用_如何使用python爬虫论坛?
  6. java yyyy-mm-dd 日期格式_Java中的日历日期为yyyy-MM-dd格式
  7. mysql 用户权限管理
  8. transform-origin用于设置变换原点
  9. 《剑指offer》面试题33、32——把数组排成最小的数、整数中1出现的次数
  10. python爬取斗鱼弹幕_【Python3爬虫】斗鱼弹幕爬虫
  11. 做SEO优化第三步:学习了解HTML基础知识
  12. Intel汇编指令在线手册
  13. excel制作特殊图表记录
  14. 从《【何同学】我拍了一张600万人的合影...》弹幕分析中,获取到了什么?
  15. IBM发表未来5年5项科技预测 3D全息手机或现世
  16. 听声变位测试软件,刺激战场:听声辩位其实有很大的学问,想了解的朋友请进来...
  17. 新媒体运营岗位有哪些
  18. 【Mathematica】 隐函数的绘制
  19. No.182# 技术管理之管理任务管理
  20. 论证:iOS安全性,为什么需要审核?

热门文章

  1. CSPJ2021考完了,你,AK了吗?
  2. 11.[STM32]PWM脉宽调制-呼吸灯
  3. Payment:接入支付宝当面付(扫码支付与条码支付)教程
  4. python项目作业_期末作业.py · 光辉/python练手小项目 - Gitee.com
  5. mysql设置不用科学记数法,关闭科学记数法MySQL
  6. 设计LDO电路需考虑因素
  7. php防止恶意注册,WordPress防恶意注册-添加验证码功能 | 逗哥-架构师之路
  8. 算法分析与设计(一)——0-1背包问题
  9. 离散数学对学计算机有什么用?
  10. 如何用控制面板打开计算机配置,如何查看电脑的配置?学会下面几种方法,你就可以自己看电脑配置...