Autoware 简介

autoware 体系结构

autoware 主要包括以下功能:

  • 定位(Localization ):通过结合GNSS和IMU传感器的3D地图和SLAM算法来实现定位。
  • 检测(Detection ):使用具有传感器融合算法和深度神经网络的摄像机以及LiDAR。
  • 预测和规划(Prediction and Planning ):基于概率机器人技术和基于规则的系统,部分还使用深度神经网络。
  • 驱动控制(Actuaction Control):Autoware向车辆输出的是速度和角速度的扭曲量。尽管控制量的主要部分通常位于车辆的线控控制器中,但这些是Control的一部分

感知

Autoware的感知能力由本地化,检测和预测组成。通过3D地图和SLAM算法结合GNSS和IMU传感器实现定位。检测使用具有传感器融合算法和深度神经网络的相机和LiDAR。预测基于本地化和检测的结果。以下是Autoware提供的突出显示的软件包和功能。

1 定位

1.lidar_localizer使用来自LiDAR的扫描数据和预先安装的3D地图信息,计算自我车辆在全局坐标中的(x,y,z,滚动,俯仰,偏航)位置。我们建议使用正态分布变换(NDT)算法进行LiDAR扫描与3D地图的匹配,同时还支持迭代衣柜点(ICP)算法。
2.gnss_localizer将NMEA消息从GNSS接收器转换为(x,y,z,roll,pitch,yaw)位置。该结果可以单独用作自我载体的位置,同时它也可以用于初始化和补充lidar_localizer的结果。

3.dead_reckoner主要使用IMU传感器来预测自我车辆的下一帧位置,并插入lidar_localizer和gnss_localizer的结果。

2 感知

1.lidar_detector从3D激光扫描仪读取点云数据,并提供基于LiDAR的物体检测功能。基本性能来自欧几里德聚类算法,该算法在地面上找到LiDAR扫描(点云)的聚类。为了对集群进行分类,还支持基于DNN的算法,例如VoxelNet和LMNet。
2.vision_detector从摄像机读取图像数据,并提供基于图像的对象检测功能。主要算法包括R-CNN,SSD和Yolo,它们旨在执行单个DNN以实现实时性能。支持多种检测,例如汽车和乘客。
3.vision_tracker提供的结果的跟踪功能vision_detector。该算法基于Beyond Pixels。通过fusion_tools投影在图像平面上的跟踪结果并将其与2D空间中的lidar_detector的结果相结合。
4.fusion_detector读取来自激光扫描仪的点云数据和来自摄像机的图像数据,并在3D空间中实现更精确的物体检测。必须事先校准激光扫描仪和相机的位置。当前实现基于MV3D算法,与原始算法相比具有较小的网络扩展。
5.fusion_tools结合了lidar_detector和vision_tracker的结果。由vision_detector标识的类信息被添加到lidar_detector检测到的点云集群中。
6.object_tracker预测由上述包检测和识别的对象的运动。跟踪的结果可以进一步用于预测对象行为和估计对象速度。跟踪算法基于卡尔曼滤波器。另一种变体也支持粒子滤波器。

3 预测

1.object_predictor使用上述对象跟踪的结果来预测移动物体(例如汽车和乘客)的未来轨迹。
2.collision_predictor使用object_predictor的结果来预测自我车辆是否涉及与移动物体的可能碰撞。除了目标跟踪的结果之外,还需要航点轨迹和自我车辆的速度信息作为输入数据。
3.cutin_predictor使用与collision_predictor相同的信息来预测邻居汽车是否在自我车辆的前方切割。

 

决策

Autoware的决策模块跨越感知和规划模块。根据感知结果,Autoware决定由有限状态机表示的驾驶行为,以便可以选择适当的计划功能。目前的决策方法是基于规则的系统。

1.decision_maker订阅与感知结果,地图信息和当前状态相关的大量主题,以便发布下一时刻的状态主题。此状态更改将激活适当的计划功能。
2.state_machine
更改预定义规则中的状态,用decision_maker进行编排。

规划

Autoware的最后一项计算是计划模块。该模块的作用是根据感知和决策模块的结果制定全球任务和局部(时间)运动的计划。通常在自我车辆启动或重新启动时确定全局任务,而根据状态变化更新本地运动。例如,如果Autoware的状态被设置为“停止”,则计划在具有安全裕度的物体前面或在停止线处将自我车辆的速度变为零。另一个例子是,如果Autoware的状态被设置为“避免”,则计划自我车辆的轨迹绕过障碍物。规划模块中包含的主要包包括以下内容。

任务

1.route_planner搜索到目的地的全局路由。路线由道路网络中的一组交叉点表示。
2.lane_planner确定要与route_planner发布的路由一起使用的通道。这些车道由一个航点阵列表示,即多个航路点,每个航路点对应一条车道,由该航天器公布。
3.waypoint_planner可以替代地用于生成到目的地的一组航路点。这个包与lane_planner的不同之处在于它发布了一个航路点,而不是一个航点数组。
4.waypoint_maker是一个实用工具,用于保存和加载手工制作的航点。要将航点保存到指定文件,您可以在激活本地化时手动驾驶车辆,并且Autoware会使用速度信息记录行驶路径的航点。记录的航点可以稍后从指定的文件加载,以使运动规划模块订阅它们以遵循该路径。

运动

1.velocity_planner更新从lane_planner, waypoints_planner或waypoints_maker * 订购的航路点上的速度计划,以便加速/升级周围的车辆和道路功能,如停车线和交通灯。注意,嵌入在给定航点中的速度信息是静态的,而该包根据驾驶场景更新速度计划。
2.astar_planner实现混合状态A *搜索算法,该算法生成从当前位置到指定位置的可行轨迹。该套件可用于避障和在给定航点上的急转弯以及在诸如停车场的自由空间中的路线。
3.adas_lattice_planner实现State Lattice规划算法,该算法基于样条曲线,预定义参数表和ADAS Map(又名矢量图)信息在当前位置之前生成多个可行轨迹。该包装主要用于避障和车道变换。
4.waypoint_follower实现Pure Pursuit算法,该算法生成一组扭曲的速度和角速度(或仅角度),以通过均匀的圆周运动将自我车辆移动到给定航路点上的目标航路点。此包应与velocity_planner,astar_planner和/或adas_lattice_planner结合使用。公布的扭曲速度和角速度(或仅角度)组将由车辆控制器或线控接口读取,最后自动控制自我车辆。

驱动控制输出

Autoware的计算输出是一组速度,角速度,车轮角度和曲率。这些信息作为命令通过车辆接口发送给线控控制器。控制转向和节流阀需要由线控控制器来处理。

作者:Young1217
链接:https://www.jianshu.com/p/1542450902e0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

如何使用autoware

建立一个点云图
Autoware提供了基于同时本地化和映射(SLAM)的3D映射模块。手动驾驶车辆时,它会构建局部坐标的点云图。您应注意循环闭合约束。如果您开车距原点太远,则除非使用Graph SLAM方法,否则生成的点云图可能与实际地理特征未对齐。也就是说,仅由Autoware构建的pointcloud映射不应是大规模的。

在Pointcloud地图中建立路线
一旦点云图准备就绪,您就可以自主创建一条路线。进行路线的最直接方法是您在路线上手动驾驶一次并记录一次车辆位置。车辆位置的这种轨迹可以保存为  路标。您要做的就是遵循这些路标。另一方面,一种更智能的方法是,使用  VectorMapper  将道路要素添加到点云地图,并遵循组成路线的车道中心线的路标;但是,这是一项耗时的任务。

遵循路线的航点
使用航路点建立路线后,您只需遵循这些航路点,并根据定位和检测结果控制速度/油门和角度/转向。为了超越范围,例如在公共道路上,您需要激活更多模块,例如对象跟踪器,交通信号灯识别器和决策者。您还假设,实际上,航点是由某些高精度导航服务生成的,该服务将在Autoware.AI上受支持  。航路点准备好后,您在此处尝试的练习将在任何测试领域中均有用。

LGSVL模拟器:与Autoware.Auto一起运行LGSVL模拟器, 模拟汽车

Autoware.Auto 3D感知堆栈由计算和发布对象边界框所需的一组节点组成。这样做的最小堆栈是:

  1. point_cloud_filter_transform_node:将的输出转换velodyne_node为通用帧。
  2. ray_ground_classifier_node:对点云点进行分类,以指示它们属于地面还是非地面。
  3. euclidean_cluster_node:将非地面点聚类到对象检测中。

还有一些可选节点(本教程未介绍)可用于增加堆栈:

  1. point_cloud_fusion:将来自多个源的点云融合到一条消息中。当前,这用于将前后激光雷达数据融合为单个消息流。本教程仅使用前激光雷达数据。
  2. voxel_grid_nodes:可用于通过体素网格表示对点云数据进行下采样。本教程不执行下采样。

为了帮助您熟悉感知堆栈的元素,以下小节介绍了如何在不使用启动文件的情况下逐节点启动堆栈节点。请依序按照指示进行。

发表评论

电子邮件地址不会被公开。 必填项已用*标注