nicholas 发表于 2016-12-7 13:14:39

无人驾驶车辆环境感知系统该如何构建?


无人驾驶车辆环境感知系统该如何构建?
2016-11-09
  无人驾驶系统是由多种技术集成,包括了驾驶环境感知、路径规划和车辆控制等组件,每类组件由算法集合组成,一般基于各类分布式程序框架来构建,通过车载总线技术实现各组件之间信息交互通信。机器人操作系统(ROS)是一个强大而灵活的机器人编程框架,是一种基于消息传递通信的分布式多进程框架,有很多知名的机器人开源函数库,例如基于Quaternion的坐标转换、3D点云处理、定位算法、各类SLAM等。开发者可以根据应用功能把软件分为多个模块或节点(Node),各模块只是负责读取和分发消息,模块间通过消息关联。如图1所示,左边节点可能从硬件驱动读取数据,以消息方式打包发送。ROS底层识别该消息的订阅者,将消息数据分发给订阅节点。ROS节点通常是标准C++程序,可以使用系统中安装的其他软件库,同时,ROS节点可以隐式启动多个线程。多个节点同时访问一个主题(Topic)时,也由FIFO队列来管理,从而解决实时同步问题。  图1 ROS系统功能框架  无人驾驶系统中首先包含了多个传感器,例如长距和短距毫米波雷达、激光雷达、单目和双目摄像头、超声波、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 advertise或者subscribe发布感兴趣的Topic。当创建连接时,下游节点会向上游节点TCP Server发布连接请求,等链接创建后,上游节点的消息就会通过链接送至下游节点。  图2 ROS Master Node通信  除了常见的Master、Node、Service和传递的消息(Message)等主要组件之外,ROS系统还提供了以下常用的组件:  ①RViz集成可视化工具,图3显示了无人驾驶感知任务可视化示例,RViz 查看器是用于检查任务的状态。  ②为管理点云数据开发了一种点云库,支持许多算法包,用于定位与地图创建。  ③OpenCV是图像处理的一个流行的计算机视觉库,支持多种图像处理算法实现库函数及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所示。  图5 无人驾驶车辆算法基本控制和数据流  如图6所示,常见几类传感器通过各自驱动的节点来提供感知信息,包括image_raw相机图像信息、激光雷达形成的scan信息、Velodyne激光雷达提供的点云信息以及GPS系统提供的定位信息等。通过订阅该信息的各自处理节点,形成了扫描图像、点云图像等进一步信息列表。  图6 ROS下各传感器驱动和环境感知信息融合框架  2 基于ROS系统下的环境感知具体实践  无人驾驶车辆环境感知内容主要包括结构化道路和非结构化道路检测,行驶环境中行人和车辆的检测、交通信号灯和交通标志的检测等。  2.1 环境感知中的目标检测  道路检测是智能车辆环境感知的重要内容,通过检测车道信息准确获得车辆相对于车道的位置和方向。乡村公路等非结构化道路在结构上符合道路的特征,但一般缺少车道线等标志,无法采用结构化道路所用的车道线检测方法。  完成无人驾驶车辆定位之后,需要进行行驶环境中的行人、车辆和交通信号等目标的检测与跟踪,避免出现事故和违反交通规则。  ①基于视觉的行人检测主要有基于背景建模的方法和基于统计学习的方法等,通过融合激光雷达与视频图像数据,可以对行人进行较为准确的检测。  ②对行驶环境中的车辆检测可用基于单目视觉的车辆检测方法,分为基于外观的方法和基于运动的方法,结合激光雷达的数据特点选取合适的聚类方法,集合其数据特征可实现Kalman预估跟踪。  ③需要综合色彩分割、形状检测和验证、图形识别等算法和特征识别方法才能适应环境的变化,对不同样式交通信号灯和交通标志进行检测与识别。  如图7所示,使用DPM(Deformable Part Model)等算法,搜索和统计图像上检测目标的方向梯度直方图特征,完成车辆和行人检测。除此之外,也可以使用3D激光雷达的点云数据通过欧拉聚类等算法来进行目标检测。通过点云数据聚类可以获得目标距离信息,结合图像处理分类后的结果,进行传感器信息融合,完成目标测距与跟踪。  图7 基于ROS系统下的环境感知具体实践  如图7所示,在无人驾驶车辆一般行驶在道路上的假设下,可以通过3D矢量地图和当前位置等信息来提高目标的检测效果,例如可以获得感兴趣的检测区域,完成车道和交通信号检测。  将校准后3D 激光雷达获得的三维点云数据投影到相机获得的图像上,通过向图像增加深度信息并筛选出感兴趣的目标检测区域。图像上目标检测结果也可以使用相同的外部参数重投影到三维点云坐标上,获得的目标位置可用于运动规划和部分的任务规划。如图7所示,将激光传感器获得的3D地图投影到当前位置上获得的图像之上,进行图像信息融合,从而可从图像上获得确切道路区域,进而获得该道路约束的感兴趣区域,用于提高图像处理效率,节省执行时间并减少误报。  2.2 环境感知中的目标跟踪  在每帧图像和点云数据上进行目标检测,结合基于时间关联其他帧的检测结果,可以预测运动目标的轨迹,以便进行任务规划和运动规划。通过卡尔曼滤波器等线性条件下,假设无人驾驶车辆以恒定速度行驶,同时进行移动目标跟踪,其计算成本相对较小,适用于无人驾驶的实时处理。此外,粒子滤波器可用于非线性跟踪场景,其中无人驾驶车辆和所跟踪的车辆均处于行驶状态。如图7所示,在给定的交通场景中可使用卡尔曼滤波和粒子滤波,进行(图像)2D平面和三维(点云)空间的目标跟踪。  3 无人驾驶车辆中ROS性能分析及其改进  3.1 无人驾驶车辆中ROS性能要求分析  假设无人驾驶车辆在城区道路一般以40公里/小时速度行驶,要求l米的功能有效距离,则每个实时任务的执行时间必须少于100毫秒。重要的实时任务包括目标检测、运动规划、定位等。在目标检测模块中,相机和激光雷达等传感器通常运行在10~100 Hz,才能满足一定速度下的自主驾驶的感知任务实时约束。所用的目标检测算法(例如DPM算法)需要花费几百毫秒甚至几千毫秒在OpenCV默认参数设置的图像大小中的处理。  在运动规划中,所用地图搜索(例如状态网格算法等)则可以运行在几十毫秒的量级。在任务规划中,如果采用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]
查看完整版本: 无人驾驶车辆环境感知系统该如何构建?