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

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

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结合即得到二次规划下的最优路径,再转化到笛卡尔坐标系下完成路径规划。

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

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

相关文章

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…

相交链表和环形链表

(一)相交链表 相交链表 思路:先分别计算出A列表和B列表的长度,判断它们的尾节点是否相等,如果不相等就不相交,直接返回空。然后让两个列表中的长的列表先走它们的差距步,然后再一起走&#xff…

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…

A054-基于Spring Boot的青年公寓服务平台的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【经典】星空主题的注册界面HTML,CSS,JS

目录 界面展示 完整代码 说明&#xff1a; 这是一个简单的星空主题的注册界面&#xff0c;使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…

TiDB 优化器丨执行计划和 SQL 算子解读最佳实践

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/5edb7933 导读 在数据库系统中&#xff0c;查询优化器是数据库管理系统的核心组成部分&#xff0c;负责将用户的 SQL 查询转化为高效的执行计划&#xff0c;因而会直接影响用户体感的性能与稳…

位运算在嵌入式系统开发中的应用

目录 一、数据存储与节省 “绝技” 1.1. 传感器数据存储挑战 1.2. 位运算解决方案 1.2.1. 数据整合 1.2.2. 数据提取 1.3. 收益分析 二、硬件控制 “精准操纵术” 2.1. 位运算操控硬件寄存器的实例 2.2. 位运算在硬件控制中的优势 2.3. 电机驱动芯片寄存器控制示例 …

设置redis

1.https://github.com/tporadowski/redis/releases下载对应版本 解压 启动redis临时服务 在 redis 文件夹下 cmd 输入redis-server.exe redis.windows.conf 临时服务启动 从新打开一个cmd 运行redis-cli 输入ping 启动成功 命令行输入shutdown关闭服务 创建永久服务 在…

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff0c;以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…

【Rust】unsafe rust入门

这篇文章简单介绍下unsafe rust的几个要点 1. 解引用裸指针 裸指针其实就是C或者说C的指针&#xff0c;与C的指针不同的是&#xff0c;Rust的裸指针还是要分为可变和不可变&#xff0c;*const T 和 *mut T&#xff1a; 基于引用创建裸指针 let mut num 5;let r1 &num …

# 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类

01_Python基础到实战一飞冲天&#xff08;三&#xff09;–python面向对象&#xff08;一&#xff09;–简单类 一、面向对象-01-基本概念 1、面向对象(OOP) 面向对象编程 —— Object Oriented Programming 简写 OOP。 2、面向对象(OOP) 学习目标 了解 面向对象 基本概念…

Java 基础知识与核心概念

Java 作为一门广泛使用的编程语言&#xff0c;它的基础知识是每个开发者必须掌握的。无论是面向对象编程&#xff08;OOP&#xff09;还是集合框架的使用&#xff0c;理解这些核心概念能够帮助我们在日常开发中更加高效和准确地编写代码。本文将从设计模式、集合原理到常见类的…

【C++习题】24.二分查找算法_0~n-1中缺失的数字

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 剑指 Offer 53 - II. 0&#xff5e;n-1中缺失的数字 题目描述&#xff1a; 解法 哈希表&#xff1a; 建立一个hash表看哪个数字出现次数为0 直接遍历找结果&#xff1…

(即插即用模块-Convolution部分) 一、(ICLR 2022) ODConv 全维动态卷积

文章目录 1、Omni-dimensional Dynamic Convolution2、代码实现 paper&#xff1a;OMNI-DIMENSIONAL DYNAMIC CONVOLUTION Code&#xff1a;https://github.com/OSVAI/ODConv 1、Omni-dimensional Dynamic Convolution 论文首先分析了现有动态卷积的局限性&#xff0c;论文指出…

深度学习Python基础(2)

二 数据处理 一般来说PyTorch中深度学习训练的流程是这样的&#xff1a; 1. 创建Dateset 2. Dataset传递给DataLoader 3. DataLoader迭代产生训练数据提供给模型 对应的一般都会有这三部分代码 # 创建Dateset(可以自定义) dataset face_dataset # Dataset部分自定义过的…

(超详细图文详情)Navicat 配置连接 Oracle

1、下载依赖文件 Oracle官网下载直链&#xff1a;https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 夸克网盘下载&#xff08;oracle19c版本&#xff09;&#xff1a;https://pan.quark.cn/s/5061e690debc 官网下载选择对应 Oracle 版…

jdk各个版本介绍

Java Development Kit&#xff08;JDK&#xff09;是Java平台的核心组件&#xff0c;它包含了Java编程语言、Java虚拟机&#xff08;JVM&#xff09;、Java类库以及用于编译、调试和运行Java应用程序的工具。 JDK 1.0-1.4&#xff08;经典时代&#xff09; • JDK 1.0&#xff…

二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(1)

前言 二分法&#xff0c;这一看似简单却又充满哲理的算法&#xff0c;犹如一道精巧的数学之门&#xff0c;带领我们在问题的迷雾中找到清晰的道路。它的名字虽简单&#xff0c;却深藏着智慧的光辉。在科学的浩瀚星空中&#xff0c;二分法如一颗璀璨的星辰&#xff0c;指引着我们…

基于 FFmpeg/Scrcpy 框架构建的一款高性能的安卓设备投屏管理工具-供大家学习研究参考

支持的投屏方式有:USB,WIFIADB,OTG,投屏之前需要开启开发者选项里面的USB调试。 主要功能有: 1.支持单个或多个设备投屏。 2.支持键鼠操控。 3.支持文字输入。 4.支持共享剪切板(可复制粘贴电脑端文字到手机端,也可导出手机剪切板到电脑端)。 5.支持视频图片上传,可单…

【论文笔记】A Token-level Contrastive Framework for Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: A Token-level Contrastiv…