当前位置: 首页 > news >正文

自动驾驶中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 标准库中提供的一个线程安全的一次性调用机制&#xff0c;位于 <mutex> 头文件中。它用于确保在多线程环境中&#xff0c;某个函数&#xff08;或可调用对象&#xff09;仅被调用一次&#xff0c;无论有多少线程尝试调用它。这种机制常用于实现线程…...

网络安全研究

1.1 网络安全面临的威胁 网络安全面临的威胁呈现出多样化和复杂化的趋势&#xff0c;给个人、企业和国家的安全带来了严峻挑战。以下是当前网络安全面临的主要威胁&#xff1a; 1.1.1 数据泄露风险 数据泄露是当前网络安全的重大威胁之一。根据国家互联网应急中心发布的《20…...

【软考网工】华为交换机命令

目录 1、华为交换机命令行的三种视图2、修改交换机名称3、关闭和开启信息中心4、vlan附录&#xff1a; 交换机型号&#xff1a;S5700 1、华为交换机命令行的三种视图 <Huaweu> #用户视图。特征&#xff1a;尖括号、用户名。 [Huawei] #系统视图。特…...

【行业解决方案篇十八】【DeepSeek航空航天:故障诊断专家系统 】

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

输入菜单关键字,遍历匹配到 menuIds,展开 匹配节点 的所有父节点以及 匹配节点 本身,高亮 匹配节点

菜单检索&#xff0c;名称、地址、权限标志 等 关键字匹配、展开、高亮(全程借助 DeepSeek ) 便捷简洁的企业官网 的后台菜单管理&#xff0c;图示&#xff1a; 改造点&#xff1a; &#xff08;1&#xff09;修改 bootstrapTreeTable 的节点class命名方式为&#xff1a;treeg…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 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 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

GitFlow 工作模式(详解)

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

【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 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...