自动驾驶决策规划算法-路径决策算法:二次规划

本文为学习自动驾驶决策规划算法第二章第四节(中) 路径二次规划算法》的学习笔记。

1 二次型

二次型的形式为
1 2 x T H x + f T x \begin{equation} \frac{1}{2}\boldsymbol{x}^TH\boldsymbol{x}+f^T\boldsymbol{x} \end{equation} 21xTHx+fTx
约束
A e q x = b e q \begin{equation} A_{eq}\boldsymbol{x}=b_{eq} \end{equation} Aeqx=beq

l b ≤ A 1 x ≤ u b \begin{equation} lb≤A_1\boldsymbol{x}≤ub \end{equation} lbA1xub
可以转化为 A x ≤ b A\boldsymbol{x}≤b Axb的形式:
A e q x = b e q    ⟹    b e q ≤ A e q x ≤ b e q    ⟹    { A e q x ≤ b e q − A e q x ≤ − b e q    ⟹    [ A e q − A e q ] x ≤ [ b e q − b e q ] \begin{equation} A_{eq}\boldsymbol{x}=b_{eq}\implies b_{eq}≤A_{eq}\boldsymbol{x}≤b_{eq}\implies \begin{cases} A_{eq}\boldsymbol{x}≤b_{eq}\\ -A_{eq}\boldsymbol{x}≤-b_{eq} \end{cases}\implies \begin{bmatrix} A_{eq} \\ -A_{eq} \end{bmatrix}\boldsymbol{x}≤ \begin{bmatrix} b_{eq} \\ -b_{eq} \end{bmatrix} \end{equation} Aeqx=beqbeqAeqxbeq{AeqxbeqAeqxbeq[AeqAeq]x[beqbeq]
同理有
l b ≤ A 1 x ≤ u b    ⟹    [ A 1 − A 1 ] x ≤ [ u b − l b ] \begin{equation} lb≤A_1\boldsymbol{x}≤ub\implies\begin{bmatrix} A_{1} \\ -A_{1} \end{bmatrix}\boldsymbol{x}≤ \begin{bmatrix} ub \\ -lb \end{bmatrix} \end{equation} lbA1xub[A1A1]x[ublb]

2 轻决策与重决策

上一章节动态规划实际上属于决策算法,比如绕障碍时从左边绕还是右边绕,为二次规划开辟了凸空间。
在这里插入图片描述
决策算法分重决策和轻决策,重决策是基于人给定的规则,轻决策基于代价函数。
重决策:
优点:
计算量小;
在感知不强的情况下仍然能做决策;
缺点:
场景太多,无法完全覆盖;
人给出的决策所开辟的凸空间未必满足约束,二次规划搜不到解:
在这里插入图片描述
轻决策根据设计的代价函数,在离散空间上搜索最优路径,开辟凸空间;
优点:
无认为规则,可以处理复杂场景;
缺点:
复杂场景计算量很大;
依赖预测(速度规划时会涉及);
要求周围环境全知(感知、定位要求高);
代价函数设计/最优解未必符合人的驾驶习惯;

3 二次规划算法

在这里插入图片描述

如图,动态规划的粗解决策了绕行的方向,图中 l m i n 1 , l m i n 2 , l m i n 3 … l_{min1},l_{min2},l_{min3}\dots lmin1,lmin2,lmin3 l m a x 1 , l m a x 2 , l m a x 3 … l_{max1},l_{max2},l_{max3}\dots lmax1,lmax2,lmax3构成凸空间,在该凸空间中使用二次规划求解路径:
已知 s i s_i si [ l m i n i , l m a x i ] [l_{mini},l_{maxi}] [lmini,lmaxi] l = f ( s ) l=f(s) l=f(s)满足:
f ( s ) f(s) f(s)二阶导数连续;
l m i n i ≤ f ( s i ) ≤ l m a x i l_{mini}≤f(s_i)≤l_{maxi} lminif(si)lmaxi
f ( s ) f(s) f(s)尽可能平滑(各阶导数的平方尽可能小);
f ( s ) f(s) f(s)尽可能在凸空间的中间;(Apollo)

3.1 分段加加速度优化法

假设连接 l i l_i li l i + 1 l_{i+1} li+1的曲线的三阶导数为常数 l i + 1 ′ ′ − l i ′ ′ Δ s \frac{l''_{i+1}-l''_i}{\Delta{s}} Δsli+1′′li′′,四阶及以上的导数全为0,由泰勒展开公式可得:
l i + 1 = l i + l i ′ Δ s + 1 2 l i ′ ′ Δ s 2 + 1 6 l i + 1 ′ ′ − l i ′ ′ Δ s Δ s 3 \begin{equation} l_{i+1}=l_i+l'_i\Delta{s}+\frac{1}{2}l''_i\Delta{s^2}+\frac{1}{6}\frac{l''_{i+1}-l''_i}{\Delta{s}}\Delta{s^3} \end{equation} li+1=li+liΔs+21li′′Δs2+61Δsli+1′′li′′Δs3
l i + 1 ′ = l i ′ + l i ′ ′ Δ s + 1 2 l i + 1 ′ ′ − l i ′ ′ Δ s Δ s 2 \begin{equation} l'_{i+1}=l'_i+l''_i\Delta{s}+\frac{1}{2}\frac{l''_{i+1}-l''_i}{\Delta{s}}\Delta{s^2} \end{equation} li+1=li+li′′Δs+21Δsli+1′′li′′Δs2
进一步整理可得:
l i + Δ s l i ′ + 1 3 Δ s 2 l i ′ ′ − l i + 1 + 1 6 Δ s 2 l i + 1 ′ ′ = 0 \begin{equation} l_i+\Delta{s}l'_i+\frac{1}{3}\Delta{s}^2l''_i-l_{i+1}+\frac{1}{6}\Delta{s}^2l''_{i+1}=0 \end{equation} li+Δsli+31Δs2li′′li+1+61Δs2li+1′′=0
l i ′ + 1 2 Δ s l i ′ ′ − l i + 1 ′ + 1 2 Δ s l i + 1 ′ ′ = 0 \begin{equation} l'_i+\frac{1}{2}\Delta{s}l''_i-l'_{i+1}+\frac{1}{2}\Delta{s}l''_{i+1}=0 \end{equation} li+21Δsli′′li+1+21Δsli+1′′=0
写成矩阵形式就是:
[ 1 Δ s 1 3 Δ s 2 − 1 0 1 6 Δ s 2 0 1 1 2 Δ s 0 − 1 1 2 Δ s ] [ l i l i ′ l i ′ ′ l i + 1 l i + 1 ′ l i + 1 ′ ′ ] = 0 \begin{equation} \begin{bmatrix} 1 & \Delta{s} & \frac{1}{3}\Delta{s}^2 & -1 & 0 & \frac{1}{6}\Delta{s}^2 \\ 0 & 1 & \frac{1}{2}\Delta{s} & 0 & -1 & \frac{1}{2}\Delta{s} \end{bmatrix} \begin{bmatrix} l_i \\ l'_i \\ l''_i \\ l_{i+1} \\ l'_{i+1} \\ l''_{i+1} \end{bmatrix}=0 \end{equation} [10Δs131Δs221Δs100161Δs221Δs] lilili′′li+1li+1li+1′′ =0
记上式等式左侧的系数矩阵为 A e q _ s u b A_{eq\_sub} Aeq_sub,左侧列向量为待优化的值,对于 i = 1 , 2 , … n i=1,2,\dots{n} i=1,2,n可得:
[ A e q _ s u b 0 0 0 … 0 0 0 … 0 0 0 0 0 0 A e q _ s u b 0 0 0 … 0 0 0 … … 0 0 0 0 0 0 … A e q _ s u b ] [ l 1 l 1 ′ l 1 ′ ′ ⋮ l n l n ′ l n ′ ′ ] = 0 \begin{equation} \begin{bmatrix} A_{eq\_sub} & \begin{smallmatrix} 0 & 0 & 0 & \dots \\ 0 & 0 & 0 & \dots \end{smallmatrix} \\ \begin{smallmatrix} 0 & 0 & 0 & \\ 0 & 0 & 0 & \end{smallmatrix} & A_{eq\_sub} & \begin{smallmatrix} 0 & 0 & 0 & \dots \\ 0 & 0 & 0 & \dots \end{smallmatrix} \\ & \dots\\ \begin{smallmatrix} 0 & 0 & 0 & \\ 0 & 0 & 0 & \end{smallmatrix} & \dots & A_{eq\_sub} \end{bmatrix} \begin{bmatrix} l_1 \\ l'_1 \\ l''_1 \\ \vdots \\ l_n \\ l'_n \\ l''_n \end{bmatrix}=0 \end{equation} Aeq_sub000000000000000000Aeq_sub000000Aeq_sub l1l1l1′′lnlnln′′ =0
上式等式可记为
A e q x = b e q \begin{equation} A_{eq}x=b_{eq} \end{equation} Aeqx=beq
其中左侧的系数矩阵维度为 ( 2 n − 2 ) ∗ 3 n (2n-2)*3n (2n2)3n

3.2 对汽车的四个角点的约束

如图所示
在这里插入图片描述

汽车的角点:
l p 1 = l + d 1 sin ⁡ θ + w 2 cos ⁡ θ \begin{equation} l_{p_1}=l+d_1\sin\theta+\frac{w}{2}\cos\theta \end{equation} lp1=l+d1sinθ+2wcosθ
l p 2 = l + d 1 sin ⁡ θ − w 2 cos ⁡ θ \begin{equation} l_{p_2}=l+d_1\sin\theta-\frac{w}{2}\cos\theta \end{equation} lp2=l+d1sinθ2wcosθ
l p 3 = l − d 2 sin ⁡ θ + w 2 cos ⁡ θ \begin{equation} l_{p_3}=l-d_2\sin\theta+\frac{w}{2}\cos\theta \end{equation} lp3=ld2sinθ+2wcosθ
l p 4 = l − d 2 sin ⁡ θ − w 2 cos ⁡ θ \begin{equation} l_{p_4}=l-d_2\sin\theta-\frac{w}{2}\cos\theta \end{equation} lp4=ld2sinθ2wcosθ
再对三角函数做近似处理:
sin ⁡ θ ≈ tan ⁡ θ ≈ l ′ \begin{equation} \sin\theta≈\tan\theta≈l' \end{equation} sinθtanθl
cos ⁡ θ ≈ 1 \begin{equation} \cos\theta≈1 \end{equation} cosθ1

角点的连线上的点不超过 l m i n l_{min} lmin l m a x l_{max} lmax,一种简单的处理方法是寻找自车当前位置前后一定范围内(比如 [ s i − d 2 , s i + d 1 ] [s_i-d_2, s_i+d_1] [sid2,si+d1])的 l m a x i l_{maxi} lmaxi的最小值,记为 u b i ub_i ubi,车辆的四个角点都应小于 u b i ub_i ubi,同理寻找自车当前位置前后一定范围内的 l m i n i l_{mini} lmini的最大值,记为 l b i lb_i lbi,车辆的四个角点都应大于 l b i lb_i lbi:

l b i ≤ l i + d 1 l i ′ + w 2 ≤ u b i \begin{equation} lb_i≤l_i+d_1l'_i+\frac{w}{2}≤ub_i \end{equation} lbili+d1li+2wubi
l b i ≤ l i + d 1 l i ′ − w 2 ≤ u b i \begin{equation} lb_i≤l_i+d_1l'_i-\frac{w}{2}≤ub_i \end{equation} lbili+d1li2wubi
l b i ≤ l i − d 1 l i ′ + w 2 ≤ u b i \begin{equation} lb_i≤l_i-d_1l'_i+\frac{w}{2}≤ub_i \end{equation} lbilid1li+2wubi
l b i ≤ l i − d 1 l i ′ − w 2 ≤ u b i \begin{equation} lb_i≤l_i-d_1l'_i-\frac{w}{2}≤ub_i \end{equation} lbilid1li2wubi
根据式5可以将式19~22写成矩阵形式:
[ 1 d 1 0 1 d 1 0 1 − d 2 0 1 − d 2 0 − 1 − d 1 0 − 1 − d 1 0 − 1 d 2 0 − 1 d 2 0 ] [ l i l i ′ l i ′ ′ ] ≤ [ u b i − w 2 u b i + w 2 u b i − w 2 u b i + w 2 − l b i + w 2 − l b i − w 2 − l b i + w 2 − l b i − w 2 ] \begin{equation} \begin{bmatrix} 1 & d_1 & 0 \\ 1 & d_1 & 0 \\ 1 & -d_2 & 0 \\ 1 & -d_2 & 0 \\ -1 & -d_1 & 0 \\ -1 & -d_1 & 0 \\ -1 & d_2 & 0 \\ -1 & d_2 & 0 \\ \end{bmatrix} \begin{bmatrix} l_i \\ l'_i \\ l''_i \end{bmatrix} ≤ \begin{bmatrix} ub_i-\frac{w}{2} \\ ub_i+\frac{w}{2} \\ ub_i-\frac{w}{2} \\ ub_i+\frac{w}{2} \\ -lb_i+\frac{w}{2} \\ -lb_i-\frac{w}{2} \\ -lb_i+\frac{w}{2} \\ -lb_i-\frac{w}{2} \\ \end{bmatrix} \end{equation} 11111111d1d1d2d2d1d1d2d200000000 lilili′′ ubi2wubi+2wubi2wubi+2wlbi+2wlbi2wlbi+2wlbi2w
同理,记上式等式左侧的系数矩阵为 A s u b A_{sub} Asub,左侧列向量为 b s u b b_{sub} bsub,对于对于 i = 1 , 2 , … n i=1,2,\dots{n} i=1,2,n可得
[ A s u b A s u b … A s u b ] [ l 1 l 1 ′ l 1 ′ ′ ⋮ l n l n ′ l n ′ ′ ] ≤ [ b s u b 1 b s u b 2 ⋮ b s u b n ] \begin{equation} \begin{bmatrix} A_{sub} \\ & A_{sub} \\ & & \dots \\ & & & A_{sub} \end{bmatrix} \begin{bmatrix} l_1 \\ l'_1 \\ l''_1 \\ \vdots \\ l_n \\ l'_n \\ l''_n \end{bmatrix} ≤ \begin{bmatrix} b_{sub_1} \\ b_{sub_2} \\ \vdots \\ b_{sub_n} \end{bmatrix} \end{equation} AsubAsubAsub l1l1l1′′lnlnln′′ bsub1bsub2bsubn
记为
A x ≤ b \begin{equation} Ax≤b \end{equation} Axb

4 代价函数

c o s t _ f u n c t i o n = w r e f ∑ i l i 2 + w d l ∑ i l i ′ 2 + w d d l ∑ i l i ′ ′ 2 + w d d d l ∑ i ( l i + 1 ′ ′ − l i ′ ′ ) 2 + w m i d ∑ i ( l i − l m i n i + l m a x i 2 ) 2 cost\_function=w_{ref}\sum_i{l_i}^2+w_{dl}\sum_i{l'_i}^2+w_{ddl}\sum_i{l''_i}^2+w_{dddl}\sum_i{(l''_{i+1}-l''_i)}^2+w_{mid}\sum_i{(l_i-\frac{l_{mini+l_{maxi}}}{2})}^2 cost_function=wrefili2+wdlili2+wddlili′′2+wdddli(li+1′′li′′)2+wmidi(li2lmini+lmaxi)2
对应的约束是式12和式25,求解出 l 1 , l 1 ′ , l 1 ′ ′ … , l n . l n ′ , l n ′ ′ l_1,l'_1,l''_1\dots,l_n.l'_n,l''_n l1,l1,l1′′,ln.ln,ln′′ s 1 , s 2 , … , s n s_1,s_2,\dots,s_n s1,s2,,sn结合即得到二次规划下的最优路径,再转化到笛卡尔坐标系下完成路径规划。

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

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

相关文章

学习ASP.NET Core的身份认证(基于Session的身份认证2)

基于Session的身份认证通过后,后续访问控制器的函数时该如何控制访问权限?虽然可以按上篇文章方式在需要做控制的函数开头检查Session的用户标识,可以写个全局通用检查类供所需函数调用,但还是有更简便的方法,本文学习…

立创庐山派 K230 RTSP 推流

立创庐山派使用的是K230芯片,按照教程刷了canmv固件,下载canmv ide,使用嘉楠社区的rtsp和wlan例程,修改成连接wifi以及RTSP推流例程 # Description: This example demonstrates how to stream video and audio to the network us…

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍 卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习的算法,在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层(Pooling Layer)、全连…

挑战用React封装100个组件【004】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于展示图片的地方,提供了small,medium,large三种大小。可以删除图片,也可以全屏预览图片。 样式展示 前置依赖 今天我们的这个挑战需要用用到了…

【详细介绍及演示】Flink之checkpoint检查点的使用

目录 一、介绍 二、 设置checkpoint检查点演示 1、 代码演示 2、测试代码效果 3、查看快照情况 ​编辑 三、在集群上运行 1、第一次运行 2、第二次运行 四、自定义检查点savePoint 1、提交一个flink job 打成jar包 2、输入一些数据,观察单词对应的数字的…

【进阶篇-Day15:JAVA线程-Thread的介绍】

目录 1、进程和线程1.1 进程的介绍1.2 并行和并发1.3 线程的介绍 2、JAVA开启线程的三种方法2.1 继承Thread类:2.2 实现Runnable接口2.3 实现Callable接口2.4 总结: 3、线程相关方法3.1 获取和设置线程名字的方法3.2 线程休眠方法:3.3 线程优…

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)

目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…

如何搭建JMeter分布式集群环境来进行性能测试

在性能测试中,当面对海量用户请求的压力测试时,单机模式的JMeter往往力不从心。如何通过分布式集群环境,充分发挥JMeter的性能测试能力?这正是许多测试工程师在面临高并发、海量数据时最关注的问题。那么,如何轻松搭建…

Y20030025基于php+mysql的幼儿健康管理系统设计与实现 源代码 配置 文档

幼儿健康管理系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 在信息化时代的浪潮中,幼儿健康管理面临着前所未有的挑战与机遇。为了更好地满足家长和幼儿园对幼儿健康管理的需求,我们致力于开发一套基于PHP的幼…

时频转换 | Matlab基于垂直二阶同步压缩变换vertical second-order synchrosqueezing一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式基本介绍 时频转换 | Matlab基于垂直二阶同步压缩变换vertical second-order synchrosqueezing一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x

1.1 数据结构的基本概念

1.1.1 基本概念和术语 一、数据、数据对象、数据元素和数据项的概念和关系 数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据是计算机程序加工的原料。 数据对象:是具有相同性质的数据元素的集合&…

SpringBoot小知识(2):日志

日志是开发项目中非常重要的一个环节,它是程序员在检查程序运行的手段之一。 1.日志的基础操作 1.1 日志的作用 编程期调试代码运营期记录信息: * 记录日常运营重要信息(峰值流量、平均响应时长……) * 记录应用报错信息(错误堆栈) * 记录运维过程数据(…

传输控制协议(TCP)

传输控制协议是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。 1、TCP报文段结构 注:TCP默认采用累积确认机制。 2、三次握手、四次挥手 (1)当客户向服务器发送完最后一个数据段后,发送一个FIN段…

输出保留3位小数的浮点数

输出保留3位小数的浮点数 C语言代码C代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 读入一个单精度浮点数,保留3位小数输出这个浮点数。 输入 只有一行,一个单精度浮点数。 输出 也只有一…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

【竞技宝】CS2-上海major:MongoLZ成为亚洲之光

北京时间2024年12月1日,上海major在昨日正式拉开比赛序幕,首日第六轮迎来MongolZ对阵MIBR、COL对阵PUA。以下是本轮比赛的详细战报。 MongoLz 13-6 MIBR(比赛地图:远古遗迹) 上半场,MongoLz先做进攻方。手枪局,MongoLz抱团进攻遭遇MIBR重防被接连秒掉三人,然而在5V2的残局中,M…

【绘图】数据可视化(python)

对于数据绝对值差异较大(数据离散) 1. 对数坐标直方图(Histogram with Log Scale) import pandas as pd import matplotlib.pyplot as plt import numpy as np# 示例数据 data {count: [10, 20, 55, 90, 15, 5, 45, 80, 1000, …

MySQL - Why Do We Need a Thread Pool? - mysql8.0

MySQL - Why Do We Need a Thread Pool? - mysql8.0 本文主要由于上次写的感觉又长又臭, 感觉学习方法有问题, 我们这次直接找来了 thread pool 的原文,一起来看看官方的开发者给出的blog – 感觉是个大神 但是好像不是最官方的 &#xff0c…

【JS】栈内存、堆内存、事件机制区别

js中,内存主要分为两种类型:栈内存(stack)、堆内存(heap),两种内存区域在存储和管理数据时有各自的特点和用途。 栈内存 访问顺序 栈是先进后出、后进先出的数据结构,栈内存是内存用…

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5,下载cmake,vs2022,git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…