自动驾驶---“火热的”时空联合规划

news2024/11/7 8:35:38

1 背景

        早期的不少规划算法都是横纵分离的(比如Apollo),先求解path之后,依赖path的结果再进行speed的求解。这种横纵解耦的规划方式具有以下特点:

  • 相对较为简单,计算量通常较小,容易实现实时性要求。
  • 但是由于分别规划横向和纵向运动,可能会忽略两者之间的耦合关系,导致规划结果不够准确。
  • 在复杂场景下,可能无法很好地适应车辆等其它动态障碍物的变化。

        随着技术的发展和性能的要求,横纵耦合算法的弊端越来越明显,而时空联合规划逐渐浮出水面。本篇博客主要介绍时空联合规划的一些知识和特点。

2 时空联合规划

        “时空联合规划” 算法打破了业界常用的思维定势,同时考虑空间和时间来规划轨迹,在三维中同时对行驶路径和速度求解,而不是先单独求解路径,在路径基础上求解速度后,再形成最终的轨迹。

        其实早在之前的博客中,笔者就介绍过时空联合的方法(此前讲到的是基于车道坐标系SLT三维求解的方法,同理也可使用笛卡尔坐标系下XYT三维求解的方法),有兴趣的读者朋友可以参考一些细节知识:

        《自动驾驶---Motion Planning之构建SLT Driving Corridor》

        《自动驾驶---Motion Planning之STSC轨迹优化》

2.1 定义

        时空联合规划算法是一种在自动驾驶领域中用于同时考虑空间和时间因素来规划车辆行驶轨迹的算法。这种算法相较于传统的时空分离规划方法(即先规划路径再规划速度),具有更强的协调路径和速度的能力,能够更准确地处理复杂的动态交互场景。

2.2 算法背景

        在自动驾驶研发或者验收标准中,安全性和舒适性是两大核心要求(还有接管率,这里不做特殊说明)。安全性要求轨迹与所有障碍物进行碰撞检测,而碰撞的定义是在同一时间占据同一空间位置,因此只用路径或速度曲线都无法准确检测碰撞。同时,舒适性要求从多角度全方位地评估运动轨迹的平滑性,这同样需要同时考虑路径和速度(分别体现车辆在横向方向盘的表现以及纵向速度是否合理)。传统的时空分离规划方法在处理这些问题时存在局限性,因此时空联合规划算法应运而生。

2.3 算法原理与特点

  • 原理介绍如下:
    • 时空联合规划算法将路径和速度曲线同时作为优化问题的变量,通过求解一个复杂的优化问题来找到既安全又舒适的最优轨迹。

    • 该算法在规划过程中,同时考虑车辆在空间中的位置变化(路径)和时间上的速度变化(速度曲线),从而得到一个综合最优的行驶轨迹。

  • 特点介绍如下:
    • 同时性:同时求解路径和速度曲线,避免了先规划路径再规划速度时可能出现的不一致性。

    • 协调性:能够更好地协调路径和速度的关系,使得车辆在行驶过程中能够更流畅地应对各种动态变化。

    • 适应性:能够处理复杂的动态交互场景,如避让行人、车辆等障碍物。

2.4 算法实现方法

        笔者通过下面几个步骤大致说明整个算法的实现框架。

(1)时空联合决策

        在之前传统方案中下,决策模块尚未被模型替代,而是基于动态障碍物的单模或者多模预测轨迹(带时间t的属性)进行推演得到决策,如下图所示。给了障碍物决策标签,那么轨迹的求解就不会陷入局部最优,就会是一个凸优化问题。

(2)时空联合优化

        首先需要弄清楚的是时空联合优化的对象,目前笔者所了解到的各大车企的端到端方案,包括华为,特斯拉等,即使是模型生成的轨迹,对于控制层也是无法直接使用的,还是需要一层平滑或者优化,因此优化的步骤在当前阶段还是非常重要的。这里的优化思路有两种:

  • 第一种其实笔者在之前的博客 《自动驾驶---Motion Planning之构建SLT Driving Corridor》中也提到过,前向预测模块会生成初始的种子,即初始解。(种子生成:根据车辆的前向预测模块生成一系列离散的点作为种子)
  • 第二种就是带时间 t 的参考轨迹,该参考轨迹也是由决策模块推演得到(必须符合车辆运动学以及动力学的约束)。

        其实上述两种方案本质是相同的,目的都是为了生成基于时间 t 的初始解(参考轨迹)。

        接下来便是生成基于初始解轨迹的可行使空间,或者叫约束空间。

        不管是SLT还是XYT都会得到自车的可行使空间,该空间会作为优化求解约束的一部分,称之为SLT Corridor或者XYT Corridor,形式如下所示:

         最后就是构建时空联合优化问题,包括横纵向的安全性和舒适性,这里也可参考前面提到的两篇博客。在求解器部分,很多公司测试下来发现开源的求解器,比如SQP,并不能满足求解的需求,因此自研了求解器,比如华为,轻舟等公司。

        求解最优的时空轨迹的问题,其实是可以表述为一个以轨迹对时间的函数为变量的数值优化(numerical optimization)问题。问题表述的过程有若干设计需要我们做,而这些设计的合理与否会直接影响优化算法的效果。比如,表示轨迹有多种方式可以选用,前面提到的Frenet坐标系下的l(t)和s(t)就可以完整地描述轨迹,直接在笛卡尔坐标系(Cartesian frame)下描述车辆的位置(x,y)对时间的函数也可以,这两个坐标系各有鲜明的优缺点。

        还有一个重要的设计是如何描述碰撞安全,比如避免与静态障碍物(路沿,护栏等)和动态障碍物(车辆,行人等)的碰撞;用硬约束(constraint)或者软约束(penalty)都是可行的,使用得当的话也都能保证安全性。

        在上面这些设计做好之后,那么就可以选择合适的优化求解算法了,比如QP二次规划问题(quadratic programming)(在前面规控算法的文章中笔者也强调过很多次了)。不过QP适用于目标函数比较接近理想的二次形式,约束条件接近理想的线性形式的情况下;当问题比较复杂,高度非线性的时候,QP解得的结果经常会不尽如人意。以笛卡尔坐标系的轨迹表示形式为例讨论,轨迹表示为空间位置r(t) = (x(t), y(t))。在转弯时,要想平衡路径的曲率和过弯的速度,可以把横向加速度(lateral acceleration)作为体感的一个指标来约束,而横向加速度与车速和曲率都有关,写成自变量(坐标)的函数是比较复杂的,在QP中用一个二次形式来近似会有很大误差。这里又可以用得上迭代法了这个范式了:对于不适合用QP直接解的高度非线性问题,可以尝试SQP(sequential quadratic programming)这个方法,其核心思想就是重复QP求解---二次形式近似这两个步骤,迭代至收敛。由于需要迭代,在实际使用中有些提高计算效率的技巧是必要的,比如在QP中使用稀疏矩阵(sparse matrix),运用预条件子(matrix preconditioning)等。另外,在优化问题的数学描述中,也有很大的提高空间,有些描述车辆运动学或者控制极限的约束条件,如果能通过数学变形的方法内建到优化问题描述中,而不是以显式的约束的形式出现,就可以大大提高求解的效率和稳定性。

        当然,笔者曾经介绍的这篇博客《自动驾驶---Motion Planning之STSC轨迹优化》中,思路并不是直接求解(x_t, y_t, \theta_t......)等状态量,而是通过优化方法得到多段Bezier曲线的控制点信息,最终求解出自车的轨迹。

2.5 应用实例与效果

        目前,已有一些自动驾驶公司和研究机构开始尝试应用时空联合规划算法来提升自动驾驶系统的性能。例如,轻舟自研的时空联合规划算法能够同时在xyt(即平面和时间)三个维度的空间中直接求解最优轨迹,使得车辆在行驶时能够比普通驾驶员甚至老司机“开得更好”。这种算法在面临动态障碍物的交互时能够提前把握最好的时机选出最佳行车轨迹更流畅地完成车辆间的博弈并且不会出现反复急刹的情况。

        时空联合典型应用场景包括:

  • 鬼探头:通过识别路线上被遮挡的感知盲区,系统可以提前减速,防止鬼探头。当鬼探头出现的时候,时空联合规划可以让自动驾驶汽车不拘泥于固定的路径,可以实时计算出来一个最佳的避让轨迹,更好地保证安全性。

  • 逆行:城市道路中难免会遇到自行车电动车违规逆行场景。轻舟智航的时空联合规划技术能让自动驾驶汽车像老司机一样找到最合适的时机提前避开逆行车的路线,保证安全的同时,又能让乘客感觉像老司机驾驶一样非常舒适。它比其他算法有更好的体感。

  • 变道:时空联合算法能通过计算选择最佳变道时机,做到不依赖预设规则,就能灵活的获得最佳的变道效果。

3 总结

        在自动驾驶规划模块的最后一个环节,即轨迹优化求解是非常重要的,在量产当中也会是问题体现比较多的一个环节,因为车辆最终的表现总是集中在横向方向盘或者纵向刹车上。因此不管是大模型还是传统规控,掌握好这一节的内容对于想从事规控的读者朋友是非常有帮助的。

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

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

相关文章

龙蜥副理事长张东:加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统

AI 原生时代,操作系统厂商要全面优先拥抱 AI,深度融合 AI 能力,发挥关键生态位作用,做好上游芯片与下游 AI 应用开发商之间的纽带,打造最 AI 的服务器操作系统,实现 AI 能力的快速价值转化。 AI 原生趋势下…

详解Java之Spring MVC篇二

目录 获取Cookie/Session 理解Cookie 理解Session Cookie和Session的区别 获取Cookie 获取Session 获取Header 获取User-Agent 获取Cookie/Session 理解Cookie HTTP协议自身是“无状态”协议,但是在实际开发中,我们很多时候是需要知道请求之间的…

【金融风控】相关业务介绍及代码详解

金融风控相关业务介绍 【了解】项目整体介绍 1.风控业务和风控报表</span> 零售金融产品 相关的指标 风控建模流程 ​ #2.特征工程 特征构造 特征筛选 ​ 3.评分卡模型构建 逻辑回归 集成学习 XGBoost LightGBM 模型评估 ​ #4.样本不均衡问题/异常点检测 【了解】今日…

了解数据库设计中的反规范化

反规范化是指通过增加冗余数据来提高数据库的读取效率。也就是说,反规范化通过在表中增加冗余字段来减少数据库中的表连接,以提高查询速度。规范化和反规范化是关系型数据库设计中的两个重要方面,它们分别代表了数据组织方式上的两个不同方向。规范化是为了减少数据冗余和提…

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

JAVA基础:数组 (习题笔记)

一&#xff0c;编码题 1&#xff0c;数组查找操作&#xff1a;定义一个长度为10 的一维字符串数组&#xff0c;在每一个元素存放一个单词&#xff1b;然后运行时从命令行输入一个单词&#xff0c;程序判断数组是否包含有这个单词&#xff0c;包含这个单词就打印出“Yes”&…

通过 SSH 连接远程 Ubuntu 服务器

目录 安装 SSH 服务器允许 SSH 通过防火墙远程 SSH 连接&#xff08;选&#xff09;重启向日葵 安装 SSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server检查 SSH 服务器状态 sudo systemctl status ssh如果 SSH 服务器正在运…

http请求响应详解

http介绍 http协议&#xff1a; Http”协议称为是“超文本传输协议”&#xff08;HTTP-Hypertext transfer protocol&#xff09;。它定义了浏览器怎么向万维网服务器请求万维网文档&#xff0c;以及服务器怎么样把文档传送给浏览器。 https协议&#xff1a; 传统的HTTP协议…

使用 OpenCV 实现图像的透视变换

概述 在计算机视觉领域&#xff0c;经常需要对图像进行各种几何变换&#xff0c;如旋转、缩放和平移等。其中&#xff0c;透视变换&#xff08;Perspective Transformation&#xff09;是一种非常重要的变换方式&#xff0c;它能够模拟三维空间中的视角变化&#xff0c;例如从…

Oracle视频基础1.4.4练习

1.4.4 [dbs] 删干净上次创建的bbk ll rm -f *dbf ll rm -f spfilebbk.ora clear ll创建bbk的pfile&#xff0c;准备对应的目录 ll strings spfilewilson.ora | more strings spfilewilson.ora > initbbk.ora :%s/wilson/bbk :%s/*\.//g :wq ll vi initbbk.ora####### 创…

【spring】Cookie和Session的设置与获取(@CookieValue()和@SessionAttribute())

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;程序猿的春天 获取Cookie 使用 Servlet 获取Cookie&#xff1a; Spring MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;也是在 Servlet 的基础上实现的 RestController RequestMapping…

神经网络基础--什么是神经网络?? 常用激活函数是什么???

前言 本专栏更新神经网络的一些基础知识&#xff1b;案例代码基于pytorch&#xff1b;欢迎收藏 关注&#xff0c; 本人将会持续更新。 神经网络 1、什么是神经网络 人工神经网络&#xff08; Artificial Neural Network&#xff0c; 简写为ANN&#xff09;也简称为神经网络…

030集——分组法——C# CAD二次开发

重叠的图行进行分组&#xff0c;效果如下&#xff1a; 纵向投影重叠&#xff08;横向移动冲突&#xff09;可以分组: 纵向冲突也可以分组&#xff1a; 也可根据颜色不同分组&#xff1a; 部分代码如下&#xff0c;完整代码见文章下方名片 public class Class1{[CommandMethod(…

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发&#xff1a;图片切割插件 在图片处理领域&#xff0c;按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件&#xff0c;用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时&#xff0c;本文介绍如何使用 cursor 辅助工具来更高效…

关于圆周率

关于圆周率 大约20年前的2005年&#xff0c;我在上大学的时候&#xff0c;网上流传这样一段程序&#xff0c;被称之为“外星人计算圆周率程序”。程序如下&#xff1a; long a 10000, b, c 2800, d, e, f[2801], g; main() {for (; b - c;) f[b] a / 5; for (; d 0, g …

【docker】6. 镜像仓库/镜像概念

Docker Registry&#xff08;镜像仓库&#xff09; 什么是 Docker Registry 镜像仓库 (Docker Registry) 负责存储、管理和分发镜像&#xff0c;并且提供了登录认证能力&#xff0c;建立了仓库的索引。 镜像仓库管理多个 Repository&#xff0c; Repository 通过命名来区分。…

debian系统安装qt的时候 显示xcb相关文件缺失

如果是安装之后的问题 我们可以选择使用ldd的命令查看当前依赖的so那些文件确实 ldd /home/yinsir/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so 本人在进行打包的时候 出现则会个报错 ERROR: ldd outputLine: “libxcb-util.so.1 > not found” ERROR: for binary: “/…

怎么查看navicat的数据库密码

步骤1:打开navicat连接数据库工具&#xff0c;顶部的文件栏-导出结果-勾选导出密码-导出 步骤2&#xff1a;导出结果使用NotePad或文本打开&#xff0c;找到&#xff0c;数据库对应的的Password"995E66F64A15F6776“”的值复制下来 <Connection ConnectionName"…

清华大学提出Mini-Omni2:开源多模态模型,功能与GPT-4o媲美!

&#x1f310; 在人工智能领域&#xff0c;多模态模型的发展正如火如荼。今天&#xff0c;我们要介绍的是由清华大学提出的Mini-Omni2&#xff0c;这是一个开源的多模态语言模型&#xff0c;它在功能上与GPT-4o相媲美&#xff0c;能够理解和生成视觉、听觉和文本内容&#xff0…

webrtc前端播放器完整案例

https://download.csdn.net/download/jinhuding/89961792