【动手学运动规划】5.5 基于PiecewiseJerk的路径优化方法

知我者,谓我心忧. 不知我者,谓我何求。— 佚名 黍离

🏰代码及环境配置:请参考 环境配置和代码运行!


PiecewiseJerkOptimizer是Apollo中planning模块生成Path/Speed曲线的优化方法. 基于Frenet坐标系, 生成平滑, 安全的目标曲线. 本节将讲解基于PiecewiseJerk的路径优化方法.

5.5.1 问题定义

SL坐标系下, 给定路径总长 l e n g t h length length, 我们将路径均匀的离散成 n n n个点(上图中的蓝点), 其中 Δ s = l e n g t h / n \Delta s=length/n Δs=length/n. 我们定义 3 n 3n 3n个优化变量, 每个点有3个优化变量:

  • l i l_i li:第 i i i个点的横向坐标,
  • l i ′ l_i' li:第 i i i个点的横向偏差的1阶导数, 代表横向的速度
  • l i ′ ′ l_i'' li′′:第 i i i个点的横向偏差的2阶导数, 代表横向的加速度

5.5.2 目标函数

目标函数定义如下:

m i n    c o s t = w l ∑ i = 1 n ( l i − r i ) 2 + w l ′ ∑ i = 1 n l i ′ 2 + w l ′ ′ ∑ i = 1 n l i ′ ′ 2 + w l ′ ′ ′ ∑ i = 1 n − 1 l i → i + 1 ′ ′ ′ 2 \begin{aligned} min \ \ cost=w_l \sum_{i=1}^{n} (l_i-r_i)^2+w_{l^{\prime}} \sum_{i=1}^{n} l_i^{\prime 2}+ w_{l^{\prime \prime}} \sum_{i=1}^{n} l_i^{\prime \prime 2}+w_{l^{\prime \prime \prime}} \sum_{i=1}^{n-1} l_{i \rightarrow i+1}^{\prime \prime \prime}{ }^2 \end{aligned} min  cost=wli=1n(liri)2+wli=1nli′2+wl′′i=1nli′′2+wl′′′i=1n1lii+1′′′2

  • r i r_i ri:代表第i个点的引导点的横向坐标
  • ( l i − r i ) 2 (l_i-r_i)^2 (liri)2:代表偏离引导线的惩罚
  • l i ′ 2 , l i ′ ′ 2 l_i'^2,l_i''^2 li′2,li′′2:代表横向速度和加速度的惩罚
  • l i ′ ′ ′ l_i''' li′′′:横向的3阶导数(jerk), 只计算粗糙值:二阶导数插值得到. l i ′ ′ ′ = l i + 1 ′ ′ − l i ′ ′ Δ s l_i'''=\frac{l_{i+1}''-l_{i}''}{\Delta s} li′′′=Δsli+1′′li′′
  • w l , w l ′ , w l ′ ′ , w l ′ ′ ′ w_l,w_l',w_l'',w_l''' wl,wl,wl′′,wl′′′:常数, 不同cost的权重

5.5.3 约束条件

5.5.3.1 连接约束

我们决策变量只有 l i , l i ′ , l i ′ ′ l_i,l_i',l_i'' li,li,li′′, 那么如何保证点与点之间的连接是平滑的呢?

可以利用简单的积分来约束 l i , l i ′ , l i ′ ′ l_i,l_i',l_i'' li,li,li′′ l i + 1 , l i + 1 ′ , l i + 1 ′ ′ l_{i+1},l_{i+1}',l_{i+1}'' li+1,li+1,li+1′′的关系:

l i + 1 ′ ′ = l i ′ ′ + ∫ 0 Δ s l i → i + 1 ′ ′ ′ d s = l i ′ ′ + l i → i + 1 ′ ′ ′ ∗ Δ s l i + 1 ′ = l i ′ + ∫ 0 Δ s l ′ ′ ( s ) d s = l i ′ + l i ′ ′ ∗ Δ s + 1 2 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 2 l i + 1 = l i + ∫ 0 Δ s l ′ ( s ) d s = l i + l i ′ ∗ Δ s + 1 2 ∗ l i ′ ′ ∗ Δ s 2 + 1 6 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 3 \begin{aligned}l_{i+1}^{\prime \prime} & =l_i^{\prime \prime}+\int_0^{\Delta s} l_{i \rightarrow i+1}^{\prime \prime \prime} d s=l_i^{\prime \prime}+l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s \\l_{i+1}^{\prime} & =l_i^{\prime}+\int_0^{\Delta s} l^{\prime \prime}(s) d s=l_i^{\prime}+l_i^{\prime \prime} * \Delta s+\frac{1}{2} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^2 \\l_{i+1} & =l_i+\int_0^{\Delta s} l^{\prime}(s) d s \\& =l_i+l_i^{\prime} * \Delta s+\frac{1}{2} * l_i^{\prime \prime} * \Delta s^2+\frac{1}{6} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^3\end{aligned} li+1′′li+1li+1=li′′+0Δslii+1′′′ds=li′′+lii+1′′′Δs=li+0Δsl′′(s)ds=li+li′′Δs+21lii+1′′′Δs2=li+0Δsl(s)ds=li+liΔs+21li′′Δs2+61lii+1′′′Δs3

本质上, 上面的积分就是泰勒展开式的过程:

f ( x ) = f ( a ) + f ′ ( a ) ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + f ′ ′ ′ ( a ) 3 ! ( x − a ) 3 + ⋯ + f ( n ) ( a ) n ! ( x − a ) n + ⋯ f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \frac{f'''(a)}{3!}(x-a)^3 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + \cdots f(x)=f(a)+f(a)(xa)+2!f′′(a)(xa)2+3!f′′′(a)(xa)3++n!f(n)(a)(xa)n+

泰勒展开式是一种重要的函数近似方法, 精度取决于泰勒展开的最高阶数. 如果我们用泰勒展开式近似点和点之间的曲线, 舍弃掉泰勒展开式的误差项, 可以得到3阶泰勒展开:

l i + 1 = l i + l i ′ ∗ Δ s + 1 2 l i ′ ′ ∗ Δ s 2 + 1 6 l i → i + 1 ′ ′ ′ ∗ Δ s 3 l_{i+1}=l_i+l_i^{\prime} * \Delta s+\frac{1}{2} l_i^{\prime \prime} * \Delta s^2+\frac{1}{6} l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^3 li+1=li+liΔs+21li′′Δs2+61lii+1′′′Δs3

5.5.3.2 边界约束

边界约束较为简单, 主要是

l l o w e r ≤ l i ≤ l u p p e r l m i n ′ ≤ l i ′ ≤ l m a x ′ l m i n ′ ′ ≤ l i ′ ′ ≤ l m a x ′ ′ \begin{aligned} l_{lower} \leq &l_i \leq l_{upper}\\ l_{min}' \leq &l_i' \leq l_{max}'\\ l_{min}'' \leq &l_i'' \leq l_{max}'' \end{aligned} llowerlminlmin′′lilupperlilmaxli′′lmax′′

5.5.4 完整问题

最终, 我们得到了完整的PiecewiseJerkPath优化问题, 显然这是一个QP优化问题.

m i n    w l ∑ i = 1 n ( l i − r i ) 2 + w l ′ ∑ i = 1 n l i ′ 2 + w l ′ ′ ∑ i = 1 n l i ′ ′ 2 + w l ′ ′ ′ ∑ i = 1 n − 1 l i → i + 1 ′ ′ ′ 2 s u b j e c t   t o : l l o w e r ≤ l i ≤ l u p p e r l m i n ′ ≤ l i ′ ≤ l m a x ′ l m i n ′ ′ ≤ l i ′ ′ ≤ l m a x ′ ′ l i + 1 ′ = l i ′ + l i ′ ′ ∗ Δ s + 1 2 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 2 l i + 1 = l i + l i ′ ∗ Δ s + 1 2 ∗ l i ′ ′ ∗ Δ s 2 + 1 6 ∗ l i → i + 1 ′ ′ ′ ∗ Δ s 3 \begin{aligned} min \ \ &w_l \sum_{i=1}^{n} (l_i-r_i)^2+w_{l^{\prime}} \sum_{i=1}^{n} l_i^{\prime 2}+ w_{l^{\prime \prime}} \sum_{i=1}^{n} l_i^{\prime \prime 2}+w_{l^{\prime \prime \prime}} \sum_{i=1}^{n-1} l_{i \rightarrow i+1}^{\prime \prime \prime}{ }^2 \\ subject & \ to: \\ &l_{lower} \leq l_i \leq l_{upper}\\ &l_{min}' \leq l_i' \leq l_{max}'\\ &l_{min}'' \leq l_i'' \leq l_{max}''\\ l_{i+1}^{\prime} & =l_i^{\prime}+l_i^{\prime \prime} * \Delta s+\frac{1}{2} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^2 \\l_{i+1} & =l_i+l_i^{\prime} * \Delta s+\frac{1}{2} * l_i^{\prime \prime} * \Delta s^2+\frac{1}{6} * l_{i \rightarrow i+1}^{\prime \prime \prime} * \Delta s^3 \end{aligned} min  subjectli+1li+1wli=1n(liri)2+wli=1nli′2+wl′′i=1nli′′2+wl′′′i=1n1lii+1′′′2 to:llowerlilupperlminlilmaxlmin′′li′′lmax′′=li+li′′Δs+21lii+1′′′Δs2=li+liΔs+21li′′Δs2+61lii+1′′′Δs3

参考链接:

  • Zhang, Yajia, et al. “Optimal vehicle path planning using quadratic optimization for baidu apollo open platform.” 2020 IEEE Intelligent Vehicles Symposium (IV). IEEE, 2020.

🏎️自动驾驶小白说官网:https://www.helloxiaobai.cn
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图论入门算法:拓扑排序(C++)

上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…

英国学术论文规范,学术来源的基本知识

学术来源(scholarly source),指的是在某一特定的学术研究领域由专家所写,给同行或者对此专业领域有兴趣的人所阅读,提供相关分析素材的研究成果。在国外留学中,虽然平时学校要求完成的作业多为reports&…

Java运维实战:问题定位-CPU突增排查

java程序最常见的故障场景就是CPU徒增的情况了,本片文章为你讲解java程序CPU突增的情况怎么进行排查 1、获取CPU消耗高的线程ID top -Hp 进程ID 然后输入大写P(shiftp),就会将这个进程下的线程按照CPU消耗进行排序展示。 举例 然…

使用 Ansys MotorCAD 进行轴向磁通电机设计

新的 MotorCAD 机器拓扑:轴向磁通电机 轴向磁通量可用拓扑 Ansys MotorCAD支持3种不同的轴向磁通拓扑,包括(双转子 - 单定子)、(单转子 - 单定子)和(单转子 - 双定子) 双转子 - 单…

【深度学习】深度学习和强化学习算法——深度 Q 网络DQN

深度 Q 网络(Deep Q-Network, DQN) 详解 什么是DQNDQN 的背景DQN 训练流程 2 DQN 的核心思想2.1 经验回放(Experience Replay)2.2 目标网络(Target Network)2.3 ε-贪心策略(ε-Greedy Policy&a…

学习数据结构(10)栈和队列下+二叉树(堆)上

1.关于栈和队列的算法题 (1)用队列实现栈 解法一:(参考代码) 题目要求实现六个函数,分别是栈初始化,入栈,移除并返回栈顶元素,返回栈顶元素,判空&#xff0…

芯片引脚描述或电路原理图中的Ipd、Ipu是什么意思?

问:物理层芯片KSZ8081RNB的Data Sheet对某些引脚类型的说明如下: 请说明其中Ipd、Ipu的意思是什么? 答: I:表示该引脚是一个 输入引脚,即该引脚用于接收信号。O:表示该引脚是一个 输出引脚&a…

[操作系统] 基础IO:系统文件I/O

在 Linux 操作系统中,文件 I/O(输入/输出)是程序与文件系统交互的基础。理解文件 I/O 的工作原理对于编写高效、可靠的程序至关重要。本文将深入探讨系统文件 I/O 的机制。 一种传递标志位的方法 在 Linux 中,文件的打开操作通常…

Mybatis-扩展功能

逻辑删除乐观锁 MyBatisPlus从入门到精通-3(含mp代码生成器) Db静态工具类 Spring依赖循环问题 代码生成器 MybatisPlus代码生成器 枚举处理器 我们这里用int来存储状态 需要注解,很不灵活 希望用枚举类来代替这个Integer 这样的话我…

ECharts 实战指南:组件封装+地图轮廓高亮 + 自定义 Tooltip+轮播+锥形柱子

大家好,我是一诺。今天我们将深入探讨 ECharts,这个功能强大的数据可视化库。 无论你是已经在使用 ECharts,还是正计划用它来创建一些炫酷的图表,这篇文章都会对你有所帮助。 我们将从渲染模式开始,逐步深入到如何封…

【MyBatis】_使用XML实现MyBatis

目录 1. 配置yml配置文件 1.2 配置数据库 1.3 配置xml的路径 2. xml文件中实现数据库的增删查改操作 2.1 各文件内容 2.2 编写细节 MyBatis作为一个持久层框架,用于进行数据库操作。 MyBatis的实现方式有两种:(1)注解&…

单链表的概念,结构和优缺点

1. 概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 2. 单链表的结构 单链表是由一系列节点组成的线性结构,每个结点包含两个域。:数据域和指针域。 数据域用来…

PerfMonitor高效处理器性能监控与分析利器

在追求极致电脑性能的道路上,一款精准、高效的处理器性能监控工具无疑是每位DIY爱好者和系统管理员的必备之选。今天,我们为大家带来的是CPUID出品的PerfMonitor 2,这款绿色小巧的软件以其强大的功能和直观的界面设计,赢得了广大用…

【C++】基础入门(详解)

🌟 Hello,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 目录 输入&输出 缺省参数(默认参数) 函数重载 引用 概念及定义 特性及使用 const引用 与指针的关系 内联inline和nullptr in…

数据恢复-02-故障硬盘的检测

任务描述 客户报修一故障硬盘,据客户描述,由于自己所用的台式机硬盘容量过小因而想更换一块大容量硬盘。但是在拆卸的过程中不慎将硬盘滑落在地,尝试对电脑进行开机,发现无法正常进入操作系统,故判断可能是硬盘故障导…

04性能监控与调优篇(D5_JVM优化)

目录 一、我们为什么要对jvm做优化? 二、jvm的运行参数 1. 三种参数类型 1.1. 标准 1> 参数介绍 2> 实战 3> -server与-client参数 1.2. -X参数 1> 参数介绍 2> -Xint、-Xcomp、-Xmixed 1.3. -XX参数 -Xms与-Xmx参数 2. 查看jvm的运行参…

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…

嵌入式软件、系统、RTOS(高软23)

系列文章目录 4.2嵌入式软件、系统、RTOS 文章目录 系列文章目录前言一、嵌入式软件二、嵌入式系统三、嵌入式系统分类四、真题总结 前言 本节讲明嵌入式相关知识,包括软件、系统。 一、嵌入式软件 二、嵌入式系统 三、嵌入式系统分类 四、真题 总结 就是高软笔记…

spring 学习 (注解)

目录 前言 常用的注解 须知 1 Conponent注解 demo(案例) 2 ControllerServiceRepository demo(案例) 3 ScopeLazyPostConstructPreDestroy demo(案例) 4 ValueAutowiredQualifierResource demo(案例) 5 Co…

C语言中qsort函数使用技巧

在C语言的标准库中, qsort 函数是一个强大的通用排序函数,它采用快速排序算法,能够高效地对各种数据类型的数组进行排序。掌握 qsort 函数的使用技巧,对于提升程序的效率和代码的简洁性至关重要。 一、qsort函数基本介绍 qsort 函…