自动驾驶---Motion Planning之轨迹Path优化

1 背景

        在之前的几篇文章中,不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》,ST图《自动驾驶---Motion Planning之Speed Boundary》,又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》,最终我们都是为了得到boundary的信息。

        构造优化问题求解的前提:首先确定问题的代价函数,有初值,有边界(约束),然后进行求解。笔者会先阐述Apollo中轨迹横纵向优化的问题,接下来会在后面的博客中继续讲解STSC中的轨迹优化问题。

2 轨迹横向优化

        总体流程图以车道保持场景为例子进行说明。task的主要功能位于Process()函数中。规划模块的运动总体流程图如下:

82a3236d32ca47acafb65bb3bb7696d6.png

         首先有一点值得注意:在Apollo中,横纵向的优化求解是解耦开的,因此在横纵向分别需要求解一次,最终得到得到横纵向的轨迹信息(s,s',s'',l,l',l'')------这里的 eq?l%27 是 eq?l 关于 eq?s 的一阶导数, eq?s%27 是 eq?s 关于 eq?t 的一阶导数

        整体轨迹优化器的代码位于/apollo/modules/planning/tasks/optimizers。

d451c6f850db404eb37cd7dbb5272ee6.png

        见到下图,看过笔者之前的博客《自动驾驶---Motion Planning之参考线Path平滑》就非常熟悉了,之前在参考线平滑中详细讲解了这部分的内容。

030457801c22443f9511740e8bd483ec.png

        但是这次与参考线平滑不同的是:代价函数的定义。本篇博客主要讲解横向Path的优化过程,在下一篇为读者讲解纵向Speed的优化过程。

二次规划问题的形式:

eq?min%28%5Ccfrac%7B1%7D%7B2%7Dx%5ETHx+g%5ETx%29%20%5C%5C%20%5C%5C%20s.t.%20a_i%5ETx%20%3D%20b_i%2C%20i%5Cin%7BE%7D%20%5C%5C%20h_j%5ETx%5Cle%7Bt_j%7D%2C%20j%5Cin%7BI%7D

        其中eq?H是由二阶导构成的Hessian矩阵,eq?g%5ET是由梯度构成的Jacobi矩阵;然后包括m个等式约束集合和n个不等约束集合。

        Path优化问题的自变量为:eq?x%3D%5Bl_0%2Cl_1...l_%7Bn-1%7D%2Cl%27_0%2Cl%27_1%2Cl%27_2...l%27_%7Bn-1%7D%2Cl%27%27_0%2Cl%27%27_1...l%27%27_%7Bn-1%7D%5D

2.1.1 优化目标

        优化目标中主要考虑了:1)横向位移 ;2)横向速度;3)横向加速度;4)横向Jerk;5)障碍物的距离。

d2140fb606d643a48fbdad637bddbe08.png

 (注意:论文这里的代价函数与Apollo源码中有些差异,源码中没有考虑障碍物,而是增加了更接近参考点的代价以及终点的代价)

 %5CDelta%20s%29%5E2+w_%7Blend%7D%28l_%7Bn-1%7D-%20l_%7Bendl%7D%29%5C%5C%5C%5C+w_%7Bl%27end%7D%28l%27_%7Bn-1%7D-l%27_%7Bendl%7D%29+w_%7Bl%27%27end%7D%28l%27%27_%7Bn-1%7D-l%27%27_%7Bendl%7D%29

        这里提到了一个概念:分段加加速度。为了有效地制定优化问题并在实践中评估约束满意度,论文中根据空间参数 eq?s 将路径函数 eq?l%28s%29 离散到一定的分辨率 eq?%5CDelta%20s,并使用这些离散点来控制路径的形状,并近似地评估约束满意度。关键思想是将一维函数离散到二阶导数,并使用常数的三阶导数项来“连接”连续的离散点。位置变量的三阶

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

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

相关文章

OpenCV实战:智能人脸识别打卡系统

1、介绍 目前,很多公司对员工的考勤同时通过打卡机或者钉钉之类的打卡软件,传统的员工打卡方式有很多,例如点名、签字、刷卡、指纹等等 然而随机机器视觉、计算机视觉的不断发展,算力的不断提升,人工智能对人脸检测的…

如何用联合(共用体)union验证系统大小端

一:思路 由联合体的特点,可知上图,char c 和 int i 共用四个字节,假设是小端,则由左到右是低地址到高地址,四个字节的内容如图所示01 00 00 00 代码展示: 如果第一个字节是1,则证明…

<Linux> 线程池

目录 前言: 一、线程池概念 (一)池化技术 (二)优点 (三)应用场景 二、线程池的实现 (一)线程池_V1(朴素版) (二)线…

Nginx发布之后可以使用IP访问,不能使用localhost访问, Nginx发布之后可以使用localhost访问,不能使用IP访问,

如标题所说 Nginx发布之后可以使用IP访问,不能使用localhost访问, Nginx发布之后可以使用localhost访问,不能使用IP访问, 修改配置文件也没有用 清除浏览器缓存数据

配置DHCPV6

组网需求 如果大量的企业用户IPv6地址都是手动配置,那么网络管理员工作量大,而且可管理性很差。管理员希望实现公司用户IPv6地址和网络配置参数的自动获取,便于统一管理,实现IPv6的层次布局。 图1 DHCPv6服务器组网图 配置思路 …

自动化改变金融科技文档生命周期

金融科技公司可能处于软件开发的最前沿,但即使是最先进的系统也必须能够支持金融服务领域采用的一系列文档密集型程序。因此,绝大多数金融科技企业都使用数字文档管理解决方案,无论是内部构建的还是由第三方供应商开发的。金融科技公司可以通…

UI自动化测试面试题小结

列举web自动化中常见的元素定位方式? id:根据id来获取元素,返回单个元素,id值一般是唯一的; name:根据元素的name属性定位; tagName:根据元素的标签名定位; className…

深入理解XML技术(看这一篇就够了)

目录: XMLXML的功能XML基本语法XML组成部分约束DTD约束Schema约束 Jsoup解析器DOMSAXXML常见解析器DOM4JJsoupXPath解析 XML 概念 XML(Extensible Markup Language):可扩展标记语言 可扩展:标签都是自定义的。 发展历…

[ C++ ] STL---仿函数与priority_queue

目录 仿函数 示例一: 示例二 : 常见的仿函数 priority_queue简介 priority_queue的常用接口 priority_queue的模拟实现 基础接口 push() 堆的向上调整算法 堆的插入 pop() 堆的向下调整算法 堆的删除 priority_queue最终实现 仿函数 仿函数&#xff…

MusicHiFi: Fast High-Fidelity Stereo Vocoding

MusicHiFi: Fast High-Fidelity Stereo Vocoding 相关链接:arxiv github 关键字:音乐生成、高保真立体声、立体声编解码器、生成对抗网络、频带扩展 摘要 MusicHiFi是一种高效的高保真立体声编解码器,它通过将低分辨率的mel频谱图转换为音频…

【Vue】Vue集成Element-UI框架

🙋‍ 一日之际在于晨 ⭐本期内容:Vue集成Element-UI框架 🏆系列专栏:从0开始的Vue之旅 文章目录 Element-UI简介安装Element-UInpm安装CDN安装 引入Element-UI测试是否引入成功总结 Element-UI简介 Element-UI官网:点…

极大提高工作效率的 Linux 命令

作为一名软件开发人员,掌握 Linux 命令是必不可少的技能。即使你使用 Windows 或 macOS,你总会遇到需要使用 Linux 命令的场合。例如,大多数 Docker 镜像都基于 Linux 系统。要进行 DevOps 工作,你需要熟悉Linux,至少要…

vue-quill-editor和vue-ueditor-wrap富文本编辑器应用

目录 一、vue-quill-editor 1.1、界面展示 1.2、代码介绍 1.2.1、安装 1.2.2、配置 1.2.3、代码应用 1.2.4、提取内容 二、vue-ueditor-wrap 2.1、界面展示 2.2、代码介绍 2.2.1、安装 2.2.2、配置 2.2.3、代码应用 一、vue-quill-editor 1.1、界面展示 文本输出…

Vue响应式原理全解析

前言 大家好,我是程序员蒿里行。浅浅记录一下面试中的高频问题,请你谈一下Vue响应式原理。 必备前置知识,​​Vue2​​官方文档中​​深入响应式原理​​​及​​Vue3​​官方文档中​​深入响应式系统​​。 什么是响应式 响应式本质是当…

liunx CentOS7 搭建lnmp环境 php nginx mysql

安装一些刚需软件:不懂请自行查询 安装一些需要的软件命令 yum install wget vim net-tools bash* lrzsz tree nmapnc lsof telnet -y 刷新命令 source /usr/share/bash-completion/bash_completion echo source /usr/share/bash-completion/bash_completion &…

UE5 C++ 3D血条 响应人物受伤 案例

一.3Dwidget 1.创建C Userwidget的 MyHealthWidget,声明当前血量和最大血量 UCLASS() class PRACTICEC_API UMyHealthWidget : public UUserWidget {GENERATED_BODY() public:UPROPERTY(EditAnywhere,BlueprintReadWrite,Category "MyWidget")float C…

利用API打造卓越的用户体验

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 正文 1. 数据驱动的设计 2. 功能扩展与整合 3. 实时性与响应性 4. 个性化推荐与定制化服务 结语 我的其他博客 正文 随着数字化时代的…

npm i安装依赖报错,但是cnpm i 却安装成功

问题描述:在a项目中npm i 安装依赖时发生以上报错,但是cnpm i 却成功,而且在其他项目中npm i 安装其他项目依赖也能成功.... 解决办法:删除项目中package-lock.json文件后再npm i 即可

搭建Linux内核开发环境——保姆教程(持续更新中)

搭建Linux内核开发环境——保姆教程(持续更新中) git版本管理汇编器链接器调试器编辑器构建系统模拟器文档工具图形设计工具 在此文中,持续完善,搭建内核开发环境的细节,有需要的小伙伴儿可以持续关注下 git版本管理 …

Ruby选择结构实战

文章目录 一、Ruby选择结构实战概述二、Ruby选择结构实战案例(一)闰年判断1、编写程序,实现功能2、程序的解释说明3、运行程序,查看结果 (二)求解一元二次方程1、编写程序,实现功能2、程序的解释…