自动驾驶中planning为什么要把横纵向分开优化?
在自动驾驶系统中,将 横向(Lateral)规划 和 纵向(Longitudinal)规划 分开优化是一种常见的设计范式,其核心原理在于 解耦车辆运动控制的多维复杂性,同时兼顾 计算效率 和 安全性约束。以下从原理、优势和参考文献三个方面详细解析这一设计逻辑。
一、原理:为什么需要区分横纵向?
1. 运动学解耦
自动驾驶车辆的运动可分解为两个独立维度:
- 横向运动(Lateral):控制车辆在车道内的横向位移,如车道保持、变道、转弯等,主要影响车辆的 航向角(Yaw) 和 横向位置。
- 纵向运动(Longitudinal):控制车辆的前后运动,如加速、减速、跟车距离等,主要影响车辆的 速度 和 纵向位置。
从动力学模型来看,横向和纵向的控制输入(如方向盘转角、油门/刹车)对车辆状态的影响 相对独立。解耦后,可分别设计优化目标,简化控制问题。
2. 约束分离
- 横向约束:车道边界、障碍物避让、曲率连续性等。
- 纵向约束:与前车安全距离、交通信号灯时序、速度限制等。
分离开横向和纵向优化,可以更清晰地定义约束条件,避免联合优化时的复杂耦合。
3. 计算效率
联合优化横向和纵向需要高维状态空间搜索(如同时优化位置、速度、航向角),计算复杂度呈指数级增长。分而治之的策略能显著降低计算负担,满足实时性要求。
二、优势:分开优化的核心收益
1. 算法简化
- 横向规划:通常基于 Frenet坐标系(沿车道中心线的曲线坐标系),将问题转化为横向位移的轨迹生成(如多项式曲线、样条插值)。
- 纵向规划:基于时间或距离的 速度剖面优化(如恒定加速度模型、时距图法)。
分拆后,两者可分别采用最适合的算法(如横向用样条插值,纵向用模型预测控制 MPC)。
2. 实时性保障
- 横向规划需高频更新(如应对突发障碍物变道),纵向规划需平滑的速度调整。分开优化允许两者以不同频率运行(如横向 10Hz,纵向 20Hz)。
- 典型应用:Apollo 自动驾驶框架中,横向规划基于 Lattice Planner,纵向规划基于 速度决策器。
3. 安全性增强
- 横向和纵向的安全边界可独立设定。例如:
- 横向安全距离:避免碰撞道路边缘或相邻车道车辆。
- 纵向安全距离:基于 TTC(Time-to-Collision)或 RSS(Responsibility-Sensitive Safety)模型。
- 分开优化可分别校验横向和纵向的安全性,降低联合优化的验证难度。
4. 模块化与可扩展性
- 横向和纵向模块可独立升级(如改进变道策略不影响跟车逻辑)。
- 便于多传感器融合:横向依赖车道线检测,纵向依赖前车雷达/摄像头数据。
三、典型方法与参考文献
1. 横向规划方法
-
Frenet 坐标系下的轨迹生成:
将车辆运动投影到车道中心线的切向(纵向)和法向(横向),生成横向位移的平滑轨迹。
参考文献:
Werling et al., “Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame”, IEEE IV 2010. -
Lattice Planner(栅格规划器):
在横向和纵向分别离散化状态空间,生成候选轨迹并选择最优解。
参考文献:
Montemerlo et al., “Junior: The Stanford Entry in the Urban Challenge”, Journal of Field Robotics 2008.
2. 纵向规划方法
-
模型预测控制(MPC):
基于车辆动力学模型,优化未来时域内的速度剖面。
参考文献:
Katrakazas et al., “Real-Time Motion Planning for Autonomous Urban Driving: Framework, Algorithms, and Verifications”, IEEE T-ITS 2015. -
时距图法(Time-Gap Model):
根据前车速度和距离,动态调整自身速度以维持安全时距。
参考文献:
Vahidi et al., “Predictive Cruise Control: Utilizing Upcoming Traffic Signal Information for Improving Fuel Economy and Reducing Trip Time”, IEEE T-CST 2005.
3. 横纵向协同优化
- 联合优化框架:
尽管横纵向分开优化是主流,但近年也有研究尝试联合优化(如时空联合轨迹生成)。
参考文献:
Ziegler et al., “Trajectory Planning for Bertha — A Local, Continuous Method”, IEEE IV 2014.
四、挑战与未来方向
1. 解耦优化的局限性
- 耦合场景下的次优解:如紧急避障需同时调整横向和纵向,分开优化可能导致响应延迟。
- 协调复杂性:需设计仲裁机制(如优先级策略)解决横纵向决策冲突。
2. 前沿研究方向
- 时空联合规划:在统一的时空坐标系中生成轨迹(如利用神经网络端到端优化)。
- 强化学习(RL):通过奖励函数隐式学习横纵向协同策略。
- 不确定性建模:在横纵向规划中引入概率推理(如贝叶斯网络)。
总结
自动驾驶中横纵向规划的分开优化,本质上是 通过解耦降低问题维度,从而平衡 实时性、安全性 和 计算效率。尽管存在耦合场景的局限性,但在当前技术阶段,这一策略仍是工程实践中的主流选择。未来随着算力提升和算法进步,联合优化可能逐步成为补充方案。
相关文章:
自动驾驶中planning为什么要把横纵向分开优化?
在自动驾驶系统中,将 横向(Lateral)规划 和 纵向(Longitudinal)规划 分开优化是一种常见的设计范式,其核心原理在于 解耦车辆运动控制的多维复杂性,同时兼顾 计算效率 和 安全性约束。以下从原理…...
Linux 命令大全完整版(06)
2. 系统设置命令 pwunconv 功能说明:关闭用户的投影密码。语法:pwunconv补充说明:执行 pwunconv 指令可以关闭用户投影密码,它会把密码从 shadow 文件内,重回存到 passwd 文件里。 rdate(receive date) 功能说明&a…...
第9章:LangChain结构化输出-示例2(数字提取服务)
如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。 本章主要讲述基于Lan…...

每天五分钟深度学习pytorch:使用Inception模块搭建GoogLeNet模型
本文重点 前面我们学习了Incetption模块,它的作用类似于vgg块对于VGG网络模型一样,本文我们使用Inception搭建GoogLeNet网络,如果使用卷积层开始从头开始搭建GoogleNet,那么这样看起来会很不清晰,我们使用已经封装好的Inception来搭建GoogLeNet网络 关键点 关键点在于I…...
Ubuntu - Redis 安装、远程访问
参考教程: https://blog.csdn.net/houor/article/details/126672577 https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/ 查看是否安装 redis-cli --versionUbuntu 上安装 更新: sudo apt update …...

SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当下这个高速发展的时代,网络科技正以令人惊叹的速度不断迭代更新。从 5G …...
二分查找算法的全面解析C++
一、核心原理与特性 二分查找是一种**对数时间复杂度(O(log n))**的高效搜索算法46,需满足两个前提条件: 数据存储在连续内存空间(如数组)数据按升序/降序有序排列35 算法通过折半比较缩小搜索范围: 初始化左右边界…...

深度学习(5)-卷积神经网络
我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过,当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…...
第9章:LangChain结构化输出-示例3(日期和时间提取服务)
如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。 本章主要讲述基于LangChain调用大模型如何进行结构化输出的真实…...
解决Open WebU无法显示基于OpenAI API接口的推理内容的问题
解决方案 把reasoning content的东西移到content中来 并在reasoning时,手动加上标签。具体做法是截获第三方api返回的stream,并修改其中的内容,再移交给open webUI处理。 在backend\open_webui\routers\openai.py中 找到 generate_chat_com…...

AI颠覆蛋白质工程:ProMEP零样本预测突变效应
概述 在生命科学的“造物革命”中,蛋白质工程一直面临着“试错成本”与“设计效率”的双重挑战——传统方法依赖繁复的多序列比对(MSA)或耗时的实验室筛选,如同在浩瀚的蛋白质宇宙中盲选星辰。而今日,一项发表于《Cel…...
QT闲记-状态栏,模态对话框,非模态对话框
1、创建状态栏 跟菜单栏一样,如果是继承于QMainWindow类,那么可以获取窗口的状态栏,否则就要创建一个状态栏。通过statusBar()获取窗口的状态栏。 2、添加组件 通常添加Label 来显示相关信息,当然也可以添加其他的组件。通过addWidget()添加组件 3、设置状态栏样式 …...

QQ登录测试用例报告
QQ登录测试用例思维导图 一、安全性测试用例 1. 加密传输与存储验证 测试场景:输入账号密码并提交登录请求。预期结果:账号密码通过加密传输(如HTTPS)与存储(如哈希加盐),无明文暴露。 2. 二…...
ipad连接电脑断断续续,不断弹窗的解决办法
因为ipad air 屏幕摔坏,换了一个内外屏,想用爱思检验一下屏幕真伪, 连接电脑时,断断续续,连上几秒钟然后就断开,然后又连上 然后又断开,不断地弹出信任的弹窗。 刚开始以为是数据线问题&#x…...

《FFTformer:基于频域的高效Transformer用于高质量图像去模糊》
paper:2211.12250 GitHub:kkkls/FFTformer: [CVPR 2023] Effcient Frequence Domain-based Transformer for High-Quality Image Deblurring CVPR 2023 目录 摘要 1、介绍 2、相关工作 2.1 基于深度CNN的图像去模糊方法 2.2 Transformer及其在图…...
std::call_once
std::call_once 是 C11 标准库中提供的一个线程安全的一次性调用机制,位于 <mutex> 头文件中。它用于确保在多线程环境中,某个函数(或可调用对象)仅被调用一次,无论有多少线程尝试调用它。这种机制常用于实现线程…...
网络安全研究
1.1 网络安全面临的威胁 网络安全面临的威胁呈现出多样化和复杂化的趋势,给个人、企业和国家的安全带来了严峻挑战。以下是当前网络安全面临的主要威胁: 1.1.1 数据泄露风险 数据泄露是当前网络安全的重大威胁之一。根据国家互联网应急中心发布的《20…...
【软考网工】华为交换机命令
目录 1、华为交换机命令行的三种视图2、修改交换机名称3、关闭和开启信息中心4、vlan附录: 交换机型号:S5700 1、华为交换机命令行的三种视图 <Huaweu> #用户视图。特征:尖括号、用户名。 [Huawei] #系统视图。特…...

【行业解决方案篇十八】【DeepSeek航空航天:故障诊断专家系统 】
引言:为什么说这是“航天故障终结者”? 2025年春节刚过,航天宏图突然官宣"DeepSeek已在天权智能体上线",这个搭载在卫星和空间站上的神秘系统,号称能提前48小时预判99.97%的航天器故障。这不禁让人想起年初NASA禁用DeepSeek引发的轩然大波,更让人好奇:这套系…...

输入菜单关键字,遍历匹配到 menuIds,展开 匹配节点 的所有父节点以及 匹配节点 本身,高亮 匹配节点
菜单检索,名称、地址、权限标志 等 关键字匹配、展开、高亮(全程借助 DeepSeek ) 便捷简洁的企业官网 的后台菜单管理,图示: 改造点: (1)修改 bootstrapTreeTable 的节点class命名方式为:treeg…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...