自动驾驶中的决策规划技术分享--轻舟智航

news/2024/11/17 3:53:29/

文章目录

    • 0.概述:
    • 1 导航模块
    • 2 决策模块
      • 2.1 车道决策
      • 2.2 障碍物决策
    • 3 轨迹规划
      • 3.1 时空分离规划
      • 3.2 时空联合规划
    • 4 对比

0.概述:

李仁杰,轻舟智航规划算法负责人,自动驾驶决策与规划技术专家。
自动驾驶系统中,决策规划模块用于解决车辆“怎么走”的问题。与业界惯用的时空分离算法不同,轻舟智航采用时空联合规划算法,同时在空间和时间维度求解最优行车轨迹,得到更加舒适、安全、拟人的驾驶行为。

总体介绍
image

1 导航模块

image

2 决策模块

2.1 车道决策

  • 车道保持

  • 借道

  • 变道

image

  • 基于规则与有限状态机的变道决策

image

  • 基于轨迹评价的变道决策算法

image

变道的难题

  • 静止车辆是否需要绕行

  • 拥挤场景下如何完成变道

image

2.2 障碍物决策

  • 给定车道决策下,定性地决定如何处理障碍物
    • 前有石头挡路,决定从左绕开还是从右绕开

    • 前面有车要cut in时,选择加速超过,还是选择减速让行

image

有了车道决策和障碍物决策后,可以共同为下游的轨迹规划提供一个可行解空间,做进一步的轨迹优化。

3 轨迹规划

给定导航路线,以及车道决策、障碍物决策后,怎么去定量地规划一条从当前位置指向目的地的轨迹。

image

时空联合规划技术

3.1 时空分离规划

  • 将三维时空下的决策和规划分解成路径规划和速度规划两个二维问题。

    • 第一步通常是仅考虑周围的静态障碍物,对静态障碍物做相应的横向决策,规划一条与静态障碍物没有碰撞的路径。

    • 第二步在上一步规划的路径上,对动态障碍物做是否让行的决策,在路径上规划出一条不与动态障碍物发生碰撞的速度曲线。

    • 最后一步将路径与速度曲线进行组合,得到最终输出的轨迹。

image

  • 优点:把一个三维的问题分解成了两个二维问题,适用于纵横向运动比较解耦的场景,比如比较简单的静态绕障和路口让行。

  • 缺点:很难实现与动态障碍物较复杂的纵横向联合交互,如超车、动态避让等等。对于前车慢行的场景,如果想去规划一条超车轨迹,是很难通过时空分离规划框架去实现的。

3.2 时空联合规划

  • Step 1 时空联合决策

    • 不区分障碍物是动态还是静态,对障碍物做决策也不会区分横向纵向,而是统一在三维时空里对障碍物做定性的决策。

    • 对障碍物做4种决策,分别是让行、超车、从左侧绕行和从右侧绕行这四种定性决策。

image

以上图右侧场景为例,前方有一辆蓝色慢车,右车道又有一辆紫色稍快一点的车,现在对这两个障碍物有两组决策方案.

  • 从蓝车后面加速向右变道,切入紫车前方。在这个决策方案下,对蓝车的决策是从右侧绕行,对紫车的决策是超车。

  • 在蓝车后面先减速等待,再向右变道,切入紫车后方。在这个决策方案中,对蓝车的决策仍然是从右侧让行,对紫车的决策就变成了让行。

Step 2 时空联合优化

image

时空联合优化算法:

  • 首先将时空联合决策的结果提炼为凸可行域,作为时空联合优化的状态安全约束集。比如上一步选择了决策方案一,就会得到不同时刻的可行区域,

  • 通过可行区域构造一个非线性的时空联合优化问题。对于这个时空联合的非线性优化问题,目标函数包含了轨迹的舒适性、效率以及对导航路线的跟踪性能等。我们用到的车辆模型一般也是非线性的,这样可以保证最后求解出的轨迹是实际可执行的

  • 非线性优化问题求解

4 对比

马路对面有公交车正从对向驶来,同时前方还有一辆低速自行车。

对于时空分离规划来说,它很难灵活地与周围的动态障碍物进行复杂绕行,所以只能规划出一条慢慢跟随自行车的轨迹。

image

时空联合规划来说,它可以更加灵活地处理障碍物,可以规划一条先从左边绕行自行车、然后在公交车驶到近处之前从公交车右边对自行车超车的轨迹。

image

image


http://www.ppmy.cn/news/1530851.html

相关文章

SQLPlus执行成功但数据没有更新的原因及解决办法

在使用 sqlplus 执行 SQL 文件时,如果执行成功但数据没有更新,可能有以下几个原因导致: 1. 没有提交事务 在 Oracle 数据库中,执行 UPDATE, INSERT, DELETE 等操作后,默认不会自动提交事务。如果没有显式地提交事务&…

vue3 + ts + pnpm:nprogress / 页面顶部进度条

一、简介 nprogress 是一个轻量级的进度条库,它适用于在网页上添加顶部进度条,用于指示页面加载进度或任何长时间的运行过程。这个库非常流行,因为它易于使用且视觉效果很好。 二、安装 pnpm add nprogress 三、在使用的页面引入 / src/v…

(done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)

来源:https://www.youtube.com/watch?vdaB9naGBVv4 模拟信号特点如下 时域连续(x轴) 振幅连续(y轴) 如下是模拟信号的一个例子: 数字信号特点如下: 一个离散值序列 数据点的值域是一系列有限的值 ADC:模拟信号到数字信号的…

制作一个rabbitmq-sdk以及rabbitmq消费者实现定时上下线功能

目录结构 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">&l…

JavaScript 学习

一、输出 为方便调试可以输出内容&#xff0c;但是用户是看不到的。要在开发者模式中看。 console . log ( "Hello" )&#xff1b; 二、外部文件引用 可以直接在html中写JS <head> <meta charset"utf-8"> <script> console.log("he…

利用 GlobalPointer 进行中文命名实体识别

利用 GlobalPointer 进行中文命名实体识别 在自然语言处理领域&#xff0c;命名实体识别&#xff08;NER&#xff09;是一个重要任务&#xff0c;它旨在识别文本中的特定信息单元&#xff0c;如人名、地名和组织名等。本文将详细分析使用 GlobalPointer 进行中文命名实体识别的…

甘肃非遗文化网站:Spring Boot开发实战

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

Linux-L14-Linux中把用户加入到管理者root中

目的 将用户添加到root用户组&#xff08;通常是管理员组&#xff09; 步骤 这可以通过usermod命令来完成 1打开终端 如果你需要为新用户添加到root组&#xff0c;首先使用以下命令创建一个新用户&#xff08;如果用户已经存在&#xff0c;可以跳过这一步&#xff09;&…