autoware整体架构的分析

news2024/11/22 14:04:44

autoware framework

  • sensing
    • lidar driver(lidar驱动)
    • PointCloud Preprocessing(点云预处理)
    • Detection(检测)
    • GNSS (全球导航卫星系统)
    • IMU (惯性测量单元)
  • Localization(定位)
    • Pose Initializer (姿态初始化器)
    • Point Cloud Processing (点云处理)
    • NDT Scan Matching (NDT扫描匹配)
    • EKF Localizer (扩展卡尔曼滤波器定位器)
    • Gyro Odometer (陀螺仪里程计)
    • Vehicle Velocity Converter (车辆速度转换器)
    • Pose Twist Fusion (姿态扭转融合)
    • Stop Filter (停车过滤器)
    • Localization Error Monitor (定位误差监控)
  • Perception (感知)
    • Object Recognition (物体识别)
    • Obstacle Segmentation (障碍物分割)
    • Traffic Light Recognition (交通信号灯识别)
    • Occupancy Grid Map (占用栅格地图)
    • Data Fusion and Filtering (数据融合与滤波)
    • Surround Obstacle Checker (周围障碍物检查)
  • Planning (规划)
    • Mission Planner (任务规划器)
    • Behavior Path Planner (行为路径规划器)
    • Behavior Velocity Planner (行为速度规划器)
    • Freespace Planner (自由空间规划器)
    • Obstacle Planner (障碍物规划器)
  • Control (控制)
    • Trajectory Follower (轨迹跟随器)
    • Vehicle Command Gate (车辆命令闸)
    • Vehicle Interface (车辆接口)
    • Shift Control (换挡控制)

谈到自动驾驶的仿真,autoware绝对是绕不过去的对象,autoware整体是一个ros2架构下的基于高精地图的解决方案,里面很多算法也是可以进行移植然后进行使用的。接下来我们来对整体的算法进行一个考究。主要是基于官方的这个svg文件:
请添加图片描述
这里面包含了几个大的部分,我们来仔细研究一下各部分的内容。

sensing

lidar driver(lidar驱动)

雷达的驱动,获取雷达的数据并将其转为ROS可以处理的格式,sensor_msgs/PointCloud2

PointCloud Preprocessing(点云预处理)

点云的预处理,包括一下一些内容:
fix_distortion: 修正点云中的失真,确保点云数据的精度。

pointcloud_to_laserscan:将三维点云转换为激光扫描数据
pointcloud_fusion将多个雷达的数据进行融合
voxel_grid_filter:使用体素滤波对点云进行下采样,减少数量。(体素滤波是将点云划分为3D栅格,并使用每个栅格中的代表点来减少点云的数量。)
ray_ground_filter:用于区分地面和非地面点云数据,可以过滤掉地面点云,减少不必要的计算。
pointcloud_map_loader:点云地图加载,用于后续定位和感知
outlier_filter:去除点云中的离群点,提高数据的质量。
ring_outlier_filter:针对环形激光雷达的离群点过滤算法。
crop_box_filter: 进一步裁剪点云数据,只保留关心的区域内的点云数据。
concat_filter: 将两个雷达的数据进行融合。

注:有些内容是perception的。

Detection(检测)

euclidean_cluster:欧式聚类,将点云分割成不同的对象,通过检查点云中点与点之间的距离,将同一对象分割出来
shape_estimation:估计物体的尺寸和形状。对点云的聚类结果进行分析,估计长方形,圆形等、
object_association:将不同传感器的感知结果关联起来,形成统一的感知输出,这是多传感器融合的一部分,将激光雷达、摄像头等关联起来提高物体检测的准确性。

GNSS (全球导航卫星系统)

GNSS提供全球定位服务,结合其他传感器的数据,提供车辆的全球位置。

gnss_driver: 负责从GNSS传感器获取数据。
gnss_poser: 处理GNSS数据,并将其转化为ROS可以处理的格式,供定位模块使用。
pose_initializer: 该模块将GNSS的位置估计作为初始位姿,用于后续的定位任务。

IMU (惯性测量单元)

IMU可以提供车辆的加速度和角速度数据,结合其他传感器的输出,帮助估计车辆的姿态和运动状态。

imu_driver: 负责获取IMU数据,包括加速度和角速度。
imu_corrector: 利用IMU数据进行校正,修正其他传感器可能存在的误差,确保系统的准确性。
gyro_odometer: 使用IMU数据估算车辆的运动状态,如速度和位置变化。这些数据可以进一步与其他传感器的数据融合,改善车辆的定位精度。

Localization(定位)

定位主要就是处理上述的一些传感器的数据了,包含这些内容:

Pose Initializer (姿态初始化器)

pose_initializer: 负责在系统启动时初始化车辆的位置。它利用来自GNSS的数据,提供一个初始的全局位姿估计。这一步骤通常是在车辆刚启动或系统重启时进行的。HMI(人机接口)也可以通过pose_initializer_srv服务发送初始位姿。

Point Cloud Processing (点云处理)

点云数据经过一系列处理和过滤后用于位置匹配:

crop_box_filter: 剪裁点云数据,保留重要的测量区域内的数据。
voxel_grid_…: 对点云数据进行下采样,以减少计算负担,并保留关键的空间信息。
random_…: 对点云数据进行随机采样,进一步减少数据量。

NDT Scan Matching (NDT扫描匹配)

ndt_scan_matcher: 采用NDT(正态分布变换)算法,通过点云与地图数据的匹配来估计车辆的位姿。此模块输出的位姿估计将作为EKF(扩展卡尔曼滤波器)的输入,用于进一步优化位置估计。

EKF Localizer (扩展卡尔曼滤波器定位器)

ekf_localizer: 使用扩展卡尔曼滤波器,将来自不同传感器的数据融合在一起,生成高精度的位姿估计。EKF通过结合先验状态估计和传感器观测数据,优化车辆的当前位姿。
输入包括:点云匹配的位姿估计、IMU数据(通过gyro_odometer)、速度转换数据(通过vehicle_velocity_converter)等。
输出包括:融合后的位姿估计,传递给pose_twist_fusion_filter和其他模块。

Gyro Odometer (陀螺仪里程计)

gyro_odometer: 通过处理IMU数据,估算车辆的速度和角速度。这些数据进一步传递给EKF Localizer,帮助改进位姿估计。

Vehicle Velocity Converter (车辆速度转换器)

vehicle_velocity_converter: 负责将车辆状态中的速度信息转换为适合EKF处理的格式。它将车辆的速度信息与IMU数据结合,为EKF Localizer提供必要的输入。

Pose Twist Fusion (姿态扭转融合)

pose_twist_fusion_filter: 结合位姿和速度信息,进一步优化车辆的姿态估计。它使用来自EKF Localizer和Gyro Odometer的数据,生成最终的定位结果。

Stop Filter (停车过滤器)

stop_filter: 当车辆检测到停止时,停止所有定位更新,以保持车辆在静止时的位置精度。该模块主要用于确保车辆在停止时的位置不会因传感器噪声而产生漂移。

Localization Error Monitor (定位误差监控)

localization_error_monitor: 负责监控定位系统的健康状况,检测可能的误差和异常情况。它通过诊断消息提供系统状态的反馈,有助于及时发现和纠正定位系统中的问题。
其中,利用imu数据,ndt的匹配数据车辆速度数据传入EKF来估计车辆位姿是一个大的方向,这里面其实也应该有相应的不确定性。这里用这些高级滤波和匹配算法来为车辆提供精确且实时的位置信息。

Perception (感知)

Perception部分负责处理感知模块的数据,包括检测、跟踪和预测等功能。感知系统识别车辆周围的动态和静态物体,并为规划和控制模块提供环境信息。
这也是道路的实际感知方案,没想到竟然不是通过点云识别而是聚类??所以现在我也放弃这条激光雷达检测的路。

Object Recognition (物体识别)

该子模块处理物体识别的任务,通过融合来自不同传感器的数据进行物体的检测和识别。
本身分割的时候如果做不到呢?要怎么将相机和雷达的数据更好的结合呢。相机最大的问题在于数据集吗??

outlier_cropbox_filter: 通过裁剪点云数据,去除不需要的部分,从而减少计算负担。
clustering: 使用聚类算法将点云数据分组,以识别不同的物体。
voxel_grid_filter: 通过下采样减少点云数据量,同时保留重要的空间信息。
outlier_filter: 过滤掉噪声数据,进一步提高识别精度。
concat_filter: 将多个滤波后的点云数据合并,得到完整的环境表示。
euclidean_cluster: 通过欧几里得聚类算法,识别出不同的物体。
lidar_centerpoint: 使用lidar数据估算物体的中心点。
shape_estimation: 根据聚类结果估算物体的形状。
roi_cluster_fusion: 将不同传感器的数据(如激光雷达和摄像头)融合,以提高物体识别的准确性。
object_range_splitter: 将检测到的物体根据距离进行分类处理。
object_lanelet_filter: 结合地图数据,过滤出与车道相关的物体。
multi_object_tracker: 对多个检测到的物体进行跟踪,预测它们的运动轨迹。

Obstacle Segmentation (障碍物分割)

该子模块处理障碍物的分割和检测,主要通过激光雷达点云数据实现。

crop_box_filter: 剪裁点云数据以保留测量范围内的障碍物。
common: 通用处理模块,负责去除地面点云和其他非障碍物点云数据。
occupancy_grid_map: 根据点云数据生成占用栅格地图,用于表示环境中的障碍物。
probabilistic_occupancy_grid_map: 生成概率占用栅格地图,通过概率模型表示障碍物的存在。
三维的占用栅格地图,可以说是esdf和tsdf地图了。

Traffic Light Recognition (交通信号灯识别)

该子模块处理交通信号灯的识别和状态检测。

traffic_light_map_based_detector: 使用地图数据,检测并识别交通信号灯的位置和状态。
traffic_light_classifier: 对检测到的交通信号灯进行分类和状态识别。
traffic_light_roi: 根据感兴趣区域(ROI)识别交通信号灯,并生成交通信号灯状态信息。

Occupancy Grid Map (占用栅格地图)

占用栅格地图模块负责生成关于周围环境的占用状态,通常用于路径规划和避障。

occupancy_grid_map: 生成栅格地图,表示环境中不同区域的占用状态,供其他模块使用。
probabilistic_occupancy_grid_map: 通过概率模型增强栅格地图的表示能力,提供更为精确的环境表示。

Data Fusion and Filtering (数据融合与滤波)

concat_filter: 用于将不同传感器或处理结果的点云数据进行合并,以形成完整的环境表示。
shape_estimation: 从聚类后的点云数据中估计物体的形状。

Surround Obstacle Checker (周围障碍物检查)

surround_obstacle_checker: 使用来自感知模块的数据检测车辆周围的障碍物,判断是否存在碰撞风险。

Planning (规划)

规划模块负责根据感知、定位等模块提供的数据生成车辆的行驶路径。它不仅要确保路径的安全性,还要考虑到交通规则、动态障碍物、以及车辆的物理限制等因素。

Mission Planner (任务规划器)

任务规划器是规划模块的顶层组件,负责生成全局路径,包括起点和终点,以及路径上的重要路标。

mission_planner: 生成全局路径,并将其传递给下游的路径规划器。

Behavior Path Planner (行为路径规划器)

行为路径规划器负责在全局路径的基础上,生成更加具体的路径,并考虑到当前的交通环境和道路情况。

lane_following: 车辆的车道保持功能,确保车辆在车道内行驶。

lane_change: 实现车辆的变道功能。

obstacle_avoidance: 避开道路上的障碍物。

pull_over/out: 实现车辆的停靠和驶出功能。

Behavior Velocity Planner (行为速度规划器)

行为速度规划器负责根据路径规划器生成的路径,计算适当的车速。

detection_area: 识别车辆行驶路径上的目标区域。

blind_spot: 处理车辆的盲点区域。

cross_walk: 处理行人穿越道路的情况。

traffic_light: 处理红绿灯的信号。

intersection: 处理交叉路口的情况。

occlusion_spot: 处理视野受阻的区域。

no_stopping_area: 识别禁停区域。

stop_line: 处理停车线的情况。

virtual_stop_line: 处理虚拟停车线的情况。

Freespace Planner (自由空间规划器)

自由空间规划器用于停车或在没有明确道路标记的区域内进行路径规划。

freespace_planner: 生成停车路径或自由区域内的路径。

costmap_generator: 生成用于路径规划的代价地图。

Obstacle Planner (障碍物规划器)

障碍物规划器专注于处理障碍物的相关问题,确保车辆能够安全绕过障碍物。

surround_obstacle_checker: 检查车辆周围的障碍物。

external_velocity_limit: 根据外部因素(如道路标志、行人)限制车辆速度。

obstacle_stop: 实现车辆在遇到障碍物时的紧急停车。

scenario_selector: 根据不同的场景选择适合的规划算法。

motion_velocity_optimizer: 优化车辆的速度和加速度,使其与路径匹配。

我之前学习过move_base的导航栈,这个更像是实际车辆的一个规控架构,所以需要重新升级一下之前的内容,主要包含的也是全局和局部规划——也就是任务规划,行为路径规划
同时独立出来了行为速度规划,并且对于自由空间也有一套规划器,最后是障碍物的规划器。一共5个规划器来完成这些内容,至于地图类型,则是暂时以栅格和esdf、tsdf地图为主,有这样提前建立的地图,然后能够根据mpc来规划,同时也是通过mpc来控制。由于mpc包揽规控,尤其是局部规划器,所以把它称为了规控一体设计。
并且仿照之前的感知,也有很多其他的工作可以进行延伸的。

Control (控制)

控制模块负责将规划模块生成的路径和速度指令转化为具体的车辆控制命令。这些命令包括转向角、加速度、制动等,最终实现车辆的安全行驶。

Trajectory Follower (轨迹跟随器)

轨迹跟随器模块负责将规划好的路径和速度转化为具体的控制命令。

lateral_controller: 横向控制器,负责控制车辆的转向角,使其沿着规划的路径行驶。

longitudinal_controller: 纵向控制器,负责控制车辆的加速度和制动,使其保持在规划的速度范围内。

latlon_muxer: 负责将横向和纵向控制器的输出合并为最终的控制命令。

lane_departure: 检测车辆是否偏离车道,并发出相应的控制命令以纠正车辆的行驶方向。

shift_decider: 决定车辆的换挡操作,根据当前的行驶状态调整变速器的挡位。

Vehicle Command Gate (车辆命令闸)

车辆命令闸模块负责将各个控制模块的输出进行协调,并将最终的控制命令发送给车辆接口。

vehicle_cmd_gate: 汇总各个控制模块的输出,并根据优先级或其他条件决定最终的车辆控制命令。

Vehicle Interface (车辆接口)

车辆接口模块负责将来自控制模块的命令转化为车辆硬件能够理解的信号。

vehicle_interface: 负责与车辆的底层硬件进行通信,将控制命令发送到车辆的执行机构,如转向系统、制动系统、和加速系统。

accel_map_calibrator: 负责加速踏板的标定,确保加速命令能够准确地转换为车辆的加速度。

raw_vehicle_cmd: 处理未经处理的车辆命令,并将其转换为车辆能够执行的格式。

external_velocity: 接收外部速度限制命令并应用到车辆控制中。

Shift Control (换挡控制)

换挡控制模块负责根据车辆的状态和行驶情况,自动控制变速器的档位。

shift_decider: 根据车辆的速度、加速度等因素决定是否需要换挡,并发出相应的指令。
还有一些车辆和系统,以及hmi的内容,这里就先不讨论了。一个优秀的架构是有这指点江山的作用的,目前我能接触到的顶级的设计应该也就只能到这里了,接下来就是模仿和创新的过程了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品需求过程管理重要性

产品需求过程管理重要性 背景 以下都是真实事项经历回顾,在产品开发过程中,产品经理与研发团队之间的沟通至关重要。然而,沟通不畅或信息缺失常常导致需求无法准确传达,最终影响产品的成功。以下是一些常见的问题: 1.需…

Qt插件开发总结6--插件间依赖

文章目录 一、前言二、基本策略三、效果展示四、关键代码4.1、主程序4.2、插件管理器4.3、插件A 一、前言 插件大致可分为:功能性插件、界面插件;一个软件由一堆插件堆起来,必然难以避免插件间相互引用,例如:插件A调用…

安防监控/视频汇聚EasyCVR视频监控平台级联上级,无法播放是什么原因?

EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。EasyCVR视频汇聚平台采用先进的图像处理技术和传输协议,能够确保高清、稳定的…

Qt (13)【Qt窗口 —— 颜色对话框 QColorDialog】

阅读导航 引言一、颜色对话框 QColorDialog简介二、常用方法介绍⭕参数说明 三、使用示例 引言 在深入探讨了Qt的QMessageBox之后,我们现在转向QColorDialog,一个让用户轻松选择颜色的实用对话框,为Qt应用增添色彩选择的便捷性。 一、颜色对…

Java语言程序设计基础篇_编程练习题题目:17.16 (字符的頻率)

题目:17.16 (字符的頻率) 编写一个程序,提示用户输入一个 ASCII 文本文件名,然后显示文件中每个字符出现的频率。 代码示例 编程练习题17_16FrequencyOfCharacters.java package chapter_17;import java.io.DataInputStream; import java…

【HarmonyOS 4.0】网络请求 - axios

axios 相当于鸿蒙应用项目的一个第三方库,鸿蒙应用项目使用ohpm管理(包括安装,卸载等)第三方库。除了axios,还有很多其他的第三方库可供开发者使用,所有的第三方库都收录在OpenHarmony三方库中心仓。 1. 安…

以低代码技术加速推动企业数字创新

在数字化转型的浪潮中,企业面临着前所未有的挑战和机遇。随着技术的不断进步,企业需要快速适应市场变化,创新产品和服务,以保持竞争力。低代码技术作为一种新兴的开发模式,正逐渐成为企业数字创新的重要推动力。 低代码…

电比例流量泵放大器

电比例泵控制是一种精准的液压传动控制系统,利用输入的电信号按比例来调制液压参数,以实现对流量、压力和方向的连续且成比例的控制。这种控制在现代工业中的应用非常广泛,尤其在需要精确控制的场合。 按控制元件分类:电液比例控…

无人机培训机构必备运营合格证及驾驶员训练机构合格证详解

无人机培训机构在运营过程中,必须持有必要的运营合格证及驾驶员训练机构合格证,以确保其培训活动的合法性、规范性和安全性。以下是对这两种合格证的详细解析: 无人机培训机构运营合格证 无人机培训机构运营合格证是国家或地区民航管理部门…

【软考中级攻略站】-软件设计师(1)-数值及其转换和数据表示

进制转换 n进制->十进制 步骤说明: 识别基数:首先确认你正在处理的是n进制数,这里的n就是该数的基数。 数位权重:从右向左数,每个位置上的数字都有一个权重,最右边的位置权重为0,依次向左…

【JUC】10-Java内存模型JMM

1. JMM 通过JMM来实现和主内存之间的抽象关系。屏蔽各个硬件平台和操作系统的内存访问差异以实现让Java程序在各种平台下都能达到一致的内存访问效果。 三大特性:原子性:互斥,同时成功或失败。有序性:指令重排序后有序。可见性&a…

MySQL递归获取商品分类以及所有下级分类商品

现在就是我们有一张商品表,还有一张分类表,商品表有一个字段用来记录当前商品分类id的,然后查询时候因为分类是有层级的,如果我们想通过顶层分类获取到它和所有子类的商品时就会需要用到MySQL的递归查询了。 首先是针对 MySQL 8.…

NCMMSC-CNVSRC 2024视觉语音识别竞赛圆满落幕

8月16日上午,NCMMSC-CNVSRC 2024 学术研讨会在乌鲁木齐召开的第十九届全国人机语音通讯学术会议(NCMMSC 2024)上举行。会上公布了本次视觉语音识别竞赛 CNVSRC 2024 的最终结果,并举行了颁奖仪式。 本次竞赛由 NCMMSC 2024 组委会…

springboot+vue 进销存管理系统

springbootvue 进销存管理系统 相关技术springbootmybatismysqlmavenvueelementui

ANet-1E1S1智能网关:物联网时代的能源计量新纪元,断点续传引领高效运维

在万物互联的物联网时代,数据的精准采集与高效传输成为了推动各行业智能化转型的关键。ANet-1E1S1以其断点续传技术与强大的RS485接口智能通信管理能力,为水、电、气、油等多领域能源管理带来了便捷与效率的提升。基于嵌入式Linux平台的通用型智能通信管…

高经费打造的史诗级视觉盛宴,惊叹于每一帧的奢华

8月29日,备受期待的《指环王:力量之戒》第二季终于上线了。这一季一上架就放出了三集,立刻引发了影迷们的热烈讨论。 自从2022年首季首播以来,《指环王:力量之戒》就一直备受瞩目。尽管首季受到了不少争议,…

【开源大模型生态2】数据、算力、算法,越来越猛!

人工智能(A)的快速发展依赖于三个核心要素:数据,算法,算力。这个观点已经得到了业界的高度认可。只有这三个要素同时满足了才能加速人工智能的大发展。随着人工智能大模型规模变大以及普及应用,人工智能对能源的需求也在不断加大,…

linux文件——文件系统与内存管理——理解打开文件, 写入数据与文件系统的关系

前言:本节课算是一点文件系统的补充内容。 但是说是文件系统的补充内容,其实我们也可以把这篇文章当作linux下的内存管理的文章来看待。 因为博主会从内存管理的角度, 将进程打开文件、写入数据的流程, 以非常底层的角度&#xff…

【C++】汇编分析,函数是如何调用,传参,返回

传参 有的是用寄存器传参,有的用push传参 我在MSVC编译测出来的是PUSH传参(debug模式),具体过程如下 long func(long a, long b, long c, long d,long e, long f, long g, long h) {long sum;sum (a b c d e f g h);ret…

护栏碰撞监测系统的发展前景如何?

​ ​护栏碰撞监测系统的发展前景可谓十分广阔,主要体现在以下几个方面: ​ ​一、交通领域需求持续增长 ​ ​1. 道路建设不断拓展 ​ ​●在全球范围内,公路、高速公路以及城市道路等基础设施持续处于新建与扩建的进程之中。以…