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

news2024/9/23 12:24:56

目录

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

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})}

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

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

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

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

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

相关文章

多线程(进阶四:线程安全的集合类)

目录 一、多线程环境使用ArrayList 二、多线程环境使用队列 三、多线程环境使用哈希表 1、HashMap 2、Hashtable 3、ConcurrentHashMap (1)缩小了锁的粒度 (2)充分使用了CAS原子操作,减少一些加锁 (3)针对扩容操作的一些优化(化整为零&#xff…

优选算法|【双指针】283.移动零

题目 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12]输出: [1,3,12,0,0]示例 2: 输入…

基于ssm旅社客房收费管理系统+vue

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

PTA L2-005 集合相似度

给定两个整数集合,它们的相似度定义为:Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数,Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输入格式: 输入第一行给出一个正整数N…

IEEE 802.1Qbv标准解析:为实时应用提供可靠网络基础设施

IEEE 802.1Qbv是IEEE 802.1家族中的一项重要标准,专门针对实时流量的时间敏感性进行优化。这一标准在网络通信领域,特别是在对实时性要求极高的应用中,如音视频传输、工业自动化、智能交通系统等,具有极其重要的地位。 在传统的以…

递推算法(c++)

递推可以说是递归反过来的一种算法,递归是从后往前倒着算,递推是从前往后正着算。 统计每个月兔子的总数 题目描述 有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子, …

为什么HashMap的键值可以为null,而ConcurrentHashMap不行?

写在开头 今天在写《HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!》这篇文章的时候,漏了一个知识点,知道晚上吃饭的时候才凸显想到,关于ConcurrentHashMap在存储Key与Value的时候&…

ARM架构基础内容

文章目录 前言一、AAPCS二、中断调用过程三、FreeRTOS中任务切换的实质总结 前言 一、AAPCS AAPCS,全称为ARM Architecture Procedure Call Standard,是ARM架构下的过程调用标准。这个标准定义了在ARM架构中函数调用和返回的约定,以确保不同…

文件底层的深入理解(1)

一、文件学习的简单铺垫 我们都知道,文件等于文件内容加上文件属性。访问文件之前都得先通过进程才能打开相应的文件,一个进程可以打开多个文件。修改文件,都是通过执行代码的方式完成修改。要对文件进行修改(或其他操作&#xff…

Java 数组(详细)

目录 一、数组的概述 1. 数组的理解: 2. 数组相关的概念: 3. 数组的特点: 4. 数组的分类: 5.数据结构: 二、一维数组 1. 一维数组的声明与初始化 2. 一维数组元素的引用: 3. 数组的属性&#xff1…

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif

力扣hot100题解(python版44-47题)

44、二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出:…

FHE 的应用场景

参考文献: [MSM22] Marcolla C, Sucasas V, Manzano M, et al. Survey on fully homomorphic encryption, theory, and applications[J]. Proceedings of the IEEE, 2022, 110(10): 1572-1609. 文章目录 FHEFirst GenerationSecond GenerationThird GenerationFour…

编码规则转换

思考: 如何将一个机内码转换为区内码? 只要将机内码减去 A0A0 就可以啦 如果只让我们用加法器来解决呢? 注意我们的数据占用了 32 位,如果想用补码进行减法运算的话,符号位怎么办??&#xf…

2199. 骑士共存问题(最小割,最大权独立集,二分图)

活动 - AcWing 在一个 n∗n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。 棋盘上某些方格设置了障碍,骑士不得进入。 对于给定的 n∗n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个…

2024年腾讯云优惠券_代金券_云服务器折扣券免费领取链接

腾讯云优惠代金券领取入口共三个渠道,腾讯云新用户和老用户均可领取8888元代金券,可用于云服务器等产品购买、续费和升级使用,阿腾云atengyun.com整理腾讯云优惠券(代金券)领取入口、代金券查询、优惠券兑换码使用方法…

UE5中实现后处理深度描边

后处理深度描边可以通过取得边缘深度变化大的区域进行描边,一方面可以用来做角色的等距内描边,避免了菲尼尔边缘光不整齐的问题,另一方面可以结合场景扫描等特效使用,达到更丰富的效果: 后来解决了开启TAA十字线和锯齿…

【go从入门到精通】go包,内置类型和初始化顺序

大家好,这是我给大家准备的新的一期专栏,专门讲golang,从入门到精通各种框架和中间件,工具类库,希望对go有兴趣的同学可以订阅此专栏。 go基础 。 Go文件名: 所有的go源码都是以 ".go" 结尾&…

latex宏包pythontex使用简明手册

文章目录 1.背景2. 基本示例2.1 hello world2.1.1 代码与输出结果2.1.2 说明2.1.3 如何编译使用了pythontex宏包的Latex文档2.1.4 如何既输出python代码又输出代码执行结果 2.2 在Latex中嵌入python变量的值2.2.1 示例代码与文档输出2.2.2 说明 2.3 在latex文档中输出控制台会话…

2.29号的复盘开始商城项目的规格如何设施的方式

第五次设计方式 我本来想的是,按照对于的组方式解拆分,通过分组处理的内存不同查询对应的手机上 出现问就是这里 对于的组相应规格相应里面有对于的价格,价格也就相同,无法进行区分 查询出来的对应的结果 还是没有办法具体拆分…