2024-09-19Autoware Universe实现智能网联交通沙盘小车的变道逻辑

引言:

随着自动驾驶技术的飞速发展,它已成为交通领域创新的前沿。在这个充满挑战的新时代中,Autoware Universe作为一个开源自动驾驶平台,为研究和开发人员提供了一个强大的工具,用以实现复杂的自动驾驶功能,其中最引人注目的便是其先进的变道逻辑。

在实际道路条件下,安全有效的变道不仅是自动驾驶车辆必须掌握的技能,也是衡量其智能化水平的重要标准。Autoware Universe中的变道逻辑通过综合考虑车辆的当前状态、周围环境、交通规则以及驾驶意图,来实现顺畅且安全的车道变更。它不仅仅是简单的车道切换,而是一个涉及多个方面的复杂决策过程。

本文的目的是探索如何将Autoware Universe的变道逻辑成功集成到一个特定的应用场景中——即智能网联智慧交通沙盘小车环境。这一环境不同于实际道路,它是一种用于教育和研究的模拟环境,可以在相对安全和可控的条件下测试和验证自动驾驶算法。我们将讨论沙盘小车的硬件配置和软件架构,如何适配和集成Autoware Universe的变道逻辑,并展示具体的实现方法和代码示例。

通过这项工作,北京渡众机器人旨在为教育和科研人员提供一个实际的案例,展示如何在模拟环境中应用和测试先进的自动驾驶技术。这不仅有助于提升自动驾驶领域的教学和研究水平,也为未来在真实环境中部署这些技术奠定了坚实的基础。

Autoware Universe的变道逻辑概述:
变道的必要性:

在复杂且动态的道路环境中,变道是自动驾驶车辆必须具备的关键能力之一。变道的必要性主要由以下几个方面构成:

避免障碍物:在遇到前方道路上的障碍物,如施工区域或停车车辆时,自动驾驶车辆需要通过变道来继续其行程。
优化行驶路线:为了遵循预定的导航路线或响应实时交通状况,如避开拥堵区域,车辆可能需要进行变道。
遵守交通规则:在某些情况下,例如即将到达的左转或右转车道,车辆需要提前变道以符合交通规则。
应对紧急情况:在紧急情况下,如为救护车或警车让路,变道成为必要的应急响应。

Autoware Universe中的变道算法:

Autoware Universe提供了一套复杂且成熟的变道逻辑,该逻辑在确保安全和效率的同时,允许自动驾驶车辆在多种交通情况下灵活变道。这一逻辑包括以下几个关键组成部分:

感知与环境理解:首先,系统利用车辆的传感器数据(如激光雷达、摄像头等)来准确感知周围环境。这包括识别邻近车道的车辆、障碍物、路面标记和交通信号。

决策制定:

变道决策依赖于车辆对周围环境的感知和理解,特别是对当前车道和邻近车道的动态对象的识别。Autoware Universe在变道请求条件满足时激活变道模块,这些条件包括:

车辆不在首选车道上。

在变道路径上没有交叉路口或人行横道。

变道路径没有与其他动态对象发生碰撞。

变道候选路径得到操作员的批准。

当需要变道时,变道模块被激活,可以安全地执行。

变道要求

在变道请求条件期间

自我车辆不在 preferred_lane .

变道路径上既没有十字路口也没有人行横道

变道就绪条件

变道路径不会与其他动态物体发生碰撞(见下图)

变道候选路径由操作员批准。

生成变道候选路径

变道候选路径分为准备和变道两个阶段。下图说明了变道候选路径的每个阶段。

准备阶段

准备轨迹是候选路径的第一条和沿自我车辆当前车道生成的直线部分。准备轨迹的长度计算如下。

lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2

在准备阶段,当剩余距离等于或小于时,转向信号灯将被激活 lane_change_search_distance

变道阶段

变道阶段包括将自我从当前车道移动到目标车道的移动路径。变道阶段的总距离如下。请注意,在变道阶段,自我车辆以恒定速度行驶。

lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration

添加 是为了 backward_length_buffer_for_end_of_lane 为任何可能的延迟留出一些窗口,例如制动滞后期间的控制或机械延迟。 

多个候选路径样本(纵向加速度)

变道速度受自我车辆当前速度的影响。高速需要更长的准备时间和变道距离。但是,我们还需要规划变道轨迹,以防自我车辆减速。计算假设自我车辆减速的候选路径是通过将预定的减速值代入 prepare_length 和 prepare_velocity lane_changing_length 方程来执行的。

预定的纵向加速度值是从longitudinal_acceleration = maximum_longitudinal_acceleration 开始并递减 longitudinal_acceleration_resolution 直到达到 longitudinal_acceleration = -maximum_longitudinal_deceleration 的值。 maximum_longitudinal_acceleration 公式为:在 common.param 文件中定义为 normal.min_acc 。 maximum_longitudinal_deceleration

其中 common_param 是车辆公共参数,它定义了车辆公共最大纵向加减速。而 lane_change_param 变道模块具有最大纵向加减速。例如,如果用户将和 common_param.max_acc=1.0 lane_change_param.max_acc=0.0 设置为 maximum_longitudinal_acceleration 0.0 ,并且变道在变道阶段不会加速。

longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration – minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num

请注意,当 低于 minimum_lane_changing_velocity 时 current_velocity ,小车需要将其速度加速到 minimum_lane_changing_velocity 。因此,纵向加速度变为正值(而不是减速)。

下图说明了 longitudinal_acceleration_sampling_num = 4 .假设 maximum_deceleration = 1.0 、 a0 == 0.0 == no deceleration 、 a1 == 0.25 a2 == 0.5 a3 == 0.75 和 a4 == 1.0 == maximum_deceleration 。 a0 是预期的变道轨迹,应自负车辆不减速, a1 而 的路径是预期的变道轨迹应自负车辆在 0.25 m/s^2 。

选择哪条路径将取决于有效性和碰撞检查。

多个候选路径样本(横向加速度) 

除了对纵向加速度进行采样外,我们还通过调整横向加速度的值对变道路径进行采样。由于横向加速度会影响变道的持续时间,因此较低的横向加速度值会导致变道路径变长,而较高的横向加速度值会导致变道路径变短。这允许变道模块在变道空间有限时通过增加横向加速度来生成更短的变道路径。

最大和最小横向加速度在变道参数文件中以地图形式定义。通过对地图中的值进行线性插值来确定每个速度的横向加速度范围。假设我们有以下地图:

在这种情况下,当自我车辆的当前速度为 3.0 时,最小和最大横向加速度分别为 0.25 和 0.4。这些值是通过对地图的第二行和第三行进行线性插值获得的,它们提供了最小和最大横向加速度值。

在这个范围内,我们对自我车辆的横向加速度进行采样。与用于纵向加速度采样的方法类似,横向加速度 (lateral_acceleration_resolution) 的分辨率由以下因素决定:

lateral_acceleration_resolution = (maximum_lateral_acceleration – minimum_lateral_acceleration) / lateral_acceleration_sampling_num

候选路径的有效性检查 

如果总变道距离小于

  1. 到当前车道尽头的距离
  2. 到下一个十字路口的距离
  3. 从当前姿势到目标的距离。
  4. 到人行横道的距离。

下图说明了有效性检查。 

对象选择和分类

首先,我们将目标物体分为目标车道中的障碍物、当前车道中的障碍物和其他车道上的障碍物。目标车道表示变道后自我车辆将要到达的车道,当前车道表示自我车辆在变道前跟随的当前车道。其他车道是不属于目标车道和当前车道的车道。下图描述了每条车道上的物体。请注意,用户可以通过更改标志(即 check_objects_on_current_lanes 和 check_objects_on_other_lanes )从安全检查中删除当前车道和其他车道上的物体。

此外,为了在红绿灯处等候的车辆后面变道,我们跳过了对红绿灯附近停车车辆的安全检查。停放汽车检测的说明写在避让模块的文档中。
准备阶段的碰撞检查

在尝试变道之前,自我车辆可能需要在目标车辆前方保持足够的车辆间距离。可以启用该标志 enable_collision_check_at_prepare_phase 以获得此行为。下图说明了 false 和 true 案例之间的差异。

该参数 prepare_phase_ignore_target_speed_thresh 可以配置为忽略速度低于特定阈值的目标(例如静止或移动速度非常慢的物体)的准备相位碰撞检查。

如果车道被阻塞且多次变道

与其他车辆一起在公共道路上行驶时,存在无法执行变道的情况。假设候选路径被评估为不安全,例如,由于相邻车道上有车辆进入。在这种情况下,自我车辆无法改变车道,也无法达到目标。因此,自我车辆必须提前在一定距离处停车,并等待相邻车道被评估为安全。最小停车距离可以通过换档长度和最小变道速度计算得出。

lane_changing_time = f(shift_length, lat_acceleration, lat_jerk)
minimum_lane_change_distance = minimum_prepare_length + minimum_lane_changing_velocity * lane_changing_time + lane_change_finish_judge_buffer

下图说明了在多次变道情况下车道被阻塞的情况。

当前方有物体时的停止位置

当障碍物在自我车辆前方时,请停下来保持变道距离。停车位置取决于情况,例如当变道被目标车道障碍物挡住时,或者不需要立即变道时。下面显示了该情况下的划分。

当自我车辆接近变道终点时#

无论变道目标车道内有无物体,都应保持变道时与前方物体保持必要的距离。

当自我车辆未接近变道终点时#

如果目标车道的变道路段内没有物体,请与前方物体保持变道所需的距离。

当目标车道距离较远时#

当变道的目标车道距离较远且不靠近当前车道时,请勿与前方物体保持变道所需的距离。

卡住时变道#

如果自我车辆被停止并满足以下任何条件,则认为它被卡住了:

当前车道前方有障碍物

自我车辆位于当前车道的尽头

在这种情况下,与平时相比,变道的安全检查是宽松的。详情请参阅“变道时碰撞检查”下的“卡住”部分。为了实现此功能,正在执行上一节中通过保持前方障碍物余量来停止的功能。
变道规定

如果要调节人行横道或十字路口的变道,变道模块会查找变道路径(不包括人行横道或十字路口)。要调节人行横道或十字路口的变道,请将 regulation.crosswalk 或regulation.intersection 更改为 true。如果自我车辆被卡住,为了避免卡住,它可以在人行横道/十字路口变道。如果自我车辆停止超过 stuck_detection.stop_time 几秒钟,则被视为卡住。如果自我车辆速度小于 stuck_detection.velocity ,则视为停止。
中止变道

中止过程可能导致三种不同的结果;取消、中止和停止/巡航。

下面描述了中止变道检查的流程。

取消变道

假设变道轨迹被评估为不安全。在这种情况下,如果自我车辆尚未偏离当前车道,则轨迹将被重置,自我车辆将在操纵后恢复车道。

可以通过将 设置为 enable_on_prepare_phase true 启用该功能。

下图演示了取消过程。

中止路径

假设自我车辆已经偏离了当前车道。在这种情况下,取消路径是危险的,并且会导致自我车辆突然改变航向。在这种情况下,有必要规划一条轨迹,允许自我车辆返回当前路径,同时最大限度地减少航向变化。在这种情况下,变道模块将生成中止路径。下图显示了中止路径的示例。请注意,该函数不能保证安全的中止过程,因为它没有检查周围物体的存在和/或它们的反应。可以通过将 和 enable_on_lane_changing_phase 设置为 true 来 enable_on_prepare_phase 手动启用该功能。该参数 max_lateral_jerk 需要设置为较高的值才能使其正常工作。

停靠或者巡航

参数 

基本变道参数

以下参数可在 lane_change.param.yaml 中配置。

变道规定

自我车辆卡住检测

变道时的碰撞检查 

以下参数可在 和 lane_change.param.yamlbehavior_path_planner.param.yaml 配置。

取消

调试标记和可视化 

要启用调试标记,请执行(无需重新启动)

ros2 param set /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner lane_change.publish_debug_marker true

或者只需将 publish_debug_marker to true lane_change.param.yaml 设置为永久效果(需要重新启动)。

然后添加标记

/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_left

in rviz2. 在 rviz2 .

可用信息

  1. 自我与对象的关系,以及安全检查信息
  2. 自我车辆插值姿势到最新的安全检查位置。
  3. 对象是否安全,由多边形的颜色显示(绿色 = 安全,红色 = 不安全)
  4. 有效的候选路径。
  5. 变道开始和结束时的位置。

目标还必须在首选车道列表中。

轨迹规划:一旦决定变道,系统将计算一条安全且平滑的轨迹,以从当前车道平稳地过渡到目标车道。这需要考虑车辆的动力学限制和周围车辆的预期运动。

执行与调整:在执行变道动作时,系统会持续监测环境变化,并在必要时调整轨迹,以确保整个变道过程的安全性和舒适性。

沙盘小车环境介绍:

硬件配置: 智能网联自动驾驶仿真微缩汽车需采用等比例缩放的模拟智能无人驾驶汽车的各个关键部件和关键技术,能够向学生讲解智能无人驾驶汽车的原理和结构。智能微缩车能满足通过摄像头、激光雷达等自主式感应设备主动感知周围环境信息(如图像数据、前方障碍物距离数据),以及通过室内通讯网络等设备,网联式获得周围世界数据(如地图、红绿灯、闸机、其他车辆位置数据等),并通过编码器、惯性导航、激光雷达等传感设备了解自身状态(如车速、车姿),经数据感知及融合决策,规划全局最优行驶路径,控制车辆行驶。

软件架构:

在沙盘小车环境中,软件架构是实现智能网联车路协同人工智能自动驾驶的核心。这里涉及的两大主要组件是ROS2系统和Autoware Universe算法。

ROS2系统

ROS2(Robot Operating System 2)是一个用于机器人应用的开源中间件套件,它是ROS(Robot Operating System)的升级版。ROS2带来了改进的安全性、实时性和支持更复杂网络配置的能力,使其成为自动驾驶车辆软件开发的理想选择。在沙盘小车环境中,ROS2的主要作用包括:

节点管理:ROS2通过节点(Nodes)的概念来管理各种功能模块,如感知、定位、决策和控制等。

数据通信:ROS2利用话题(Topics)、服务(Services)和动作(Actions)等机制实现节点间的数据通信和指令传递

实时性能:ROS2提供了改进的实时性,这对于自动驾驶中的快速反应和准确控制至关重要

安全和可靠性:ROS2增强了安全性和可靠性,这对于确保自动驾驶车辆的稳定运行非常重要

Autoware Universe算法

Autoware Universe是基于ROS2开发的自动驾驶软件堆栈,它提供了一系列的算法和工具,用于实现自动驾驶车辆的各种功能。在沙盘小车中,Autoware Universe主要负责:

感知处理:使用车载传感器数据(如激光雷达、摄像头等)进行环境感知,识别车辆、行人、障碍物等

定位和映射:通过高精度地图和定位技术确定车辆在沙盘环境中的准确位置

路径规划:根据沙盘环境和实时交通情况,规划车辆的行驶路径

决策和控制:基于感知信息和路径规划,做出驾驶决策并控制车辆运动

将ROS2和Autoware Universe结合使用,可以有效地实现沙盘小车的自动驾驶功能。ROS2提供了强大的基础架构和通信机制,而Autoware Universe则提供了针对自动驾驶所需的具体算法和实现。这种结合不仅使得沙盘小车能够模拟真实的自动驾驶场景,而且还为研究人员和学生提供了一个理想的平台,用于研究和教学自动驾驶技术。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


往期评论