1.4 Autoware自动驾驶平台框架
Autoware是世界上第一个用于自动驾驶汽车的“All-in-One”开源软件。Autoware的开源算法最初是由名古屋大学的客座副教授、东京大学的副教授加藤真平在2015年首次提出的。Autoware自动驾驶平台基于ROS操作系统,并在Apache2.0许可下使用。目前,Autoware自动驾驶平台已经更新到1.14版本,其集成了丰富的自动驾驶模块,分别为传感器、算法和驱动三个部分,如图1-9所示。其中,传感器部分的主要功能是读取相机、雷达、GPS/GNSS和IMU等外界传感器的感知数据;算法部分包括感知、决策和路径规划三个功能;驱动部分将会直接控制车辆的运行。
1.传感器部分
Autoware自动驾驶平台将相机、雷达、GPS/GNSS和IMU作为主要传感器,如图1-10所示。
图1-9 Autoware自动驾驶平台的结构框架
图1-10 传感器配置部分
当支持多个相机时,在配置过程中需要将这些相机在Autoware自动驾驶平台中单独配置。在Autoware自动驾驶平台中,每个相机分开管理,以便执行不同的任务,如物体检测和交通信号灯识别等。此外,Autoware自动驾驶平台不支持将不同相机图像合成一个图像;在Autoware自动驾驶平台中,可以组合使用多台雷达扫描仪,以此来提供丰富的融合点云数据,实现更精准的目标检测、跟踪和定位;GPS/GNSS接收器通常会通过串行接口生成符合NMEA标准的文本字符串,Autoware自动驾驶平台完全支持这些字符串。目前,几乎所有的GPS/GNSS产品都将与Autoware自动驾驶平台现有的nmea2tfpose节点兼容。Autoware自动驾驶平台中还没有独立的IMU模块适配,因为在不使用IMU的情况下,通过基于SLAM算法的3D地图和里程计定位已经足够可靠。但是,由于IMU在某些场景中仍然有用,因此Autoware自动驾驶平台支持将IMU驱动程序和数据集成到本地模块中。
2.算法部分
Autoware自动驾驶平台中的算法部分包括大量的算法,是Autoware自动驾驶平台的核心。算法部分包括感知、决策和路径规划三大功能,如图1-11所示。
图1-11 算法部分的三大功能
1)感知功能
算法部分中的感知功能由定位、检测和预测三个模块组成。其中,定位是通过3D地图和SLAM算法结合GPS/GNSS与IMU传感器实现的;检测是通过使用带有传感器融合算法和深度神经网络的相机与雷达实现的;预测则是基于定位和检测的结果。
(1)定位模块中相关功能包的介绍。
①lidar_localizer:使用来自雷达的扫描数据和预安装的3D地图信息计算自我车辆在全局坐标中的位置(x,y,z,roll,pitch,yaw)。Autoware自动驾驶平台推荐雷达扫描与3D地图匹配的NDT算法,同时也支持ICP算法。
②gnss_localizer:将来自GPS/GNSS接收器的NMEA消息转换为位置信息(x,y,z,roll,pitch,yaw)。这个结果既可以单独作为车辆的位置,又可以用作初始化和补充lidar_localizer的结果。
③dead_reckoner:主要使用IMU传感器预测车辆下一步的位置,并插入lidar_localizer和gnss_localizer计算后的结果。
(2)检测模块中相关功能包的介绍。
①lidar_detector:从雷达扫描仪读取点云数据,并且提供基于雷达的物体检测功能。基本原理来自欧几里得聚类算法,该算法在地面上找到雷达扫描(点云)的聚类。为了对聚类进行分类,还可以使用基于深度神经网络的算法,如VoxelNet和LMNet算法。
②vision_detector:从相机读取图像数据,并提供基于图像的检测功能。其中,主要算法包括R-CNN、SSD和Yolo算法。这些算法支持多类别检测,如汽车和乘客。
③vision_tracker:为vision_detector的结果提供了跟踪功能。在图像平面上跟踪的结果通过fusion_tools在3D空间中投影并与lidar_detector的结果结合。
④fusion_detector:读取来自雷达扫描仪的点云数据和来自相机的图像数据,并在3D空间中实现更准确的对象检测。雷达扫描仪和相机的位置必须提前校准。当前的实现基于MV3D算法,与原始算法相比,该算法对网络进行了较小的扩展。
⑤fusion_tools:结合来自lidar_detector和vision_tracker的结果,由vision_detector识别的类信息被添加到由lidar_detector检测到的点云簇中。
⑥object_tracker:预测由上述包检测和识别的对象的运动。跟踪的结果可以进一步用于物体行为的预测和物体速度的估计。跟踪算法基于卡尔曼滤波算法,另一种变体也支持粒子滤波算法。
(3)预测模块中相关功能包的介绍。
①object_predictor:使用上述object_tracker的结果来预测移动对象(如汽车和乘客)的未来轨迹。
②collision_predictor:使用object_predictor预测的结果来预测车辆是否涉及与移动物体的可能碰撞。除了目标跟踪的结果,还需要将自我车辆的航路点轨迹和速度信息作为输入数据。
③cutin_predictor:使用object_predictor预测的结果来预测相邻的汽车是否将来会切入车辆前方道路中。
2)决策功能
算法部分中的决策功能跨越了感知和路径规划功能。根据感知的结果,Autoware自动驾驶平台决定当前的驾驶行为,从而可以选择合适的规划函数。decision_maker通过订阅大量与感知结果、地图信息和当前状态相关的主题,以便发布下一时刻的状态主题;state_machine在预定义的规则内更改状态,以便与decision_maker协调。
3)路径规划功能
算法部分中的路径规划功能的作用是根据感知和决策的结果制定全局运动方案与局部运动方案。全局运动方案通常在自我车辆启动或重新启动时确定,而局部运动方案则根据车辆状态的变化进行更新。例如,如果将车辆的状态设置为“停止”,则车辆的速度计划在具有安全裕量的物体前面或停止线处变为零。另一个例子是,如果将车辆的状态设置为“避障”,则车辆的轨迹计划绕过障碍物。路径规划功能由任务和运动两个模块组成。
(1)任务模块中相关功能包的介绍。
①route_planner:搜索到目的地的全局路线,确定与route_planner发布的路线一致的车道。
②waypoint_planner:用于生成到目的地的一组航路点。这个包与lane_planner的不同之处在于它发布了一个航路点,而不是一个航路点数组。
③waypoint_maker:用于保存和加载手工制作的航路点。可以将航路点保存到指定文件,并且Autoware自动驾驶平台会使用速度信息记录行驶路径的航路点。记录的航路点可以稍后从指定的文件加载,以使路径规划订阅它们以遵循该路径。
(2)运动模块中相关功能包的介绍。
①velocity_planner:更新从lane_planner、waypoints_planner或waypoints_maker订阅的航路点上的速度信息。注意,嵌入在给定航路点中的速度信息是静态的,而该包会根据驾驶场景更新速度计划。
②astar_planner:采用Hybrid-State A*搜索算法,生成从当前位置到指定位置的可行轨迹。
③adas_lattice_planner:采用State Lattice规划算法,主要用于车辆的避障和变道。
④waypoint_follower:采用Pure Pursuit算法,生成一组线速度和角速度,以通过均匀的圆周运动将车辆移动到给定航路点上的目标航路点。此包应与velocity_planner、astar_planner和/或adas_lattice_planner结合使用。公布的线速度和角速度(或仅角度)组将由车辆控制器或线控接口读取,最后自动控制车辆。
3.驱动部分
最后是Autoware自动驾驶平台驱动部分的介绍,算法部分的输出结果是一组速度、角速度、车轮角度和曲率,这些信息将作为命令通过车辆接口发送到线控控制器。线控控制器负责方向角度和油门的改变。