autoware概述以及主要框架各个模块的介绍

2023-10-24 01:30

本文主要是介绍autoware概述以及主要框架各个模块的介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

一、autoware主体框架

autoware主要包括sensing、computing(perception、decision、planning)、actuation等几个部分,如下图所示。

  1. 其中sensing模块对应的是各类传感器对真实世界中各类数据的采样,例如camera采样图像、LiDAR采样激光点云等,采样数据属于未处理的原始数据,需要输入到computing模块进行计算处理
  2. computing模块主要是为了对传感器采样的原始数据进行加工处理,最后以为实现安全高效的导航为目的,将规划结果输出给actuation模块。其中computing模块主要分为三个小模块
    1. perception(感知模块),这部分要处理localization(通过车辆当前采集传感器数据和已有地图进行自身定位,ps若无地图需要通过SLAM构建地图),然后detection模块负责检测周围与车辆有场景交互的非自身个体(车辆、行人等),prediction模块会对检测初得物体进行未来预测估计,以便提前规划防止碰撞。
    2. decision(决策模块),根据之前感知的结果,Autoware决策一个由有限状态机表示的驾驶行为,以便可以选择适当的计划功能。当前的决策方法是基于规则的系统。
    3. planning(规划模块),主要是根据决策和起始点和目标点,采用mission和motion模块可以计算出一条kinodynamic的路径
  3. actuation模块,表示驱动器模块,如YMC驱动器等,接收planning模块出来的规划结果,经历驱动器实现驱动控制。

其各个模块都有对应不同的ros节点,如下图所示

二、各个模块节点的功能简介

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_localizergnss_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_detectorvision_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_plannerwaypoints_plannerwaypoints_maker *订阅的waypoint的速度计划,以加快/加速周围车辆和道路要素( 例如停车线和交通信号灯)的速度。请注意,嵌入在给定航路点中的速度信息是静态的,而此程序包会根据驾驶场景更新速度计划。
  • astar_planner实现了混合状态A *搜索算法,该算法生成从当前位置到指定位置的可行轨迹。该软件包可用于避开障碍物和在给定的waypoint上急转弯,以及在诸如停车场等自由空间中进行选路。
  • adas_lattice_planner实现了状态格规划算法,该算法基于样条曲线,预定义的参数表和ADAS map(也称为矢量地图)信息在当前位置之前生成多个可行轨迹。该软件包主要用于避障和变道。
  • waypoint_follower实现了Pure Pursuit算法,该算法生成一组扭曲的速度和角速度(或正角度),以通过匀速圆周运动将自我车辆移动到给定航路点上的目标waypoint。该软件包应与velocity_plannerastar_planner和/或adas_lattice_planner结合使用。所发布的速度和角速度(或角度)的扭曲集合将由车辆控制器或线控界面读取,并且最终自动控制自主车辆。

三、参考:

https://github.com/Autoware-AI/autoware.ai/wiki/Overview

这篇关于autoware概述以及主要框架各个模块的介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271802

相关文章

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1