【自动驾驶】决策规划算法 | 数学基础(一)五次多项式详解

news2024/9/26 21:55:18

写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。

🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。

👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花

📚 系列专栏:【决策规划】系列,带您深入浅出,领略规划之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!

🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~


文章目录

  • 引言
  • 一、五次多项式在自动驾驶轨迹规划中的应用
    • 1、跃度的定义与舒适性的关系
    • 2、二次函数与Jerk最小化的关系
    • 3、边界约束条件
    • 4、泛函极值问题的引入
  • 二、求解带约束的泛函极值问题——五次多项式推导
    • 1、有界连续函数的选择
    • 2、边界条件对跃度的影响
    • 3、泛函极值问题的欧拉-拉格朗日方程
    • 4、广义欧拉-拉格朗日方程
  • 三、总结
  • 参考资料


引言

  各位小伙伴们大家好,本篇博客是自动驾驶决策规划算法数学基础的第一节,内容整理自 B站知名up主 忠厚老实的老王 的视频,作为博主的学习笔记,分享给大家共同学习。

  本篇博客讲解五次多项式,五次多项式是规划论文里的常客,本节将详细解释五次多项式的特殊性。

  本节难度较大,但不是特别重要,所以如果不理解的话,记住结论就可以了。


一、五次多项式在自动驾驶轨迹规划中的应用

1、跃度的定义与舒适性的关系

  在车辆的运动规划中,非常重要的指标就是舒适性,衡量舒适性的物理量叫 跃度(Jerk)jerk 的定义是
J e r k = d a d t Jerk=\frac{da}{dt} Jerk=dtda  其中, a a a 为加速度,也就是说 *Jerk * 其实是加速度的导数, *Jerk * 的绝对值越小, a a a 的变化越平缓,也就意味着越舒适。

  设有质点的轨迹 s = f ( t ) s=f(t) s=f(t),则 J e r k = d 3 f d t 3 Jerk=\frac{d^{3}f}{dt^{3}} Jerk=dt3d3f,如果在 [ 0 , T ] [0,T] [0,T] 的时间内, Jerk 的绝对值都比较小,意味着在整个 [ 0 , T ] [0,T] [0,T] 曲线内,规划的轨迹比较舒适。

  数学问题变成如果有函数 s = f ( t ) s=f(t) s=f(t),什么样的 f ( t ) f(t) f(t) 会使得在 [ 0 , T ] [0,T] [0,T] 时间内的 Jerk 的绝对值变化平缓。绝对值的处理比较烦,一般改成平方,则问题变为要找到 f ( t ) f(t) f(t),使得 m i n ∫ 0 T ( d 3 f d t 3 ) 2 d t min\int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt min0T(dt3d3f)2dt显然积分 ∫ 0 T ( d 3 f d t 3 ) 2 d t \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt 0T(dt3d3f)2dt 是关于 f ( t ) f(t) f(t) 的泛函,积分值取决于 f ( t ) f(t) f(t) [ 0 , T ] [0,T] [0,T] 上的整体形状。

2、二次函数与Jerk最小化的关系

使积分 ∫ 0 T ( d 3 f d t 3 ) 2 d t \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt 0T(dt3d3f)2dt取极小值的 f ( t ) f(t) f(t) 是什么?

  注意 f ( t ) f(t) f(t) 的定义域和值域都应该是实数,不能有虚数,因为 s = f ( t ) s=f(t) s=f(t) t t t s s s 都是真实空间中的时间和轨迹坐标,都是实数。

  因为平方的最小值就是 0 0 0,只要让其三阶导数为 0 0 0 就行,显然只要 f ( t ) f(t) f(t) 是二次或二次以下的函数即可。显然当 f ( t ) f(t) f(t) 是二次或者是二次以下的函数时, ∫ 0 T ( d 3 f d t 3 ) 2 d t = 0 \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt=0 0T(dt3d3f)2dt=0 自然就是最小。

  所以要让 Jerk [ 0 , T ] [0,T] [0,T] 上的绝对值最小, f ( t ) f(t) f(t) 应取二次或者二次以下的函数。

3、边界约束条件

  但是真实情况远比想象中的要复杂得多,因为真实的 s = f ( t ) s=f(t) s=f(t),往往存在约束条件:
s ( 0 ) = s 0 s ( T ) = s n s ( 0 ) = v 0 s ( T ) = v n s ( 0 ) = a 0 s ( T ) = a n \begin{matrix} s\left( 0 \right) =s_0& s\left( T \right) =s_n\\ s\left( 0 \right) =v_0& s\left( T \right) =v_n\\ s\left( 0 \right) =a_0& s\left( T \right) =a_n\\ \end{matrix} s(0)=s0s(0)=v0s(0)=a0s(T)=sns(T)=vns(T)=an  有六个边界条件,但二次函数 y = a x 2 + b x + c y=ax^2+bx+c y=ax2+bx+c 只有三个系数 a 、 b 、 c a 、b、 c abc ,没有办法满足六个边界条件,所以在这种情况下,往往需要求带边界约束条件的函数最值问题。

4、泛函极值问题的引入

  数学问题变成了找到这样的 f ( t ) f(t) f(t),使得 ∫ 0 T ( d 3 f d t 3 ) 2 d t = 0 \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt=0 0T(dt3d3f)2dt=0 最小,但是有上述六个边界条件。

满足带约束的泛函 ∫ 0 T ( d 3 f d t 3 ) 2 d t \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt 0T(dt3d3f)2dt 极值问题的解是什么呢?

  问题的答案就是 五次多项式,所以五次多项式在规划中具有非常特殊的地位,可以在任何有关规划的论文里看到它的身影。


二、求解带约束的泛函极值问题——五次多项式推导

1、有界连续函数的选择

  下面具体讲解泛函极值问题,显然让泛函取极小值的解 f ( t ) f(t) f(t) 只可能是 [ 0 , T ] [0,T] [0,T] 上的有界连续函数。因为无论是无界函数还是有界间断函数,都会使 jerk 出现无穷大,显然无穷大不能让 Jerk 取最小值。如果是有界连续函数,不妨将 s = f ( t ) s=f(t) s=f(t) 泰勒展开到二阶项:
s = f ( t ) = f ( 0 ) + f ˙ ( 0 ) ⋅ t + f ¨ ( 0 ) 2 t 2 + . . . s=f\left( t \right) =f\left( 0 \right) +\dot{f}\left( 0 \right) \cdot t+\frac{\ddot{f}\left( 0 \right)}{2}t^2+... s=f(t)=f(0)+f˙(0)t+2f¨(0)t2+...  代入边界条件:
s ( 0 ) = s 0 ⇒ f ( 0 ) + f ˙ ( 0 ) ⋅ 0 + . . . = s ( 0 ) ⇒ f ( 0 ) = s 0 \begin{aligned} s\left( 0 \right) =s_0 &\Rightarrow f\left( 0 \right) +\dot{f}\left( 0 \right) \cdot 0+...=s\left( 0 \right)\\ &\Rightarrow f\left( 0 \right) =s_0\\ \end{aligned} s(0)=s0f(0)+f˙(0)0+...=s(0)f(0)=s0 s ˙ ( 0 ) = v 0 ⇒ f ˙ ( 0 ) = v 0 \dot{s}(0)=v_0\Rightarrow\dot{f}(0)=v_0 s˙(0)=v0f˙(0)=v0 s ¨ ( 0 ) = a 0 ⇒ f ¨ ( 0 ) = a 0 \ddot{s}(0)=a_0\Rightarrow\ddot{f}(0)=a_0 s¨(0)=a0f¨(0)=a0  最终可得到:
在这里插入图片描述

2、边界条件对跃度的影响

  因为 Jerk 它是 f ( t ) f(t) f(t) 的三阶导数。所以 s 0 s_0 s0 v 0 v_0 v0 a 0 a_0 a0 的值并不影响 Jerk,因为 s 0 s_0 s0 v 0 v_0 v0 a 0 a_0 a0 最多就影响到二次项。

  将六个边界条件恒等变形:
s ( 0 ) = s 0      s ( T ) − s ( 0 ) = s n − s 0 s ˙ ( 0 ) = v 0      s ˙ ( T ) − s ˙ ( 0 ) = v n − v 0 s ¨ ( 0 ) = a 0      s ¨ ( T ) − s ¨ ( 0 ) = a n − a 0 \begin{aligned} s\left( 0 \right) &=s_0\ \ \ \ s\left( T \right) -s\left( 0 \right) =s_n-s_0\\ \dot{s}\left( 0 \right) &=v_0\ \ \ \ \dot{s}\left( T \right) -\dot{s}\left( 0 \right) =v_n-v_0\\ \ddot{s}\left( 0 \right) &=a_0\ \ \ \ \ddot{s}\left( T \right) -\ddot{s}\left( 0 \right) =a_n-a_0\\ \end{aligned} s(0)s˙(0)s¨(0)=s0    s(T)s(0)=sns0=v0    s˙(T)s˙(0)=vnv0=a0    s¨(T)s¨(0)=ana0  又因为 s 0 s_0 s0 v 0 v_0 v0 a 0 a_0 a0 不影响 Jerk 所以前面的三个条件可以去掉,约束了就变成:
s ( T ) − s ( 0 ) = s n − s 0 s ˙ ( T ) − s ˙ ( 0 ) = v n − v 0 s ¨ ( T ) − s ¨ ( 0 ) = a n − a 0 \begin{aligned} s\left( T \right) -s\left( 0 \right) =s_n-s_0\\ \dot{s}\left( T \right) -\dot{s}\left( 0 \right) =v_n-v_0\\ \ddot{s}\left( T \right) -\ddot{s}\left( 0 \right) =a_n-a_0\\ \end{aligned} s(T)s(0)=sns0s˙(T)s˙(0)=vnv0s¨(T)s¨(0)=ana0  记 s n − s 0 = c 0 , v n − v 0 = c 1 , a n − a 0 = c 2 s_n-s_0=c_0,v_n-v_0=c_1,a_n-a_0=c_2 sns0=c0vnv0=c1ana0=c2,则有
在这里插入图片描述
  所以最终数学问题就变成了求 ∫ 0 T ( d 3 f d t 3 ) 2 d t \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt 0T(dt3d3f)2dt 在约束条件:

在这里插入图片描述
  下取极小值的 f ( t ) f(t) f(t)

3、泛函极值问题的欧拉-拉格朗日方程

  泛函极值的必要条件是 欧拉-拉格朗日方程(Euler- Lagrange)

  使泛函 ∫ 0 T L ( f , f ˙ ) d t \int_0^TL(f,\dot{f})dt 0TL(f,f˙)dt 取极小值的 f f f,满足 E-L 方程:
∂ L ∂ f − d d t ( ∂ L ∂ f ) = 0 \frac{\partial L}{\partial f}-\frac{d}{dt}(\frac{\partial L}{\partial f})=0 fLdtd(fL)=0  用欧拉-拉格朗日方程计算泛函的极值,泛函是 ∫ 0 T ( d 3 f d t 3 ) 2 d t \int_{0}^{T}(\frac{d^{3}f}{dt^{3}})^{2}dt 0T(dt3d3f)2dt,有三个约束条件:

在这里插入图片描述
  先用拉格朗乘子把带约束的泛函化为无约束的泛函:

在这里插入图片描述
其中, L = L ( f , f ¨ , d 3 f d t 3 ) L=L\left( f,\ddot{f},\frac{d^3f}{dt^3} \right) L=L(f,f¨,dt3d3f)

4、广义欧拉-拉格朗日方程

  这样就把带约束的泛函化为了无约束泛函,但无约束的泛函和 f ˙ 、 f ¨ \dot f、\ddot f f˙f¨ f f f三阶导 都有关。所以不能直接用上面只能处理一阶导数的欧拉-拉格朗日方程,得用广义欧拉-拉格朗日方程:

在这里插入图片描述
  先算一下 L L L f f f 各阶导数的偏导:
在这里插入图片描述

  代入 E-L 方程,可得到:
在这里插入图片描述

  对六次导数积分:
f ( 5 ) ( t ) = a 0 f ( 4 ) ( t ) = a 0 t + a 1 f ( 3 ) ( t ) = 1 2 a 0 t 2 + a 1 t + a 2 f ( 2 ) ( t ) = 1 6 a 0 t 3 + 1 2 a 1 t 2 + a 2 t + a 3 f ( 1 ) ( t ) = 1 24 a 0 t 4 + 1 6 a 1 t 3 + 1 2 a 2 t 2 + a 3 t + a 4 \begin{aligned} f^{\left( 5 \right)}\left( t \right) &=a_0\\ f^{\left( 4 \right)}\left( t \right) &=a_0t+a_1\\ f^{\left( 3 \right)}\left( t \right) &=\frac{1}{2}a_0t^2+a_1t+a_2\\ f^{\left( 2 \right)}\left( t \right) &=\frac{1}{6}a_0t^3+\frac{1}{2}a_1t^2+a_2t+a_3\\ f^{\left( 1 \right)}\left( t \right) &=\frac{1}{24}a_0t^4+\frac{1}{6}a_1t^3+\frac{1}{2}a_2t^2+a_3t+a_4\\ \end{aligned} f(5)(t)f(4)(t)f(3)(t)f(2)(t)f(1)(t)=a0=a0t+a1=21a0t2+a1t+a2=61a0t3+21a1t2+a2t+a3=241a0t4+61a1t3+21a2t2+a3t+a4  最终得到五次多项式 f ( t ) f(t) f(t)
f ( t ) = 1 120 a 0 t 5 + 1 24 a 1 t 4 + 1 6 a 2 t 3 + 1 2 a 3 t 2 + a 4 t + a 5 f\left( t \right) =\frac{1}{120}a_0t^5+\frac{1}{24}a_1t^4+\frac{1}{6}a_2t^3+\frac{1}{2}a_3t^2+a_4t+a_5 f(t)=1201a0t5+241a1t4+61a2t3+21a3t2+a4t+a5


三、总结

  五次多项式是带约束的 Jerk 的平方在整个区间内取极小值的最优解。所以五次多项式在规划中特别常见,在某些论文上经常看到,比如两个离散点的轨迹点怎么连接?一般都是用五次多项式连接。

  本篇博客到此结束,下一讲再见,欢迎关注!


参考资料

  自动驾驶决策规划算法第一章第一节 细说五次多项式


后记:

🌟 感谢您耐心阅读这篇关于 五次多项式详解 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀

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

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

相关文章

Mysql系列—3.体系架构

目录 Mysql体系结构 Connectors: 连接池和线程管理: SQL Interface: Parser(查询解析器): Optimizer(优化器): Caches(缓存): …

Clickhouse集群化(四)使用clickhouse-operator部署clickhouse集群

clickhouse operator实际下就是帮助我们自动化的生产一些clickhouse配置文件信息,在目录/etc/clickhouse-server/的config.d conf.d users.d 1.1. 部署clickhouse operateor 下载clickhouse-operator.yaml文件 wget https://raw.githubusercontent.com/Altinity/…

Vue3 前端导出Excel表格 Xlsx格式

介绍 xlsx 是一个用于处理 Excel 文件的流行库。可以你读取、生成和操作 Excel 文件(.xlsx 格式),提供了强大的功能来处理工作表和单元格数据。可以轻松地将 JSON 数据转换为 Excel 表格,也可以从 Excel 文件中读取数据。 安装 …

【Linux篇】网络请求和下载与端口

目录 1. 网络请求和下载 1.1 ping命令 1.2 wget命令 1.3 curl命令 2. 端口 2.1 查看端口占用 使用nmap命令,安装nmap:yum -y install nmap 可以通过netstat命令,查看指定端口的占用情况。 3. 进程管理 3.1 进程 3.2 查看进程 3.3 …

Llama 4B剪枝蒸馏实战

大型语言模型 (LLM) 因其有效性和多功能性,如今已成为自然语言处理和理解领域的主导力量。LLM(例如 Llama 3.1 405B 和 NVIDIA Nemotron-4 340B)在许多具有挑战性的任务中表现出色,包括编码、推理和数学。然而,它们的部…

异步编程之std::future(二): std::future和std::promise原理

目录 1.引言 2.源码分析 2.1.std::promise的源码实现 2.2.std::future的源码实现 2.3.关联状态对象的代码实现 3.整个类图 4.future和promise之间的并发安全和线程同步 5.总结 1.引言 异步编程之std::future(一): 使用-CSDN博客 在std::future(一)中详…

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range 环境 linux diffusers 0.30.0问题详情 报错详情 from diffusers import KolorsPipelineTraceback (most recent call last):File "Kolors/demo.py", line 6, in <module>pi…

Vue(2)——Vue指令

目录 v-html v-show和v-if v-else和v-else-if v-on v-bind v-for v-model v-html 设置元素的innerHTML <body><div id"app"><div v-html"msg"></div></div><script src"https://cdn.jsdelivr.net/npm/vue2.…

大模型从入门到精通——基于智谱AI和LangChain实现RAG应用(一)

基于智谱AI和LangChain实现RAG应用(一) 1. 使用 LangChain 调用智谱 GLM 1.1 自定义chatglm #!/usr/bin/env python # -*- encoding: utf-8 -*-from typing import Any, List, Mapping, Optional, Dict from langchain_core.callbacks.manager import CallbackManagerForLLM…

统一身份认证服务(CAS)系统实现SSO认识

一、前言 CAS&#xff08;Central Authentication Service&#xff09;即中央认证服务&#xff0c;是 Yale 大学发起的一个企业级开源项目&#xff0c;旨在为 Web 应用系统提供一种可靠的 SSO 解决方案&#xff0c;它是一个企业级的开源单点认证登录解决方案&#xff0c;采用ja…

netty编程之UDP

写在前面 源码 。 UDP&#xff0c;user datagram protocol,是internet协议簇中无连接的传输协议&#xff0c;因为无连接所以相比于TCP需要维护更少的信息以及网络交互&#xff0c;所以具有更高的效率。本文看下netty是如何实现的&#xff0c;和TCP方式差别不大&#xff0c;下面…

【宝马中国-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Java使用EasyExcel导出图片(原比例大小)到Excel中

EasyExcel导出图片 又开始写Excel导出的需求了&#xff0c;哈哈哈…… 目前的需求是将图表分析对的饼图和折线图&#xff0c;也就是一张完整的图片单独导出到Excel中 为了方便客户在业务报告时&#xff0c;可以使用数据分析图片&#xff0c;从而更清晰准确地展示数据趋势 因…

【C++学习笔记】数据类型与运算符(一)

目录 一、常量与变量 1.1 常量 字面常量 符号常量 1.2 变量 1.3 标识符命名规范 二、数据类型 2.1 整型 2.2 实型&#xff08;浮点型&#xff09; 2.3 字符型 2.4 字符串 2.5 布尔型 三、cin控制台输入 3.1 输入代码 3.2 解决输入中文乱码 四、运算符 4.1 算术…

OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数对数组应用自适应阈值。 该函数根据以下公式将灰度图像转换为二值图像&#xff1a; 对于 THRESH_BINARY: t e x t d s t ( x , y ) { maxV…

# NLP-transformer学习:(5)Bert 实战

NLP-transformer学习&#xff1a;&#xff08;5&#xff09;模型训练和预测 基于 NLP-transformer学习&#xff1a;&#xff08;2,3,4&#xff09;&#xff0c;这里对transformer 更近一步&#xff0c;学习尝试使用其中的bert 文章目录 NLP-transformer学习&#xff1a;&#x…

在 Debian 上安装 IntelliJ IDEA 笔记

在 Debian&#x1f4a9; 上安装 IntelliJ IDEA &#x1f4a1; 笔记 下载安装 JDK17安装 IntelliJ IDEA Community添加创建桌面启动项&#xff08;快捷方式&#xff09; 参考资料 下载 两个包已经下好了&#xff0c;一个JDK17&#xff0c;一个IntelliJ IDEA Community 使用 wge…

【Liunx入门】Liunx软件包管理器

文章目录 前言一、什么是软件包二、网络相关指令三、Ubuntu包管理软件apt1.查看软件包2.sudo权限3.软件安装4.卸载软件5.软件更新6.升级软件包 总结 前言 Linux软件包管理器是Linux系统中用于安装、升级和卸载软件包的工具。它们提供了一个方便的方式来管理软件包&#xff0c;…

c++习题25-大整数加法

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 求两个不超过200位的非负整数的和。 输入 有两行&#xff0c;每行是一个不超过200位的非负整数&#xff0c;可能有多余的前导0。 输出 一行&#xff0c;即相加后的结果。结果里不…

Physics of Language Models学习小结

1.概述 Physics of Language Models 参考&#xff1a;https://zhuanlan.zhihu.com/p/711391378 这是一系列论文和一个新的LLM研究方向&#xff0c;官网的概述如下。 苹果掉落&#xff0c;盒子移动&#xff0c;但重力和惯性等普遍规律对技术进步至关重要。虽然GPT-5或LLaMA-…