厚势按:无人驾驶系统由环境感知等多个组件构成,一般基于各类分布式程序框架来实现。基于 ROS 系统这类消息传递通信的分布式多进程框架来构建环境感知系统,是一种可行的参考。
本文讨论了无人驾驶系统环境感知信息融合中的 ROS 机制和组成,基于 ROS 系统下的目标检测与跟踪等环境感知具体实践,讨论了无人驾驶车辆中 ROS 性能分析及其改进等内容,可以作为相关技术实现的有益参考。
本文来自 2016 年 11 月 1 日出版的《 单片机与嵌入式系统应用 》,作者是中国科学院自动化研究所的黄武陵副研究员。
引言
无人驾驶系统是由多种技术集成,包括了驾驶环境感知、路径规划和车辆控制等组件,每类组件由算法集合组成,一般基于各类分布式程序框架来构建,通过车载总线技术实现各组件之间信息交互通信。
机器人操作系统(ROS)是一个强大而灵活的机器人编程框架,是一种基于消息传递通信的分布式多进程框架,有很多知名的机器人开源函数库,例如基于 Quaternion 的坐标转换、3D 点云处理、定位算法、各类 SLAM 等。开发者可以根据应用功能把软件分为多个模块或节点(Node),各模块只是负责读取和分发消息,模块间通过消息关联。
图 1 ROS 系统功能框架
如图 1 所示,左边节点可能从硬件驱动读取数据,以消息方式打包发送。ROS 底层识别该消息的订阅者,将消息数据分发给订阅节点。ROS 节点通常是标准 C++ 程序,可以使用系统中安装的其他软件库,同时,ROS 节点可以隐式启动多个线程。多个节点同时访问一个主题(Topic)时,也由 FIFO 队列来管理,从而解决实时同步问题。
无人驾驶系统中首先包含了多个传感器,例如长距和短距毫米波雷达、激光雷达、单目和双目摄像头、超声波、GPS 定位、陀螺仪惯导等。每个传感器以不同频率进行采样和产生数据,系统对传感器数据处理有很强的实时要求,所以要求无人驾驶系统能够分布式异步实时处理这些数据。其次,无人驾驶系统在这些传感器数据融合基础上,进行驾驶环境要素感知和提取,进行导航和自主驾驶决策。这就要求系统具备强大计算能力,能够集成高性能算法,具备高度可扩展性。
机器人操作系统(ROS)满足上述这些要求。在 ROS 系统中,通过将系统抽象成节点和主题,其中节点用于表示单个组件模块,主题用于保存输入和输出节点之间的数据,形成强大的抽象模型组件扩展计算框架,可以方便进行无人驾驶系统的开发。
本文主要通过介绍构建无人驾驶系统中常用的几种 ROS 机制和组成,无人驾驶系统环境感知功能与 ROS 下的具体实践,无人驾驶系统中 ROS 组件及其性能要求等方面内容,讨论了基于 ROS 构建无人驾驶车辆环境感知系统。
1 感知信息融合中 ROS 机制和组成
1.1 常用的几种 ROS 机制
通过将无人驾驶系统环境感知功能以 ROS 常见的机制来实现融入到现有的 ROS 系统框架中。其中,ROS 主要组件包括 ROS Master、ROS Node 和 ROS Service。
ROS Master 的主要功能是命名服务,它存储了启动时需要的运行参数,消息发布上游节点和接收下游节点的连接名和连接方式,以及已有 ROS 服务的连接名,一般在无人驾驶系统中只有一个 Master。
ROS 节点通常是标准 C++ 程序,可以使用系统中其他软件库,还可以隐式启动多个线程,运行主要功能和服务。ROS Node 节点是真正的执行模块,对接收到的消息进行处理,并且发布新的消息给下游节点,环境感知中的基本组成功能可以通过 Node 来实现。
ROS Service 是一种特殊的 ROS 节点,它相当于一个服务节点,接收请求并返回请求的结果。
图 2 ROS Master Node 通信
图 2 展示了 ROS 通信流程,节点向 Master Advertise 或者 Subscribe 发布感兴趣的 Topic。当创建连接时,下游节点会向上游节点 TCP Server 发布连接请求,等连接创建后,上游节点的消息就会通过连接送至下游节点。
除了常见的 Master、Node、Service 和传递的消息(MeSSage)等主要组件之外,ROS 系统还提供了以下常用的组件:
RViz 集成可视化工具,图 3 显示了无人驾驶感知任务可视化示例,RViz 查看器是用于检查任务的状态。
为管理点云数据开发了一种点云库,支持许多算法包,用于定位与地图创建。
Open CV 是图像处理的一个流行的计算机视觉库,支持多种图像处理算法实现库函数及 API(如图像加载、转换和绘制),有助于构建图像处理程序框架,无人驾驶车辆环境感知可以通过 OpenCV 与 ROS 的 RViz 组合进行可视化显示。
CUDA 是一个 GPU 上的通用计算框架,因为环境感知中常用的复杂算法都是计算密集型和数据并行型,使用 CUDA,其执行速度可以显著提高。
图 3 RViz集成可视化工具用于显示三维地图和 2D 图像
1.2 构建环境感知信息融合常用的传感器
在选择车载传感器时,一般需要综合考虑多个方面的属性,结合这些属性参数和不同等级的无人驾驶功能实现需求,从多种传感器中综合考虑加以选取。无人驾驶车载传感器配置要求如图 4 所示。
图 4 无人驾驶车载传感器配置要求
常用的车载外部传感器各具特点,例如:
毫米波雷达可以准确检测前方车辆的距离和速度,具备较强的穿透雾、烟、灰尘的能力;
而相机视觉系统可以获得车道线、交通信号等目标的颜色和形状等细节,从而进行细化识别;
激光雷达通过点云来建立周边环境的 3D 模型,可以检测出包括车辆、行人、树木、路沿等细节。
通过激光雷达或毫米波雷达与视觉传感器进行融合,不仅可以进行目标物体检测,而且还能进行目标空间测距、目标图像识别等功能。类似,GPS 定位、视觉传感器和激光雷达进行融合,则可以实现车道保持所需的高精度定位,也能实现多类障碍物目标检测。
在构建典型的环境感知系统时,常用传感器包括相机和激光雷达等传感器,例如:
Velodyne 激光雷达获取三维点云数据,用于定位和地图构建,同时也用来测量车辆与周围物体的距离;
Ibeo 激光雷达传感器虽然垂直方向分辨率低于 Velodyne 激光雷达,但可以产生长距三维点云数据;
Hokuyo 北洋激光雷达传感器产生短距二维激光扫描数据,常用于紧急停车,而不用于定位与地图创建;
相机可以用于目标检测,Point Grey 相机有 360 度全方位视角覆盖,而 Grasshopper 相机是单一朝向,运行帧率较高,前者可以用于检测运动物体,后者可以用于识别交通信号灯;
Javad RTK 定位传感器接收卫星全球定位信息,经常采用陀螺仪传感器和里程计来修复定位信息。
1.3 无人驾驶系统环境感知总体功能
无人驾驶车辆的功能总体结构可以分为感知层、任务规划层、行为执行层和运动规划层等[5]。其中,环境感知层融合处理来自车载传感器的数据,为系统的其他部分提供周围环境的关键信息,例如局部信息包括车辆的位姿和速度等状态信息,道路形状、停车区域和交叉路口等道路信息,车辆周边其他车辆和行人等动态障碍物信息,局部静态障碍物地图,以二维栅格图展示现实环境中的无障碍区域、危险区域和不可通行区域、道路堵塞信息,对不能通过区域进行估计 [7]。
图 5 无人驾驶车辆算法基本控制和数据流
在交通场景识别、路径规划和车辆控制等每类组件中都包括算法集合,例如交通场景识别要求定位、目标检测和目标跟踪算法 [6]。路径规划通常包括任务和运动规划,车辆控制对应路径跟踪算法,其中算法基本控制和数据流如图 5 所示。
图 6 ROS 下各传感器驱动和环境感知信息融合框架
如图 6 所示,常见几类传感器通过各自驱动的节点来提供感知信息,包括 image_raw 相机图像信息、激光雷达形成的 Scan 信息、Velodyne 激光雷达提供的点云信息以及 GPS 系统提供的定位信息等。通过订阅该信息的各自处理节点,形成了扫描图像、点云图像等进一步信息列表。
2 基于ROS系统下的环境感知具体实践
无人驾驶车辆环境感知内容主要包括结构化道路和非结构化道路检测,行驶环境中行人和车辆的检测、交通信号灯和交通标志的检测等。
2.1 环境感知中的目标检测
道路检测是智能车辆环境感知的重要内容,通过检测车道信息准确获得车辆相对于车道的位置和方向。乡村公路等非结构化道路在结构上符合道路的特征,但一般缺少车道线等标志,无法采用结构化道路所用的车道线检测方法 [1]。
完成无人驾驶车辆定位之后,需要进行行驶环境中的行人、车辆和交通信号等目标的检测与跟踪,避免出现事故和违反交通规则 [2-3]:
基于视觉的行人检测主要有基于背景建模的方法和基于统计学习的方法等,通过融合激光雷达与视频图像数据,可以对行人进行较为准确的检测 [5]。
对行驶环境中的车辆检测可用基于单目视觉的车辆检测方法,分为基于外观的方法和基于运动的方法,结合激光雷达的数据特点选取合适的聚类方法,集合其数据特征可实现 Kalman 预估跟踪。
需要综合色彩分割、形状检测和验证、图形识别等算法和特征识别方法才能适应环境的变化,对不同样式交通信号灯和交通标志进行检测与识别 [8]。
如图 7 所示,使用 DPM(Deformable Part Model)等算法,搜索和统计图像上检测目标的方向梯度直方图特征,完成车辆和行人检测。除此之外,也可以使用 3D 激光雷达的点云数据通过欧拉聚类等算法来进行目标检测。通过点云数据聚类可以获得目标距离信息,结合图像处理分类后的结果,进行传感器信息融合,完成目标测距与跟踪 [4]。
如图 7 所示,在无人驾驶车辆一般行驶在道路上的假设下,可以通过 3D 矢量地图和当前位置等信息来提高目标的检测效果,例如可以获得感兴趣的检测区域,完成车道和交通信号检测。
将校准后 3D 激光雷达获得的三维点云数据投影到相机获得的图像上,通过向图像增加深度信息筛选出感兴趣的目标检测区域。图像上目标检测结果也可以使用相同的外部参数重投影到三维点云坐标上,获得的目标位置可用于运动规划和部分的任务规划。
如图 7 所示,将激光传感器获得的 3D 地图投影到当前位置上获得的图像之上,进行图像信息融合,从而可从图像上获得确切道路区域,进而获得该道路约束的感兴趣区域,用于提高图像处理效率,节省执行时间并减少误报。
2.2 环境感知中的目标跟踪
在每帧图像和点云数据上进行目标检测,结合基于时间关联其他帧的检测结果,可以预测运动目标的轨迹,以便进行任务规划和运动规划 [9-10]。
通过卡尔曼滤波器等线性条件下,假设无人驾驶车辆以恒定速度行驶,同时进行移动目标跟踪,其计算成本相对较小,适用于无人驾驶的实时处理。此外,粒子滤波器可用于非线性跟踪场景,其中无人驾驶车辆和所跟踪的车辆均处于行驶状态 [11]。
如图 7 所示,在给定的交通场景中可使用卡尔曼滤波和粒子滤波,进行(图像)2D 平面和三维(点云)空间的目标跟踪。
3 无人驾驶车辆中 ROS 性能分析及其改进
3.1 ROS 性能要求分析
假设无人驾驶车辆在城区道路一般以 40 公里/小时速度行驶,要求 1 米的功能有效距离,则每个实时任务的执行时间必须少于 100 毫秒。重要的实时任务包括目标检测、运动规划、定位等。在目标检测模块中,相机和激光雷达等传感器通常运行在 10~100 Hz,才能满足一定速度下的自主驾驶的感知任务实时约束。所用的目标检测算法(例如 DPM 算法)需要花费几百毫秒甚至几千毫秒在 Open CV 默认参数设置的图像大小中的处理。
在运动规划中,所用地图搜索(例如状态网格算法等)则可以运行在几十毫秒的量级。在任务规划中,如果采用 A* 算法进行路径搜索,需要消耗较多时间,一般在几秒级别,如果搜索面积更大,则需更长时间。不过 A* 搜索经常用于任务规划,仅在需要更换行驶路径时才需要启动。
除了任务规划,定位和检测之外的实时任务执行时间可以忽略不计,但某些实时任务对延迟非常敏感,例如控制转向、加速和制动的车辆控制任务延迟应该严格控制在几个毫秒之下。
综上所述,无人驾驶车辆对 ROS 系统的各个部分提出了较高的性能要求,满足这些要求,才能实现在真实环境中一定速度下的自主驾驶。
3.2 ROS性能改进
采用 ROS 构建无人驾驶系统需要在多个方面进行性能改进,以满足多任务环境下的自主驾驶。其中,采用 GPU 等高性能计算平台,以及特定应用集成电路(ASIC)和现场可编程逻辑阵列(FPGA)等解决方案,结合高性能图像处理等计算方法等硬件和软件协同设计,是实现自主驾驶的重要保证。在本文中重点讨论了 ROS 系统可行的性能改进。
3.2.1 提高 ROS 系统可靠性
采用 ROS 构建无人驾驶系统,其可靠性是首先要考虑的特性。由于 ROS 框架下主节点维护了系统运行所需的连接、参数和主题信息,如果 ROS Master 宕机了,整个系统就无法正常运行,需要确保 ROS Master 不能出错退出,导致系统崩溃。
同样,还要保证 ROS 节点不能出错退出,导致系统部分功能缺失,从而造成无人驾驶事故。
(1)ROS 系统去中心化
ROS 系统去中心化的解决方案有多种,可以采用主从节点的方式,同时主节点的写入信息随时备份。主节点宕机后,备份节点被切换为主节点,并且用备份的主节点完成信息初始化。
(2)ROS 节点实时监控和报警
对于运行的 ROS 节点实时监控其运行数据,并检测到严重的错误信息时报警。通过 ROS 节点层的监控数据 API 记录所需的信息;监控服务端定期从节点获取监控数据;监控服务端对数据进行整合、分析、记录,在异常后进行处理。
(3)ROS 节点状态恢复
节点异常退出之后,需要通过重启机制进行恢复,可以是无状态恢复和有状态恢复,因此需要对节点状态进行备份。
3.2.2 ROS系统通信性能提升
从上文可以看出,无人驾驶系统模块较多且信息交互频繁。在同一个机器上的 ROS 节点间的通信,可以考虑改进现有的网络协议栈的 loop-back 机制,减小延迟和资源消耗。ROS 节点发布数据信息时,是多个点对点的发送,较为耗费内存资源以及网络的带宽。通过研究 ROS 的通信栈,发现协议栈的通信延时很大的损耗是在数据的序列化与反序列化的过程,可以考虑加以优化。
ROS 2.0 中做了一些改进,主要是为了让 ROS 能够符合工业级的运行标准,采用了DDS(数据分发服务)这个工业级别的中间件来负责可靠通信,通信节点动态发现,并用 Shared Memory 方式使得通信效率更高。
通过使用 DDS,所有节点的通信拓扑结构都依赖于动态 P2P 的自发现模式,可以去掉 ROS Master 中心节点。但是,ROS 2.0 还处于发展阶段,需要进一步完善。
结语
基于 ROS 系统分布式框架来实现环境感知系统,在利用现有丰富的 ROS 组件基础上充分集成了 ROS 系统提供的各种功能,是现阶段构建无人驾驶系统的一种可行参考。
本文在参考和总结现有的无人驾驶实现基础上,讨论了无人驾驶系统环境感知信息融合中 ROS 机制和组成,基于 ROS 系统下的目标检测与跟踪等环境感知具体实践,讨论了无人驾驶车辆中 ROS 性能分析及其改进等内容,本文可以作为相关技术实现的有益参考。
参考文献
[1] 辛煜. 无人驾驶车辆运动障碍物检测、预测和避撞方法研究 [D]. 合肥:中国科学技术大学,2014
[2] 刘钊. 无人车 2D 激光雷达结构化环境感知技术研究 [D]. 长沙:国防科学技术大学,2013
[3] 海智渊. 激光 3D 导航系统设计与研究 [D]. 长春:长春理工大学,2014
[4]Nordin P, Andersson L, NygardsJ, Sensor data fusion for trrain exploration by collaborating unmanned ground vehicles[C]//Information Fusion,2008 11th International Conferenceon, 2008
[5] 陈慧岩. 智能车辆先进技术丛书:无人驾驶汽车概论 [M]. 北京:北京理工大学出版社,2014
[6] S Kato, E Takekuchi, Y Ishiguro, etal. An Open Approach to Autonomous Vehicles[J]. IEEE Micro, 2015, 35(6): 60-69
[7] C Urmson, J Anhalt, D Bagnell. Autonomous driving in urban Environments:Boss and the urban challenge[J]. FieldRobot,2008, 25(1): 425-466
[8] Meng-Yin Fu, Yuan-Shui Huang, A survey of traffic sign recognition[C] //Wavelet Analysis and Pattern Recognition (IC-WAPR), 2010 International Conferenceon, 2010
[9] 沈峘. 智能车辆视觉环境感知技术的研究 [D]. 南京:南京航空航天大学,2010
[10] 陈龙. 城市环境下无人驾驶智能车感知系统若干关键技术研究 [D]. 武汉:武汉大学,2013
[11] 胡铟,杨静宇. 基于模型的车辆检测与跟踪 [J]. 中国图象图形学报,2008, 13(3): 450-45
编辑整理:厚势分析师拉里佩
转载请注明来自厚势和厚势公号:iHoushi
-END-
文章精选
企业家
智能驾驶
新能源汽车
项目和评论
这些大神从Google出走,创办了五家(命运各异的)无人车公司
厚
势
汽
车
为您对接资本和产业
新能源汽车 自动驾驶 车联网
联系邮箱
bp@ihoushi.com
点击阅读原文,查看文章「地面交通控制的百年回顾和未来50年展望」