开源无人驾驶项目autoware解读
文章目录
较有用
具有重要价值
-
3.Autoware的核心运算部分
-
感知功能模块
- 目标检测与跟踪模块:
- Detection检测节点:
- Lidar探测器(1)
- 图像探测器(2)
- 图像追踪器(3)
- 数据融合探测器(4)
- 工具融合包(5)
- 物体追踪器(6)
- Detection检测节点:
- 目标检测与跟踪模块:
-
(2)目标预测节点
- 该节点用于进行目标的定位与识别
-
- (1)运动预测器
- 用于对物体的运动轨迹进行实时追踪与分析
-
(2)碰撞检测器
矢量化
矢量化
地图矢量化
矢量化
地图矢量化
- (4)定位模块
- 定位节点:定位模块节点:
-
- LIDAR定位算法:
- (1)基于LIDAR的定位算法
- (2)基于GPS的定位系统
- (3)惯性导航系统的实现
(2)决策规划模块
(1)任务规划Mission planning:任务节点管理
(1)路径划分系统
车道划分系统
目标点生成模块
- (2)运动规划 Motion Planning
- :运动规划节点
-
-
(1)velocity_planner
-
(2)astar_planner
-
(3)adas_lattice_planner
-
(4)waypoint_follower
-
(5)open_planner
-
……
- (3)行为规划Behavioral Planning
-
Path following路径跟踪
路径跟踪模块 Path following
* 5.Autoware运动仿真Wf_simulation
按照功能分类
按照功能分类
- 第三章:autoware实战指南
-
第一部分: official git入门指南:学习autoware核心库结构
- 第二部分:用户手册:从新手角度解读使用流程(以官方标准为指导)
- 第三部分:构建无人驾驶框架的实践路径:基于field test阶段的具体实施
-
总结
-
- 部署经验总结
-
参考资料
-
前言

无人驾驶领域相关的教程和博客欢迎访问专栏:<>
无人车&无人机导航合集
<>
认知局限,请各位多多包涵。如有问题,请希望能与大家一起交流。
一般是二次优化
鉴于此,在实际产品开发过程中我综合考虑了原理与功能的基础上进行了初步分类。只有深入理解各算法的功能定位并实现有机融合才能避免机械照搬单一算法所带来的不足。例如,在本研究中通过hybrid A 探索出的有效路径与A 、RRT*方法相比更为平滑因此后续轨迹优化环节无需过多关注;而对于机器人/无人驾驶相关需求业务目前还无法覆盖所有功能阶段因此基于状态机(fsm)的任务决策方案完全能够满足现有任务需求
本文首先介绍了开源无人驾驶项目autoware解读的具体内容,并简要概述了其核心功能与实现原理。关于详细的技术解析与应用案例分析,则将在后续的文章中逐一阐述。如果您对该项目的其他相关模块感兴趣,则可以通过访问我的官方文档或关注我的最新更新来获取更多信息。
提示:以下是本篇文章正文内容
一、Autoware的整体框架和模块
1.Autoware介绍
防盗标记–盒子君hzj
防盗标记–盒子君hzj
Autoware支持以下功能:
(1)传感器校准
(2)传感器融合
(3)各种数据记录
(4)3D本地化
(5)3D映射
(6)面向云的地图连接自动化
(7)汽车/行人/物体检测
(8)交通信号检测
(9)车道检测
(10)对象跟踪
(11)路径规划
(12)智能手机导航
(13)加速/制动/转向的路径跟踪控制
(14)仿真软件
(15)虚拟现实技术
该系统整合了多种算法协同工作 ,它不具备一键启动功能。需要根据实际需求配置相应的启动项之后再进行启动操作。
2.从多个角度对autoware进行剖析
每个模块采用它自己的一套算法
(1)从Autoware的系统层进行剖析

(2)从系统组件框图进行剖析

SLAM建图部分–静态地图及矢量化,其他地图图层生成
SLAM建图部分–静态地图和矢量化处理,其他地图的生成流程
(3)从算法的基本控制和数据流进行剖析

(4)从Autoware的节点图进行剖析【较有用】

(5)从其他图例进行剖析

.
.
3.Autoware运算部分(核心)
(1)感知部分
(1)目标检测、跟踪模块
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(2)关键技术
1)视觉全景图像融合技术
将独立的图像拼接成无缝360度的环视图
2)视觉目标检测识别技术
从图像数据中精确提取文本信息,并能有效解析交通标志符号和实时追踪运动物体及其特征。
3)点云数据配准技术
点云畸变的纠偏
4)基于点云的数据处理技术
通过分析激光雷达获取的点云数据来识别和检测行人及车辆等障碍物
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(4)目标跟踪算法
我们采用了两种算法来解决该跟踪问题:
卡尔曼滤波在处理线性系统的场景中被采用,并基于已知模型假设,在用于自动驾驶汽车在匀速行驶的情况下的计算中具有重量轻且适合实时处理的特点。
粒子过滤器可用于非线性跟踪场景我们的自动驾驶汽车和履带车辆正在移动中
我们采用卡尔曼滤波器与粒子滤波器进行处理,在不同的场景下表现不同。此外,在二维(图像)平面以及三维(点云)平面进行应用。
Detection检测节点
(1)lidar_detector
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(2)image_detector
从摄像头获取图像数据,并执行基于图像的目标识别过程。该系统的核心算法体系主要包括R-CNN、SSD以及YOLO系列模型,并能够实现对汽车、行人等多类目标的实时识别。
(3)image_tracker
基于image_detector进行检测后完成目标追踪功能。该算法采用了 Beyond Pixels 的核心技术,在图像二维平面上的目标追踪数据被映射至三维空间中,并融合 lidar_detector 的三维定位信息以生成最终的目标追踪数据
(4)fusion_detector
接收来自激光雷达的单帧扫描点云数据以及摄像头捕捉到的画面信息后,在三维空间中实现更加精确的目标识别过程。为了确保系统的几何准确性,在获取激光雷达与摄像头位置关系之前必须完成两者坐标系的一体化标定工作;目前主要采用基于MV3D算法的技术框架来进行这一关键环节的具体实现。
(5)fusion_tools
对lidar_detector和image_detector的检测结果进行整合处理,在lidar_detector的聚类过程中加入其识别出的分类信息。
(6)object_tracter
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(2)目标预测模块
自动驾驶汽车的安全是一个核心问题。为此,在感知模块中必须精确地确定自身飞行器在三维空间中的准确位置映射,并将周围场景中的对象对应于交通信号灯的状态。随后,在预测模块中依赖于定位与检测的数据结果来预测跟踪目标。借助卡尔曼滤波算法与三维高精度地图的技术手段,在结合概率机器人技术与基于规则的系统框架下部分采用了深度神经网络技术
目标预测模块节点
(1)moving_predictor
使用目标跟踪的数据来预判临近物体的运动轨迹(例如汽车或行人)
(2)collision_predictor
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(3)传感器采集模块、地图构建SLAM模块、地图服务server模块【矢量化】
(1)传感器采集模块
传感器和计算机的规格在很大程度上取决于功能自动驾驶要求
(1)摄像头(Camera)信息_ 无死角地覆盖360度视野,并能够识别并判断红绿灯信号_ 该系统能够持续监控并精确识别各类移动物体
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(3)惯导系统(IMU)信息
(4)定位系统(GNSS)信息
传感器采集方案
在本方案中,通过专业设备对环境进行监测和建模的数据采集过程主要由一辆专业数据采集车独立完成整个流程。
(1)低成本移动激光测量进行数据采集的方案

通过固定在小车等移动载体上的设备进行采集得到激光雷达高精度点云数据、图像信息以及GPS/IMU航迹里程计数据
(2)一体化高精度地图SLAM的解决方案

(2)地图构建SLAM模块
防盗标记–盒子君hzj
防盗标记–盒子君hzj
高精度地图采用什么类型的文件格式?
https://github.com/ApolloAuto/apollo/blob/master/modules/map/data/README.md
见README文档中列出了xml、bin、txt和lb1四种不同的文件格式。每种格式对应特定的读取器使用场景,并且它们的内容保持一致。
(3)地图服务server模块【地图矢量化】
(1)矢量地图图例

防盗标记–盒子君hzj
(3)矢量地图的应用场景,在无人驾驶环境下涉及车道线路径规划、巡航以及道路级的任务规划(包括换道、返航和其他相关操作)。
规划算法按重要性排序的矢量地图组件及在自动驾驶系统中的用途

防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
具体步骤包括:
(1)通过专业的点云制图软件生成高精度地图数据
(2)采用手工操作的方式构建矢量地图工具
工具一:基于Vector Map Builder平台的操作
工具二:借助ZTLiDAR技术的应用
(5)Autoware ADAS Map矢量地图的元素介绍
防盗标记–盒子君hzj
防盗标记--盒子君hzj
2、元素分类
该元素定义在src/autoware/core_planning/lane_planger/include/lane_planger/lane_planner_vmap.hpp中。该元素负责存储决策规划所需的部分矢量地图要素数据。
struct VectorMap
{
std::vector<vector_map::Point> points;
std::vector<vector_map::Lane> lanes;
std::vector<vector_map::Node> nodes;
std::vector<vector_map::StopLine> stoplines;
std::vector<vector_map::DTLane> dtlanes;
};
代码解释
位于src/autoware/messages/vector_map_msgs/msg/Point.msg
1. 点元素(point.csv, node.csv, dtlane.csv)
(1.1)点元素(point.csv)格式说明
在point.csv中包含了地图上所有点元素的几何位置信息,并具体包括以下内容:路径节点Node、路径特征补充节点DTLane以及线状或面状端点。
格式说明如下:

point点的属性如下:
1、通常point点相隔1米分布

2、point点为属性变更点或者多条lane规划线的链接节点

(2)点元素(node.csv)格式说明
Node为生成车道图提供了基础元素,构成车道线等关键要素的基础单元.当在制图过程中新增Node时,相关的位置数据和几何信息会被记录到point.csv文件中. node.csv文件通过主键字段PID实现了与point.csv数据的一一对应.

防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj

2、车道元素(lane.csv)
(1)车道元素(lane.csv)格式说明

防盗标记–盒子君hzj

3、线条数据集(lines_data_set\white_lines_data_set\stop_lines_data_set)
(1)线条数据集中的lines数据集格式说明
lines数据集存储了所有线条数据的基本属性信息

白色标即为车行道边界,并即是实际存在的白色标。例如道路上的白色标包括单白分隔带、双白分隔带以及虚白导流标等类型

4、杆元素
面积要素(area.csv、crosswalk.csv及road_surface_mark.csv)的格式说明

防盗标记–盒子君hzj
防盗标记–盒子君hzj
注
格式说明如下:

(2)面元素(crosswalk.csv)格式说明

格式说明如下:

(3)面元素(road surface_mark.csv)格式说明
格式说明如下:

3、元素关系图例

(1)点元素和lane元素的关系

point, node, dtlane, and lane are four essential components of a vector map. They cannot be omitted as they form the foundation for constructing a basic high-precision map. By incorporating these four elements into an autoware system, one can achieve path planning simulations that closely mimic human-driven vehicles. However, with only these four elements, more complex scenarios such as stop lines and traffic lights cannot be adequately handled; additional components are therefore necessary to ensure comprehensive functionality.
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(2)局部环境图的生成(用于轨迹规划)
利用多维雷达装置生成高密度局部环境图;构建八叉树代价场用于三维路径规划;将点云数据降维为二维平面图,并构建相应的栅格障碍成本场;一般适用于道路级的任务规划(如换道、返航、停障和避障等)。
(7)把地图上传到服务器,进行共享调用
(4)地图信息的传递

Lane.csv文件通过多层次处理得出的结果大约是一米的waypoints,每个waypoint均包含有位置和速度两个重要信息
(5)地图数据包获取
方法一:在Rosbag store中存在大量传感器数据集,并且在进行复杂开发时必须支付费用。
方法二:通过构建自己的ROS仿真环境来获取传感器数据。
(4)定位模块
防盗标记–盒子君hzj
Autoware主要采用NDT算法进行定位。由于无损检测中的计算成本与地图尺寸无关,在处理大规模区域时能够实现高清晰度和高分辨率三维地图的大比例尺范围内的定位
该系统不仅提供了多种本地化服务和数据映射技术,并包含迭代最近点(ICP)这一特定的数据映射方法。为此类程序提供...选择最适合的技术方案
Localization:定位模块节点:
(1)lidar_localizar
基于全局坐标系计算车辆当前位置(x,y,z,roll,pitch,yaw),通过LIDAR扫描获取的数据结合地图预处理信息。采用基于正态分布变换(NDT)的方法匹配当前激光雷达帧与三维地图。

(2)gnss_localizer
接收器接收并完成对NMEA数据串(即NMEA消息)的解码与解析过程后,在此系统中定义的位置信息模型中包含坐标分量x、y、z以及姿态参数 roll、pitch 和 yaw(RPY角)。所得结果不仅可以直接用于获取车辆当前位置信息,在后续的lidar_localizar算法运行中也可作为起始基准位置提供给相关计算模块
(3)dead_reckoner
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(2)规划决策部分
autoware的规划方案采用半自动模式,在更为复杂的场景下,例如停车以及恢复工作错误发生时,则需由司机遇使路径
策略是以概率机器人技术为基础与场景规则系统相结合的方式,并遵循交通法规。autoware采用了遵循场景规则进行自主分配路径管理的方法,并具体操作包括换道、合并以及向前行驶。
依据预先构建的高质量地理信息图,在概率机器人技术的支持下
(1)任务规划Misson planning
在设定全局范围内的起点和终点位置后,在整个规划过程中生成固定不变的路径;当系统确定并分配了所有全局路径后,则会立即触发本地系统的局部运动规划任务。
Misson planning:任务规划节点
(1)route_planner
规划出到达目标地点的全局路径后,并生成一系列与之相关的节点集合结果 ,这些节点均源自道路route网中的相应位置。
(2)lane_planner
基于route_planner发布的多组十字路口数据,请判定全局路径所包含的各个lane,并明确指出每个lane所对应的waypoint点序列
(3)waypoint_planner
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(4)waypoint_maker
waypoint_maker是一个专为存储和调用手动创建的waypoint文件而设计的工具。当需要将路径信息存储为文件时,在实际行驶过程中启动定位装置以获取位置数据及速度数据,并将这些数据整合生成一个路径文件。随后可以通过该文件向其他规划模块传输所需追踪的路径数据。
(2)运动规划Motion planning
planning主要负责基于一段temporal waypoint轨迹生成局部可行和全局可行的轨迹,在考虑车辆的状态时(具体而言,在三维地图中所示的位置以及其周围的局部障碍物分布情况),周围动态物体、交通规则以及预期的目标位置,在局部环境下进行规划计算出最优化路径
Motion planning:运动规划节点
(1)velovity_planner
更新车辆的速度信息时,请注意所跟踪的waypoint中都包含有速度信息这一事实。该模块旨在根据车辆的实际状态对速度信息进行进一步修正以实现能够在停止线前停下并进行减速或加速等操作。
(2)astar_planner
防盗标记–盒子君hzj
(3)adas_lattice_planner
采用State Lattice规划算法实现了系统功能,并预先设定好参数列表以及语义地图数据。基于min jerk样条曲线进行局部路径生成和优化,在当前位置前方生成了多条可行路径,并最终导出了无人车需遵循的理想轨迹waypoint。这些结果可用于实现障碍物规避和车道变换。
(4)waypoint_follower
这个模块采用了 Pure Pursuit 算法来进行路径跟踪操作,并能够生成一系列用于引导车辆行驶的具体指令。该模块发送出去的控制信息不仅可以被捕获并执行于目标车辆节点上,也可通过线控接口进行数据捕获和处理。最终将完成整个系统的自主运行
(5)open_planner
原理和实现写在我其他博客
…
(3)行为规划Behavioral Planning
防盗标记–盒子君hzj
防盗标记–盒子君hzj
改写内容
4.Autoware控制部分【Path following路径跟踪】
(1)介绍
控制车辆跟随运动规划器生成的路径
该系统已成功在众多有线控制车辆上进行测试部署。该系统计算输出包括一组速度数据、角速度数据以及相应的轮角和曲率数值。这些信息将通过车辆接口传递给有线控制器作为控制指令。使用带有位置受限约束的非饱和PID控制器能够有效地实现对转向和油门的精确控制。通常采用比例-积分-微分(PID)调节器
(2)算法类型
(1)PID控制器
主要应用于线控底盘的油门、刹车及转向的控制。
主要采用PID控制器,在当某些参数设置不当时,则会导致该控制器无法有效维持车辆稳定性。
(2)pure pursuit纯跟踪算法
防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
(3)MPC算法
在另外的博客写
5.Autoware运动仿真Wf_simulation
(1)介绍 wf_simulation相当于一个虚拟的小车模拟构建了一个汽车坐标系base_link并能根据输入的速度与转向指令做出相应的反应同时还能实时反馈当前的基座位置信息及其姿态和速度参数(2)操作步骤 操作流程如下第一步启动系统进行必要的初始化设置第二步通过控制界面输入所需的速度与转向指令第三步执行运行过程第四步实时监控并记录系统的运行数据

防盗标记–盒子君hzj
防盗标记–盒子君hzj
防盗标记–盒子君hzj
二、autoware的源码解读
1.Autoware源码下载及解读方法
通过研究官方源码资料库里的代码库文档, 我们能够获取到丰富的技术知识. 在项目中, 除了进行界面操作和查看launch文件的逻辑结构外, 还可以通过节点图架构来深入解析程序流程.
可以通过官网提供的git仓库进行阅读学习 Autoware源码 将所有链接统一放置在文章末尾的参考资料部分
基于程序架构的解析方法(个人经验分享)
2.Autoware源码的具体功能包解读【按照功能分类】
(1)根据功能包的功能实现来解读的步骤
首先查看main函数及其相关操作,
具体包括:
(1)所使用的参数设置情况,
(2)发布的主题内容,
(3)关注的主题列表
研究订阅回调函数的作用机制,
确定其在系统中的功能定位
明确各节点的实际功能实现情况
(2)根据不同功能包实现的功能进行对应功能包的解读
对界面上功能模块的代码实现进行解析,并详细说明各功能模块的具体作用机制
该内容涵盖理论知识,在本文科普环节不做深入探讨。
包含了大量的功能包。
我会精选已使用过的经验案例,并在其他博客平台进行分享。
目前先暂时搁置这一问题较为合理,
因为即将于十点下班。
(3)Autoware导航文件架构解读

这类似于autoware各功能模块的分类。
我认为这是一个导航架构。
基于此结构和功能分析每个功能模块的工作原理。
作为初步了解的内容,请稍等片刻。
三、autoware实操教程
通过深入解析autoware的功能特性
深入解析autoware的功能特性
1.autoware官方git教程
在autoware的官方git仓库中已经有了非常详细的说明,在这里就不赘述了。不过在油管上还有一些教学视频可以把整个操作流程梳理清楚。
(1)Autoware的官网
<https://github.com/Autoware AI/autoware.ai>
https://www.autoware.ai
(2)sample rosbag files
这个用tizi下载比较快
(3)Autoware Wiki介绍
https://github.com/Autoware-AI/autoware.ai/wiki
(4)Autoware-Manuals
https://github.com/CPFL/Autoware-Manuals
S. Kato and colleagues presented "Enabling Autonomous Vehicles with Embedded Systems through Autoware on Board" at the Ninth ACM/IEEE International Conference on Cyber-Physical Systems (ICCPS 2018), where they detailed their approach in pages 287–296.
S Kato E Takeuchi Y Ishiguro Y Ninomiya K Takeda and T Hamada An Open Methodology for Autonomous Vehicle Development IEEE Micro Volume 35 Issue No 6 Pages 60–69 (2015) Link available at https://ieeexplore.ieee.org/document/7187478
2.Users Guide用户教程步骤(按照官方的方式试试水)
我这样表达步骤可能更清晰

3.搭建自己的无人驾驶项目field test步骤
我这样表达步骤可能更清晰(自己的经验,仅供参考)

.
.
.
总结
Autoware只是一个工具,在实现其源码内容时必须由自己进行学习掌握;为了深入理解源码原理可参考百度资源。整个Autoware系统相对复杂,在全面理解其原理在短时间内也是难以完成的任务;因此不必将全部源代码一次性研究透彻
感知部分:涵盖动态障碍物检测、跟踪与预测任务,并涉及交通灯的检测与分类工作;定位部分:采用GNSS与NDT作为定位手段;地图部分:提供高精度的地图数据支持;规划决策部分:整合全局路线加载以及复杂的车道场景与倒车泊车场景分析能力;控制部分:结合纯跟踪算法与MPC优化算法实现精准控制;车机接口部分:支持标准CAN通信协议
部署经验总结
防盗标记–盒子君hzj
(1)为了实现对Autoware bag数据包的有效验证,请考虑更换为带有真实传感器系统的方案;如果没有物理传感器支持,则可以在Gazebo仿真环境中获取相应的传感器数据。
(2)同样支持安装Autoware 1.12及以上版本。
(3)安装Autoware时请遵循"简单即好"的原则:根据实际需求逐一安装必要的组件。
(4)安装完成后,请确保启动界面正常显示。
https://www.cxybb.com/article/m0_46673077/115400045
https://codeleading.com/article/10816031861/
(5)当使用bag_demo时,在单核情况下正常运转被认为是标准情况。而在后续使用自定义bag数据包并自主选择算法时,则需要多核支持。
.
具体实现方法如下:
当autoware整体编译遇到困难时,可以通过将相关功能模块独立移植至目标环境进行处理。
通过执行相关demos即可(考虑到该GitHub存在些许问题),以代码学习为主则无需过分担忧程序无法启动的情况。
.
.
参考资料
(1)官方视频介绍(ROSCon 2017 )
https://www.youtube.com/watch?v=XlXHLoIDohc
(2)官网提供的 PPT 简介,文档说明
https://github.com/CPFL/Autoware-Manuals
(3)autoware 项目的 GitLab 链接 https://gitlab.com/autowarefoundation/autoware.ai/autoware
(4)官方提供的数据集rosbag的获取(需费用)。
https://data.tier4.jp
对于预算有限的学生来说,建议尝试搭建一个基于ROS平台的仿真实验环境。毕竟难以承担高昂的成本。
(5)公司官网
https://tier4.jp/
(6)autoware 操作教程(很全)
https://www.ncnynl.com/archives/201910/3401.html
优酷平台展示了autoWare的各种配置视频演示文稿。具体视频内容可参考以下链接:https://i.youku.com/i/UNDIxMDQ1MTkzNg==?spm=a2h0j.11185381.module_basic_dayu_sub.DLDDH2~A]
UC Media auto store 的中文指南
(9)创客智造的教程
https://www.ncnynl.com/archives/201910/3401.html
(10)PIX教程
https://www.cnblogs.com/hgl0417/p/11844135.html
https://www.cnblogs.com/hgl0417/p/14617025.html
知道效果可以学习源码原理
了解其效果后可以通过分析源码理解其工作原理
为智能驾驶汽车搭建在Gazebo中的虚拟仿真实验平台:<>
增添自动驾驶汽车所需的关键传感器设备至仿真环境中,并参考<>以获取详细的技术方案
使用NDT构建点云地图:<>
使用Hybrid a*进行路径规划:<>
使用聚类算法作物体检测:<>
采用Pure Pursuit算法与MPC方法实现路径追踪:<>
