智能驾驶规划控制理论学习04-基于车辆运动学的规划方法

目录

一、线性二自由度汽车模型(自行车模型)

1、二自由度模型概述

2、不同参考点下的状态空间方程

3、前向仿真

二、运动基元生成方法

1、杜宾斯曲线(Dubins Curve)

2、Reeds Shepp Curve

三、多项式曲线(Polynomial Curve)

1、五次多项式曲线(Quintic Polynomial)       

五次多项式曲线介绍

 五次多项式曲线应用

 2、螺旋线(Spiral Curve)

三次螺旋线 (Cubic Spiral Curve)

 辛普森方法(Simpson's method)

​编辑 参数重映射        

牛顿求根法(Newton's Method for Root Finding)


一、线性二自由度汽车模型(自行车模型)

1、二自由度模型概述

        如上图所示,左侧为传统的四轮汽车运动学模型,右侧为简化的二自由度汽车模型,仅保留沿着y轴的移动和绕z轴的横摆 。为了简化得到二自由度模型,需要满足一下几个基本假设:

  • 车辆运动在二维平面上;
  • 假设无滑移条件:轮胎没有横向或纵向滑移,因此我们可以假设车轮的速度与车轮的朝向一致。

2、不同参考点下的状态空间方程

         在线性二自由度汽车模型中,可以以后轮中心为参考点,以前轮中心为参考点,或以整车质心为参考点。

①以后轮中心为参考点

        从最后得到的公式可知,若已知车辆起始位置(x,y,θ),前轮偏转角ε和起始速度v就可以预测一定时间△t后的车辆所处的位置;

②以前轮中心为参考点

        以前轮中心为参考点进行分析与以后轮中心为参考点类似,只是角度发生了一些变化; 

③以质心为参考点

        L是汽车的轴距,lr对应汽车后轴距(对应汽车质心到后轮中心的距离),β是汽车的航偏角。

3、前向仿真

        在自动驾驶规划领域中,前向仿真/积分是非常常用的一种方法,如果我们知道一组初始状态量、一组输入量并且给定一段时间就可以通过积分的方式得到下一个时刻汽车的状态量。对应下图所示的过程:

        需要注意的是输入量是车速和方向盘的转速,与前面介绍的微分方程状态量不同,如果直接传入方向盘转速(对应前轮偏转角ε),那么会使转向角瞬间发生变化,这与实际驾驶过程不符。显然用偏转角的变化率作为输入量更合理;

        前面推导出来的微分方程都是连续的,我们通常要利用离散的方法区评估一个连续的积分结果。上图介绍的就是较为经典的处理微分方程的数值方法——欧拉法,大致思想是利用梯形的面积来近似原函数的积分值。

二、运动基元生成方法

1、杜宾斯曲线(Dubins Curve)

        杜宾斯曲线的目的是要求解二维平面上两个位姿之间的最短路径。

        当车辆运动速度恒定时,系统可被简化为:        

       转角u的取值从区间[-tanφmax, tanφmax]中选择,由于在日常生活中车辆的前轮转角大多在[-π/2, π/2]之间,因此为了简化可以取tanφ = 1。

        在任意两个位姿之间,车辆的杜宾斯曲线总是可以被不超过三个运动基元的组合表示出来,分别被记为S(直行)、L(向左以最大转角行驶得到的圆弧)和R(向右以最大转角行驶得到的圆弧)。

         杜宾斯曲线证明了只有一下六种组合能够取得最优解,任意两个位姿之间的最短路径总是可以用其中一个组合来表示。

{LRL, RLR, LSL, LSR, RSL, RSR}

        以下图为例描述车辆沿杜宾斯曲线的运动轨迹:

        以左侧的杜宾斯曲线为例,一开始的Rα表示车辆向右行驶过一段α圆心角的弧长,第二段Sd表示的是在直行过程中行驶出来的距离d,第三段Lγ表示车辆向左行驶过一段γ圆心角的弧长。

        图中还需要注意β的取值与α、γ不同,β的取值不能低于π,因为杜宾斯曲线证明若β的取值低于π,那么一定会有另一种运动基元的组合取得最优解。

        对于给定起始点和终点,利用杜宾斯曲线进行最短路劲求解仍然面临两个问题:

  • 以上六种运动基元的组合哪个能够获得最短路劲?
  • 如何获取下标α、β、γ和d的值?

        对于第一个问题,可以尝试将六种组合一一尝试的方式,或者利用解析解的方式进行求解;

        第二个问题则需要理由各种几何关系进行求解,目前编程上也存在直接可以使用的库函数对杜宾斯曲线的参数进行求解。

2、Reeds Shepp Curve

        Reeds Shepp Curve和Dubins Curve整体上十分类似,唯一的区别是Dubins Curve只允许车辆做正向运动,而Reeds Shepp Curve允许车辆做反向运动。

        体现到微分方程中, Reeds Shepp Curve利用u1和u2两个参数来表示车辆的运动方向,u1表示车辆的前后运动,u2表示车辆的左右运动;

        u1的取值为{-1, 1},分别表示向后和向前,u2的取值为[-tanφmax, tanφmax],为了简化u2依然可以只在区间[-1, 1]之间进行取值。

        Reeds Shepp Curve被证明有不超过48种的组合可以用来描述车辆的最短路径,如下表所示:

三、多项式曲线(Polynomial Curve)

1、五次多项式曲线(Quintic Polynomial)       

五次多项式曲线介绍

        假设在某个时刻t的一维运动x(t)被表述为五次多项式

        在五次多项式中共有六个未知量a0……a5,因此要求解一条五次多项式只需要构造出六个等式方程即可,在自动驾驶中通常将起始点和终点作为边界条件。

        具体来说可假设起始点时t = 0,终点时t = T,那么对于一条五次多项式可以进行如下求解:

 五次多项式曲线应用

        上图左侧是在frenet坐标系中利用五次多项式曲线去描述纵向和侧向运动, 对于侧向和纵向运动,都给定初始的状态量,通过采样的方式取得一系列终点的状态量,利用上述的计算方式获得对应起始点和终止点的五次多项式曲线。

        图中浅灰色的曲线是一些被过滤的不合理的五次多项式曲线,在符合约束条件的五次多项式曲线中按照特定的cost获取最优的曲线(图中用绿色表示)。

        将采样得到的侧向和纵向方向的五次多项式按照cost加权的方式进行组合就能得到如上图右侧所示的综合曲线,然后在合并后的曲线中选择最优的曲线。

         前面讲过在frenet坐标系中规划的方法,车辆的侧向运动有两种参数化的表述形式,第一种是以时间t为参数化l(t),对应上面介绍的应用,还有一种是以弧长s为参数化l(s),下图介绍的是五次多项式在这种自动驾驶场景的应用:

 2、螺旋线(Spiral Curve)

三次螺旋线 (Cubic Spiral Curve)

        三次螺旋线与上面介绍的五次多项式都是用来解决路径边界问题(bvp, Path boundary value problem)的方法,所谓bvp问题就是给定起点和终点约束来获取一条参数化曲线。

        螺旋线是关于曲率对弧长的函数k(s),表示为随着弧长的变化,每一点所对应的曲率大小。本节以三次螺旋线为例进行介绍。

k(s) = ds^{3} + cs^{2} + bs + a

        通过质点的运动学模型可以得到以下表达式:

        对于θ值可以通过上述解析的方式求得,但是对于x和y的值的获取就比较复杂了。在数学上,形如\int_{a}^{b}cos(f(x))dx 的函数叫做菲涅尔积分,无法通过解析的方式获得位置的闭合解

        因此我们需要使用一些数值近似的方法来评估菲涅尔积分的值。一种常用的方法叫做辛普森方法(Simpson's method)。

 辛普森方法(Simpson's method)

        辛普森方法是一种利用二次函数来近似估计定积分值的方法,如下图 所示,辛普森法则可以通过用二次插值函数P(x)逼急被积函数f(x)来推导。

         为了通过辛普森方法获取定积分\int_{a}^{b}f(x)dx的近似值,我们通常会将[a, b]区间划分为偶数个子区间,每一个子区间的宽度为△x = (b - a) / n;

        在每一个连续的子区间上[x_{i-1},x_{i}], [x_{i},x_{i+1}],我们考虑用二次函数y = ax^{2} + bx + c穿过子区间的端点值(x_{i-1},f(x_{i-1})), (x_{i},f(x_{i}))

        对应的计算表达式为:

        辛普森法则计算公式的系数满足一下规律:

         辛普森方法相比于其他简单的数值方法(如中点法、梯形法)更加的精确,因为相比于中点法梯形法那种化曲为直的思想,用二次函数的曲线更加贴合定积分的曲线。 分割得到的子区间个数n会直接影响到积分近似的精确度和效率。

  • 一般来讲,随着n的增大,我们能够得到更加准确的近似值;
  • 与此同时,随着n的增大,计算所消耗的资源也越大,效率降低。

        下面以n=8为例在三次螺旋曲线中应用辛普森方法:

        将辛普森方法应用于x(s)和y(s)的求解

 参数重映射        

       参数重映射的思想是将原函数中的参数转化为p的向量,向量有五个维度组成分别为p0, p1, p2, p3, sf。

        p0,...,p3分别表示在整条曲线上按等弧长取到的四个点,sf则表示整条曲线的弧长,代入重映射后的三次螺旋线中得到:

         最终可以得到新得到的参数关于相邻p中的各维度的表达式:

         虽然原函数中只有四个参数,重映射后增加到了五个参数,但是p0和p3表示的是起点和终点的曲率,是已知量,函数就降到了三维,相比与原函数降低了一个维度。

        重映射后的公式能够确保各参数pi在量级上较为接近,为优化增加了数值稳定性。

        而对于剩下三个参数的求解,又要用到一种新的方法——牛顿求根法(Newton's Method for Root Finding)。

牛顿求根法(Newton's Method for Root Finding)

         先假设出采用参数p在终点处的向量:

        在参数重映射后 ,重点的k(sf)是已知输入量,因此我们要求解的状态输入量只有x、y和θ三个维度,向量p是优化后想要求解的变量。

        整个优化目标是我们希望的终点状态量和期望的状态量相等:

x_{des} - x_{p}(s_{f}) = 0

         再生成雅可比矩阵,使用牛顿寻根法生成p的估计序列:

        式中△x、△p表示梯度下降的方向,Pi+1是下一次迭代。

        下面对牛顿寻根法做一个简要的描述:

       上图是牛顿寻根法在一维函数中应用的一个直观体现。大致思想是:从一个初始的猜测开始,然后用它的切线来近似函数,最后计算这个切线的x轴截距。这个x截距通常会比第一次猜测更接近原始函数的根,迭代直到找到解。

        迭代公式为:

x_{n+1} = x_{n} - \frac{f(x_{n})}{f{}'(x_{n})}

        对于牛顿求根法,初值的选取是比较重要的,它会直接影响到最终求得的解是否为当前周期内的全局最优解,有两个可以采取的策略:

  • 通过查表的方式获取
  • 从上一个规划周期中导出类似位置的端点对。

        利用螺旋线的优点是可以显式地约束曲率以及曲率高阶量的信息,可以使得整条曲线更光滑,但是所消耗的计算资源也是比较大的。

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

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

相关文章

redis7.2.2|Dict

文章目录 StructredisDBdictdictTypedictEntry 宏定义散列函数散列冲突dictEntry pointer bit tricks[指针位技巧]API implementation_dictReset_dictInitdictCreatedictGetHashdictSetKeydictSetValdictSetNextdictGetNextdictGetValdictGetKey_dictCleardictEmptydictRelease…

五、西瓜书——集成学习

1.个体与集成 集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能,这对“弱学习器”(weak learner)尤为明显因此集成学习的很多理论研究都是针对弱学习器进行的而基学习器有时也被直接称为弱学习器。 要获得好的集成个体学习器应“好而不同”…

详解JavaScript的函数

详解 JavaScript 的函数 函数的语法格式 创建函数/函数声明/函数定义 function 函数名(形参列表) { 函数体 return 返回值; // return 语句可省略 } 函数调用 函数名(实参列表) // 不考虑返回值 返回值 函数名(实参列表) // 考虑返回值 示例代码 //定义的没有参数列表&am…

5个好玩神奇还免费的工具网站收藏不后悔-搜嗖工具箱

生命倒计时 http://www.thismuchlonger.com 这是一个相哇塞的网站,可以让我们静下心来好好想想我们来这个世界究竟为了什么,因为当我们作为命运的主宰者。敲打键盘设定好自己一生长度的时候,我们的剩余寿命已经成绝对值,一旦生命…

mysql5.7配置主从

原理: MySQL主从复制的工作原理如下:1. 主服务器产生Binlog日志当主服务器的数据库发生数据修改操作时,如INSERT、UPDATE、DELETE语句执行,主服务器会记录这些操作的日志信息到二进制日志文件中。2. 从服务器读取Binlog日志 从服务器会向主服务器发送请求,主服务器把…

Linux网络编程——socket 通信基础

Linux网络编程——socket 通信基础 1. socket 介绍2. 字节序2.1 简介2.2 字节序举例2.3 字节序转换函数 3. socket 地址3.1 通用 socket 地址3.2 专用 socket 地址 4. IP地址转换(字符串ip -> 整数,主机、网络字节序的转换 )5. TCP 通信流…

智能驾驶规划控制理论学习05-车辆运动学规划案例分析

目录 案例一——Hybrid A*(基于正向运动学) 1、基本思想 2、 实现流程 3、启发函数设计 4、分析扩张(Analytic Expansions) 5、分级规划(Hierarchical planning) 案例二——State Lattice Planning&…

Vue3快速上手(十六)Vue3路由传参大全

Vue3路由传参 一、传参的多种方式 1.1 拼接方式 这种方式适合传递单个参数的情况&#xff0c;比如点击查看详情&#xff0c;传个id这样的场景 传参&#xff1a; <RouterLink to"/person?id1" active-class"active">person</RouterLink> …

RabbitMQ相关问题

RabbitMQ相关问题 一、RabbitMQ的核心组件和工作原理&#xff1f;二、如何保证消息可靠投递不丢失的&#xff1f;三、RabbitMQ如何保证消息的幂等性&#xff1f;四、什么是死信队列&#xff1f;死信队列是如何导致的&#xff1f;五、RabbitMQ死信队列是如何导致的&#xff1f;六…

PDF 解析问题调研

说点真实的感受 &#xff1a;网上看啥组件都好&#xff0c;实际测&#xff0c;啥组件都不行。效果好的不开源收费&#xff0c;开源的效果不好。测试下来&#xff0c;发现把组件融合起来&#xff0c;还是能不花钱解决问题的&#xff0c;都是麻烦折腾一些。 这里分享了目前网上能…

数据结构 第3章 栈、队列和数组(一轮习题总结)

第3章 栈、队列和数组 3.1 栈3.2 队列3.3 栈与队列的应用3.4 数组和特殊矩阵 3.1 栈&#xff08;1 10 11 20&#xff09; 3.2 队列&#xff08;6 12 14 17&#xff09; 3.3 栈与队列的应用&#xff08;6 11&#xff09; 3.4 数组和特殊矩阵 3.1 栈 T1 栈和队列具有相同的逻辑…

一周学会Django5 Python Web开发-Django5详细视图DetailView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计28条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Linux-信号2

文章目录 前言一、信号是如何保存的&#xff1f;int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset (sigset_t *set, int signo);int sigdelset(sigset_t *set, int signo);int sigismember&#xff08;const sigset_t *set, int signo);int sigpen…

leetcode 长度最小的子数组

在本题中&#xff0c;我们可以知道&#xff0c;是要求数组中组成和为target的最小子数组的长度。所以&#xff0c;我们肯定可以想到用两层for循环进行遍历&#xff0c;然后枚举所有的结果进行挑选&#xff0c;但这样时间复杂度过高。 我们可以采用滑动窗口&#xff0c;其实就是…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先&#xff0c;导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作&#xff1a; 1.1.2.1 点击开启虚拟机&#xff1a; 1.1.2.2 默认选择回车CentOS Linux&#xff08;3.10.0-1127.e17.x86_64) 7 …

同样是证书,NPDP和PMP有什么区别?

PMP和NPDP的区别是啥&#xff1f; PMP、NPDP证书考哪个更有用&#xff1f;还是两个都考&#xff1f; PMP和NPDP哪个更适合现在及以后发展&#xff1f; PMP和NPDP这两哪个含金量更高&#xff1f; 一&#xff0c;关于PMP和NPDP PMP和NPDP都是美国PMI/PDMA的专业考试&#xf…

C语言中的分支和循环语句:从入门到精通

分支和循环语句 1. 前言2. 预备知识2.1 getchar函数2.2 putchar函数2.3 计算数组的元素个数2.4 清屏2.5 程序的暂停2.6 字符串的比较 3. 结构化3.1 顺序结构3.2 分支结构3.3 循环结构 4. 真假性5. 分支语句&#xff08;选择结构&#xff09;5.1 if语句5.1.1 语法形式5.1.2 else…

Stable Cascade又升级了,现在只需要两个模型

Stable Cascade这个模型&#xff0c;大家如果还有印象的话&#xff0c;是需要下载三个模型的&#xff0c;分别是Stage_a,Stage_b和Stage_c,如果全都下载下来&#xff0c;需要20多个G&#xff0c;但是最近使用ComfyUI做尝试的时候&#xff0c;发现官方的案例中已经没有用到单独的…

数据审计 -本福德定律 Benford‘s law (sample database classicmodels _No.6)

数据审计 -本福德定律 Benford’s law 准备工作&#xff0c;可以去下载 classicmodels 数据库资源如下 [ 点击&#xff1a;classicmodels] 也可以去我的博客资源下载 文章目录 数据审计 -本福德定律 Benfords law 前言一、什么是 本福德定律&#xff1f;二、数学公式三、应用…