当前位置:   article > 正文

Autoware Universe的behavior path avoidance在智慧交通自动驾驶沙盘小车中的应用_autoware.universe 设置提前避障

autoware.universe 设置提前避障

概述

Autoware Universe 的避障设计文档介绍了行为路径规划框架内的避障模块。这个模块旨在识别和规避路径上的障碍物,以确保自动驾驶车辆安全行驶。文档详细解释了避障策略、目标物体筛选、避障路径生成等关键算法和流程。

在实际调试自动驾驶动态避障中,Autoware Universe的避障设计文档提供了重要的参考意义。它深入介绍了避障策略、目标物体的筛选方法及避障路径的生成算法,有助于开发者理解和实现高效的动态避障系统。通过学习这些方法,开发者可以改善自动驾驶车辆在面对突发障碍物时的响应能力和安全性。

北京渡众机器人科技有限公司将Autoware Universe的behavior_path_avoidance_module算法应用于1比12缩比的自动驾驶小车,并在模拟真实城市道路环境中实现自动驾驶,对教学和科研具有重要意义。这不仅可以帮助学生和研究人员直观理解自动驾驶技术的工作原理和挑战,还能提供一个实验平台,用于测试和验证新的避障策略、算法优化和系统集成方法。此外,通过实际操作和问题解决,参与者可以深化对自动驾驶核心技术的理解,促进创新思维和技术进步。如需进一步了解,请关注并联系渡众机器人网站:www.bjdzrobot.com

behavior_path_avoidance避障模块目的与角色

该模块旨在实现基于规则的避障,开发人员可以轻松设计其行为。它生成由直观参数(如横向颠簸和避让距离)参数化的避障路径。这样就可以预定义避障行为。

此外,behavior_path_planner的审批界面允许外部用户/模块(例如远程操作)干预车辆行为的决策。 例如,该功能预计将用于紧急情况下的远程干预或在开发过程中收集有关操作员决策的信息。

算法局限性

该模块允许开发人员使用特定规则在避障规划中设计车辆行为。由于基于规则的规划特性,该算法无法补偿复杂情况下不与障碍物碰撞的情况。这是“直观且易于设计”和“难以调整但可以处理许多情况”之间的权衡。该模块采用前一种策略,因此在后期应更严格地检查此输出。在参考实现中,运动规划模块中还有另一个避障模块,它使用优化来处理复杂情况下的回避。(请注意,需要调整运动规划器,以便在简单情况下行为结果不会有太大变化,这是行为运动分层架构的典型挑战。 

为什么要把避障放到行为模块中

该模块执行车道避障,决策需要车道结构信息来照顾交通规则(例如,当车辆越过车道时,它需要发送指示信号)。规划栈中动作模块和行为模块的区别在于规划器是否考虑了交通规则,这也是行为模块中存在这个避障模块的原因。

算法原理

 下图显示了避障路径生成逻辑的简单说明。首先,选取目标对象,并为每个对象生成移位请求。这些移位请求是通过考虑避免所需的横向抽搐(红线)而生成的。然后合并这些请求,并在参考路径(蓝线)上创建移位点。对移位点进行过滤操作,例如删除不必要的移位点(黄线),最后通过组合类似 Clothoid 的曲线基元(绿线)生成平滑避障路径。

流程图 

目标对象过滤算法概述 

 如何确定目标障碍物

避障目标应仅限于静止的物体(即使车辆挡住了您的路径,您也不应避开在红绿灯处等候的车辆)。因此,避障目标车辆应满足以下具体条件。 

它位于您的车道附近(参数化) 

停止了

  • threshold_speed_object_is_stopped :用于判断对象是否停止的参数。
  • threshold_time_object_is_moving :用于防止颤振的参数。

它是一个特定的类。

  • 用户可以限制避障目标。
  • 现在,避障模块仅支持车辆。

它不在路线的中心 

        这意味着车辆停在车道边缘。这可以防止车辆避开在车道中间的红绿灯处等待的车辆。但是,对于此目的来说,这不是一个合适的实现。即使车辆位于车道中央,如果危险信号灯亮起,也应避开,随着识别性能的提高,这一点在未来应该得到改进。

对象不落后于当前(默认值:> - 2.0 m )或太远(默认值:< 150.0 m ),并且对象不落后于路径目标。 

停放车辆检测 

不仅计算距中心线的长度,还计算距路肩的长度,并将其用于过滤过程。它计算对象中心和中心线 shift_length 之间的实际长度与对象可以移动 shiftable_length 的最大长度之比。

ld:实际班次长度

LD:可移动长度

la:中心线与最左边边界之间的距离

width:对象宽度

物体离肩膀越近,该值越大 (理论最大值为1.0),并比较该值并 object_check_shiftable_ratio 确定该物体是否为停放的汽车。如果道路没有路肩,则实际上用作 object_check_min_road_shoulder_width 路肩宽度。

检测丢失补偿

为了防止识别结果的重复结果,一旦障碍物被定位,即使它消失了,它也会保持一段时间。当识别不稳定时,这很有效。但是,由于会导致过度检测(增加误报数量),因此需要根据识别准确率调整参数(如果 object_last_seen_threshold = 0.0 ,识别结果是 100% 可信的)。

流程图

避障路径生成算法概述

 如何防止由感知噪声引起的移位线颤动

由于目标识别结果包含与位置、方向和边界大小相关的噪声,如果将原始目标识别结果用于路径生成,则避障路径将直接受到噪声的影响。

因此,为了减少噪声的影响,避让模块为覆盖它的避让目标生成一个包络多边形,并基于该多边形生成避让路径。将生成包络面,使其平行于参考路径,并且面大小大于回避目标(定义为 object_envelope_buffer )。只要回避目标存在于该多边形中,多边形的位置和大小就不会更新。

  1. # default value
  2. object_envelope_buffer: 0.3 # [m]

计算移位长度和移位点

横向位移长度受 4 个变量的影响,即 lateral_collision_safety_bufferlateral_collision_margin vehicle_widthoverhang_distance 。公式如下

  1. avoid_margin = lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width
  2. max_allowable_lateral_distance = to_road_shoulder_distance - road_shoulder_safety_margin - 0.5 * vehicle_width
  3. if(isOnRight(o))
  4. {
  5. shift_length = avoid_margin + overhang_distance
  6. }
  7. else
  8. {
  9. shift_length = avoid_margin - overhang_distance
  10. }

下图说明了这些变量(此图仅显示了横向移位长度的最大值)。

具有安全缓冲和安全距离的必要性

要计算移位长度,可以调整的其他参数是 lateral_collision_safety_bufferroad_shoulder_safety_margin

  • 该参数用于设置安全间隙,该 lateral_collision_safety_buffer 安全间隙将作为计算避让路径时的最后一道防线。
    • 具有此参数的基本原理是,由于各种原因,该参数 lateral_collision_margin 可能会根据情况而变化。因此, lateral_collision_safety_buffer 将作为使用 lateral_collision_margin 失败时的最后一道防线。
    • 建议将该值设置为自我车辆宽度的一半以上。
  • road_shoulder_safety_margin 这将防止模块生成可能导致车辆过于靠近路肩或相邻车道分界线的路径。

仅在车道边界内生成路径

在实现要素之前,移位长度设置为常量值。像这样设置移位长度将导致模块生成回避路径,而不考虑实际环境属性。例如,路径可能超过实际道路边界或朝向墙壁。因此,为了解决这一限制,除了如何确定目标障碍物外,该模块还考虑了以下附加元素

  • 障碍物的当前车道和位置。
  • 路肩参照方向要避开。

这些元素用于计算从物体到路肩的距离 ( to_road_shoulder_distance )。参数 use_adjacent_laneuse_opposite_lane 允许进一步配置 to to_road_shoulder_distance .下图说明了配置。

如果满足以下条件之一, false 则不会生成移位点。

  • 到路肩的距离就足够了
  1. avoid_margin = lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width
  2. avoid_margin <= (to_road_shoulder_distance - 0.5 * vehicle_width - road_shoulder_safety_margin)
  • 障碍物侵入当前行车路径。

    • 当对象位于路径右侧时

      -overhang_dist<(lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width)
      
    • 当对象位于路径左侧时

      overhang_dist<(lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width)
      

规避路径生成算法的详细信息#

流程图

如何确定路径形状#

为具有给定横向颠簸的障碍物生成换档点。这些点被整合以生成回避路径。下面描述了与障碍物放置相对应的每种情况的详细流程。实际实现不会针对每种情况分开,但对应的 multiple obstacle case (both directions) 函数始终在运行。

一个障碍案例

计算到障碍物的横向移位距离,然后根据自我车速和给定的横向加力生成移位点,如下图所示。然后根据移位点计算平滑避让路径。

此外,在特殊情况下会执行以下过程。

侧向挺举松弛条件#
  • 如果自我车辆接近回避目标,横向挺举将放松到最大挺举
  • 避障后返回中心线时,如果距离目标(路径尽头)的距离不够,则如上所述放宽抖动条件。
最小速度松弛条件#

有一个问题是,我们无法提前知道避让过程中的实际速度。当自我车速为 0 时,这一点尤其重要。为了解决这个问题,该模块提供了一个最小避让速度参数,该参数用于车速较低时的横向颠加计算。

  • 如果自我车速低于“标称”最小速度,则在计算加力时使用最小速度。
  • 如果自我车速低于“锐”最小速度,并且标称横向颠簸不足以避免(自我车辆停在靠近障碍物的情况下),则在计算急速时使用“锐”最小速度(它应该低于“标称”速度)。

多障碍物案例(单向)#

为多个障碍物生成换档点。它们都会合并,以沿参考路径生成新的移位点。对新点进行过滤(例如,删除小影响的移位点),并计算过滤后的移位点的避让路径。

原始移位点的合并过程:检查每个路径点的移位长度。如果移位点重叠,则为同一方向选择最大移位值。

有关移位点筛选的详细信息,请参阅filtering for shift points。

多障碍物情况(双向)#

为多个障碍物生成换档点。所有这些都被合并以生成新的移位点。如果存在所需班次在不同方向上发生冲突的区域,则这些区域的最大班次量之和将用作最终班次量。该过程的其余部分与单向的情况相同。

筛选移位点#

通过过滤过程修改移位点,以获得避免路径的预期形状。它包含以下筛选器。

  • 量化:量化回避宽度以忽略小偏移。
  • 小班次移除:相对于前一个班次点有小变化的班次在前一个班次宽度中统一。
  • 类似梯度去除:用一条直线连接两个移位点,如果移位量在直线附近,则移除中间的移位点。
  • 移除瞬时回程:对于减小回避宽度的移位点(用于返回中心线),如果纵向上有足够的长距离,请将其移除。

其他功能

可驾驶面积扩大#

该模块具有以下参数,用于设置在生成回避路径时路径可以延伸到哪些区域。

  1. # drivable area setting
  2. use_adjacent_lane: true
  3. use_opposite_lane: true
  4. use_intersection_areas: false
  5. use_hatched_road_markings: false
 相邻车道

对面车道

交叉区域

交叉点区域在 Lanelet 地图上定义。看这里

阴影线道路标记#

阴影线道路标记在 Lanelet 地图上定义。看这里

安全检查#

避让模块具有安全检查逻辑。安全检查的结果用于产量操纵。通过将其设置为 enable true 来启用。

  1. # safety check configuration
  2. enable: true # [-]
  3. check_current_lane: false # [-]
  4. check_shift_side_lane: true # [-]
  5. check_other_side_lane: false # [-]
  6. check_unavoidable_object: false # [-]
  7. check_other_object: true # [-]
  8. # collision check parameters
  9. check_all_predicted_path: false # [-]
  10. time_horizon: 10.0 # [s]
  11. idling_time: 1.5 # [s]
  12. safety_check_backward_distance: 50.0 # [m]
  13. safety_check_accel_for_rss: 2.5 # [m/ss]

safety_check_backward_distance 是与安全检查区域相关的参数。该模块检查换档侧车道内以及前方和 safety_check_backward_distance 后方物体 object_check_forward_distance 之间的所有车辆的碰撞风险。


在智慧交通沙盘场景中,北京渡众机器人科技开发的自动驾驶微缩小车实现动态避障,不仅是技术创新的体现,也对教育和科研领域有深远的意义和作用。通过模拟真实交通环境,该技术为学生和研究人员提供了一个实验和探索智能驾驶算法、传感器数据处理及机器学习模型的平台。这不仅有助于加深对自动驾驶技术的理解,还促进了跨学科知识的整合与应用。此外,通过这种实践经验,可以激发创新思维,推动智能交通系统的发展,为解决现实交通问题提供新思路和解决方案。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/826753
推荐阅读
相关标签
  

闽ICP备14008679号