Autoware不同版本介绍
Autoware官方说明文档:https://autowarefoundation.github.io/autoware-documentation/main
使用ROS2和Autoware的自动驾驶汽车免费在线进阶课 译 https://bbs.huaweicloud.com/blogs/detail/283058
Autoware.AI
第一个基于 ROS 1 发布的 Autoware 发行版,该存储库包含各种软件包,涵盖自动驾驶技术的不同方面 - 传感、驱动、定位、映射、感知和规划。由于多种原因,很难提高 Autoware.AI 的功能,已于2022年底停止维护。想要使用autoware.ai的功能,建议切换到Autoware.core/universe。 autoware.1.10版本后,标定工具箱需要另外安装。现已推出轻量级标定工具,不依赖于autoware环境,即不需要下载安装编译整个autoware环境,可独立运行。
主要支持ubuntu14.04-indigo、Ubuntu16.04-kinetic、ubuntu18.04-melodic。
AI版本是基于ROS1.0实现的,十分适合于自动驾驶初学者,也适合有快速验证科研需求的高校实验室。
Autoware自称是世界上第一个自动驾驶all-in-one的开源软件,基于Apache2协议,在ROS机器人操作系统基础上开发而来,用于仿真实验。在github开源,从2016年12月发布1.0.0版本开始,到1.12.0alpha版本,维护者将其迁移到了gitlab上,而后在github上又将Autoware.AI部分替代原先Autoware版本,所以可以把现在github上的的Autoware.AI视为原Autoware的继任者。
历史版本简要回顾:
v1.2.0 支持ROS Kinetic版本,用于激光雷达追踪的kalman滤波,基于yolo_v2视觉跟踪,增加imu驱动,为NDT定位增加IMU和里程计选项,点云距离滤波,rosbag数据预处理;
v1.3.0 增加基于A*算法的避障,GPU的欧式聚类,基于DNN的交通灯识别;
v1.4.0 增加点云的地面滤波;
v1.5.0 增加Web-Ui,多斑马线检测器,ENet图像语义分割,开始支持aarch64架构,支持NVIDIA DrivePX2,为A*路径规划算法增加虚拟障碍物仿真;
v1.6.0 增加GPU-NDT匹配算法,可以控制一些机动车了,新的Rviz模型,增加了ray地面滤波(也就是多线激光雷达的点云地面滤波),增强了DecisionMarker,基于规则控制机动车,存在激光雷达旋转时NDT匹配算法不工作的问题;
v1.7.0 支持定位多种交通标志,支持IDS-imaging相机,支持北阳2D雷达,增加了多雷达标定工具,相机-雷达联合标定工具,支持Velodyne的32线激光雷达,支持AVT相机,基于MxNet的信号灯识别,增加yolo-v3检测器,增加了车辆状态节点和话题,NDT匹配算法的安全监视器,基于IMM-UKF-PDA的多目标跟踪算法,路径点速度重规划工具;
v1.8.0 开始有相应的demo视频公布在油管;新功能:视觉检测与点云检测的信息融合(YOLOV3)和数据融合(点云着色),为Nvidia Drive PX2和其他aach64架构提供交叉编译,支持西克Sick的LD-MRS激光雷达,点云地图的网格划分,现在可以限制NDT建图算法的最大扫描距离了;一些提升:欧式聚类区分点云更精确,最多支持8个激光雷达,加速point2image(应该是用了OpenMP提速)
v1.9.0 开始逐步弃用ROS indigo版本,基于简单的运动估计来估计物体运动,点云地图中静态目标的过滤(应该是和预建地图做差分),L-shape拟合稳定跟踪多辆车,速腾雷达驱动,无需英伟达的sdk也可以交叉编译
v1.10.0 不再支持ROS indigo,可以过滤掉离自身车辆较远的点云,增加FLIR ADK相机驱动,Ouster激光雷达驱动
v1.11.0 catkin不再支持编译源码,改用colcon;点云快速编码用于目标检测,百度的CNN用于点云分割,基于点云的外形/姿态估计;改进的混合A*算法和代价图;
v1.12.0 v1.13.0 v1.14.0都未有说明
Autoware.Auto
基于 ROS 2 发布的第二个 Autoware 发行版。从 Autoware.AI 开发中吸取的经验教训,Autoware.Auto 采用了不同的开发过程来开发 ROS 2 版本的 Autoware,避免了简单地将 Autoware.AI 从 ROS 1 移植到 ROS 2。取而代之的是,用适当的工程实践将代码库从头开始重写的。 auto版本对新工程师的门槛太高,且进行大规模的架构更改非常困难。 暂时没有找到属于auto版本的标定模块。
主要支持ubuntu18.04-dashing、ubuntu20.04-foxy、galactic。
Auto版本基于ROS2.0实现的,是Autoware在商业落地部署的一次尝试,提出了一套全自动泊车的解决方案,代码量较少,但架构布局十分优美,非常适合商用的二次开发。
Autoware.core/universe
基于ROS2,Autoware Core 继承了 Autoware.Auto 的原始策略,包含基本的运行时和技术组件,可满足自动驾驶系统所需的传感、计算和驱动等基本功能和能力。Universe 模块是 Core 模块的扩展,可由技术开发人员提供,以增强传感、计算和驱动的功能和能力。 需要另外安装Calibrtion Tools标定工具,且使用标定工具时,需要编译整个autoware环境。
主要支持ubuntu20.04-galactic、ubuntu22.04-humble。
Universe版本是目前Tier IV公司仍在开发维护的版本,功能十分齐全,性能比较稳定。
架构
代码结构
├── autoware #主要源代码
├── car_demo #主要与仿真相关
├── citysim #主要与仿真相关
├── drivers #不需要太关注,主要与上车测试相关
└── vendor #不需要太关注,主要与上车测试相关
├── autoware
│ ├── common #通用功能
│ ├── core_perception #感知定位
│ ├── core_planning #规划控制
│ ├── documentation #
│ ├── messages #较重要,定义接口
│ ├── simulation #仿真可视化
│ ├── utilities #通用工具
│ └── visualization #仿真可视化
修改launch文件也要编译,因为用的是install里的launch文件
调试时node加上output
古月居 博客 https://www.guyuehome.com/46964
1、localization(自定位)
lidar_localizer使用来自LiDAR的扫描数据和预先安装的3D地图信息,计算车辆在全球坐标中的自我定位(x,y,z,侧倾,俯仰,偏航)位置。对于与3D地图匹配的LiDAR扫描,我们建议使用正态分布变换(NDT)算法,同时还支持ICP算法。
gnss_localizer将NMEA消息从GNSS接收器转换到(x,y,z,roll,pitch,yaw)位置。该结果可以单独用作自我车辆的位置,也可以用于初始化和补充lidar_localizer的结果。
dead_reckoner主要使用IMU传感器预测自我车辆的下一帧位置,并内插lidar_localizer和gnss_localizer的结果。
2、detection(检测)
lidar_detector从3D激光扫描仪读取点云数据,并提供基于LiDAR的物体检测功能。基本性能来自欧几里德聚类算法,该算法在地面上方找到LiDAR扫描(点云)的聚类。为了对集群进行分类,还支持基于DNN的算法,例如VoxelNet和LMNet。
vision_detector从相机读取图像数据,并提供基于图像的对象检测功能。主要算法包括R-CNN,SSD和Yolo,它们被设计为执行单个DNN以实现实时性能。支持多种检测类型,例如汽车和乘客。
vision_tracker提供了对vision_detector结果的跟踪功能。该算法基于 Beyond Pixels。投影图像平面上的跟踪结果,并通过fusion_tools将其与3D空间中的lidar_detector的结果组合在一起。
fusion_detector可以从激光扫描仪读取点云数据,也可以从相机读取图像数据,并在3D空间中实现更精确的目标检测。激光扫描仪和照相机的位置必须事先校准。当前的实现基于MV3D算法,与原始算法相比,该网络具有较小的扩展性。
fusion_tools结合了lidar_detector和vision_tracker的结果。由vision_detector标识的类信息将添加到由lidar_detector检测到的点云集群中。
object_tracker预测由以上程序包检测和识别的对象的运动。跟踪的结果可以进一步用于物体行为的预测和物体速度的估计。跟踪算法基于卡尔曼滤波器。另一个变体也支持粒子过滤器。
3、prediction(预测)
object_predictor使用上述对象跟踪的结果来预测运动对象(例如汽车和乘客)的未来轨迹。
crash_predictor使用object_predictor的结果来预测自我车辆是否与运动中的物体发生碰撞。除了对象跟踪的结果之外,还需要自我车辆的航路轨迹和速度信息作为输入数据。
cutin_predictor使用与collision_predictor相同的信息来预测相邻车辆是否在自我车辆的前方切入。
4、Decision(决策)
Autoware的决策模块在感知和计划模块中间。根据感知的结果,Autoware决策一个由有限状态机表示的驾驶行为,以便可以选择适当的计划功能。当前的决策方法是基于规则的系统。
4.1 Intelligence
Decision_maker订阅了大量与感知结果、地图信息和当前状态有关的topic,以便发布下一刻的状态topic。状态更改将激活适当的planning功能。
4.2 state
state_machine预先定义的规则范围内改变状态,编排decision_maker。
5、planning(规划)
Autoware中的最后一个计算是计划模块。该模块的作用是根据感知和决策模块的结果制定全局任务和局部(时间)运动的规划。通常,在执行自我车辆启动或重新启动时确定全局任务,而根据状态变化更新局部运动。例如,如果将Autoware的状态设置为“停止”,则计划将自我车辆的速度设置为在具有安全裕度的物体前面或在停止线处变为零。另一个示例是,如果将自动软件的状态设置为“避免”,则计划自我车辆的轨迹绕过障碍物。计划模块中包含的主要软件包如下。
5.1 mission
route_planner搜索到目的地的全局路线。路线由路网中的一组交叉路口表示。
lane_planner确定要使用哪些车道以及route_planner发布的路线。车道由一组路标表示,即,多个路标(每个路标对应于一个车道)由此程序包发布。
waypoint_planner可以替代地用于生成到目的地的一组路标。该程序包与lane_planner的不同之处在于,它发布的是单条路线的中间点,而不是中间点的数组。
waypoint_maker是保存和加载手工waypoint的实用工具。要将航路点保存到指定的文件,您可以在激活localization后手动驾驶车辆,并且Autoware会使用速度信息记录行驶路径的waypoint。以后可以从指定的文件中加载已记录的waypoint,以使运动规划模块订阅它们以遵循该路径。
5.2 motion
velocity_planner更新从lane_planner,waypoints_planner或waypoints_maker *订阅的waypoint的速度计划,以加快/加速周围车辆和道路要素( 例如停车线和交通信号灯)的速度。请注意,嵌入在给定航路点中的速度信息是静态的,而此程序包会根据驾驶场景更新速度计划。
astar_planner实现了混合状态A *搜索算法,该算法生成从当前位置到指定位置的可行轨迹。该软件包可用于避开障碍物和在给定的waypoint上急转弯,以及在诸如停车场等自由空间中进行选路。
adas_lattice_planner实现了状态格规划算法,该算法基于样条曲线,预定义的参数表和ADAS map(也称为矢量地图)信息在当前位置之前生成多个可行轨迹。该软件包主要用于避障和变道。
waypoint_follower实现了Pure Pursuit算法,该算法生成一组扭曲的速度和角速度(或正角度),以通过匀速圆周运动将自我车辆移动到给定航路点上的目标waypoint。该软件包应与velocity_planner,astar_planner和/或adas_lattice_planner结合使用。所发布的速度和角速度(或角度)的扭曲集合将由车辆控制器或线控界面读取,并且最终自动控制自主车辆。
autoware实车实战之一:如何快速适配环境、让自己的小车跑起来
https://blog.csdn.net/qq_38861347/article/details/126741386