智能驾驶规划控制理论学习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})}

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

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

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

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

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

相关文章

如何本地创建websocket服务端并发布到公网实现远程访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

微服务监控SpringBoot Actuator模块

Spring Boot Actuator Spring Boot 包含许多附加功能,可帮助您在将应用程序投入生产时监控和管理应用程序。您可以选择使用 HTTP 端点或 JMX 来管理和监控您的应用程序。审核、运行状况和指标收集也可以自动应用于您的应用程序。 简介 Spring Boot Actuator模块提…

参数引入和全局变量引入实现-目标和

LCR 102. 目标和 - 力扣(LeetCode) 分析题意,画出决策树,其他的思路都跟前面讲过的类似: 全局变量引入实现: 全局变量的引入,需要手动处理回溯; class Solution {int ret; //…

智慧公厕:打造智慧城市的环卫明珠

在城市建设中,公共卫生设施的完善和智能化一直是重要环节。而智慧公厕作为智慧城市建设的重要组成部分,发挥着不可替代的作用。本文以智慧公厕源头实力厂家广州中期科技有限公司,大量精品案例现场实景实图,解读智慧公厕如何助力打…

SwiftUI 在 App 中弹出全局消息横幅(下)

功能需求 在 SwiftUI 开发的 App 界面中,有时我们需要在全局层面向用户展示一些消息: 如上图所示:我们弹出的全局消息横幅位于所有视图之上,这意味这它不会被任何东西所遮挡;而且用户可以点击该横幅关闭它。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求…

自测-5 Shuffling Machine(python版本)

文章预览: 题目翻译算法python代码oj反馈结果 题目 翻译 shuffle是用于随机化一副扑克牌的过程。由于标准的洗牌技术被认为是薄弱的,并且为了避免员工通过不适当的洗牌与赌徒合作的“内部工作”,许多赌场使用了自动洗牌机。你的任务是模拟一…

探索Linux世界:初次接触和基本指令(文件操作)

文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…

[技巧]Arcgis之图斑四至范围批量计算

ArcGIS图层(点、线、面三类图形)四至范围计算 例外一篇介绍:[技巧]Arcgis之图斑四至点批量计算 说明:如下图画出来的框(范围标记不是很准) ,图斑的x最大和x最小,y最大,…

MySQL Strict Mode is not set for database connection ‘default‘

在使用 DJango 框架执行迁移文件的命令时,可以看到出现如下警告: (ll_env) D:\workspace\workspace-mengll\learning-log>python manage.py migrate System check identified some issues: WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set …

【动态规划专栏】

动态规划基础知识 概念 动态规划(Dynamic Programming,DP):用来解决最优化问题的算法思想。 动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。 一般来说,…

账单怎么记账软件下载,佳易王账单记账汇总统计管理系统软件教程

账单怎么记账软件下载,佳易王账单记账汇总统计管理系统软件教程 一、前言 以下软件以 佳易王账单记账汇总统计管理系统软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 软件特色: 1、功能实用,操作…

Vue之监测数据的原理(对象)

大家有没有想过,为什么vue可以监测到数据发生改变?其实底层借助了Object.defineProperty,底层有一个Observer的构造函数 让我为大家简单的介绍一下吧! 我用对象为大家演示一下 const vm new Vue({el: "#app",data: {ob…

力扣hot100:42.接雨水

什么时候能用双指针? (1)对撞指针: ①两数和问题中可以使用双指针,先将两数和升序排序,可以发现规律,如果当前两数和大于target,则右指针向左走。 ②接雨水问题中,左边最…

基于STM32F4的FFT(快速傅里叶变换)求信号幅值,频率,相位差

基于STM32F4的FFT(快速傅里叶变换)求信号幅值,频率,相位差 一。FFT原理介绍 快速傅里叶变换(Fast Fourier Transform,FFT)是一种用于高效计算傅里叶变换的算法。傅里叶变换是一种信号处理技术…

动态规划|【双指针】|11.盛水最多的容器

题目 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xf…

发现了一个超级好用的上网神器!但是不知道在哪里有卖······随身WiFi好评推荐,随身WiFi好用吗?

这两天到一个小地方出差, 走到一个奶茶店附近, 突然老板打电话说一个紧急文件需要我处理, 说实话有点崩溃, 前不着村后不着店的, 我去哪里找网络办公 辛亏奶茶店的小姐姐听到了, 让我在她店里&#x…

LVS负载均衡服务器

简介: LVS (Linux Virtual Server):四层路由设备,是由中国人章文松研发的(阿里巴巴的副总裁)根据用户请求的IP与端口号实现将用户的请求分发至不同的主机。 工作原理: LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务&#xff…

【一起学习Arcade】(6):属性规则实例_约束规则和验证规则

一、约束规则 约束规则用于指定要素上允许的属性配置和一般关系。 与计算规则不同,约束规则不用于填充属性,而是用于确保要素满足特定条件。 简单理解,约束规则就是约束你的编辑操作在什么情况下可执行。 如果出现不符合规则的操作&#…

python实现有限域GF(2^8)上的乘法运算

有限域GF(2^8)上的乘法运算可以看成多项式的乘法 5e转换成二进制为0101 1110,对应的多项式为x^6x^4x^3x^2x 3f转换成二进制为0011 1111,对应的多项式为x^5x^4x^3x^2x1 将这两个多项式相乘再模多项式x^8x^4x^3x1得到结果为1110 0101,转换为…

C# 不可识别数据库格式问题

C#是一种流行的编程语言,用于开发各种类型的应用程序,包括与数据库交互的应用程序。然而,在处理数据库时,有时会遇到一些错误和问题。其中之一就是数据库格式不可识别的错误。 在C#中,我们通常使用ADO.NET来连接和操作…