智能驾驶规划控制理论学习08-自动驾驶控制模块(轨迹跟踪)

目录

一、基于几何的轨迹跟踪方法

1、基本思想

2、纯追踪

3、Stanly Method 

二、PID控制器

三、LQR(Linear Quadratic Regulator)

1、基本思想        

2、LQR解法

3、案例学习

基于LQR的路径跟踪 

 基于LQR的速度跟踪

 4、MPC(Model Predicitive Control)

 1、基本思想

2、优化思路

3、MPC vs LQR

4、案例学习

系统模型

生成参考状态 

数学优化

代价函数设计

约束设计


一、基于几何的轨迹跟踪方法

1、基本思想

        基于几何的方法利用车辆和路径之间的几何关系,得到路径跟踪问题的控制律解。基于几何的方法通常利用前视距离来测量车辆前方的误差。该算法的目标是找出每个时刻的前轮角度。

        基于几何的轨迹跟踪方法主要有纯跟踪和斯坦福提出的Stanley Method。在几何方法中使用的依然是在前面规划章节使用的自行车模型。

        如上图所示,R是在给定转向角度下,后桥沿着的圆周半径。这个模型较好地近似了汽车在低速和中等转向角时的运动。 

2、纯追踪

         纯追踪方法的最终目的是计算前轮转角,可以通过当前车辆后轴位置到生成目标路径的前视距离la可以得到一条车辆的运动圆弧曲线和路径上的目标点(g_{x},g_{y}),然后通过几何关系计算得到前轮转角。

        \alpha角是车身行驶方向与前向距离的夹角,根据数学上的正弦定理,进行如下计算:

        使用简单的自行车模型,转向角可以写成:

\delta = tan^{-1}(kL) 

        将曲率代入,可得到纯追踪控制律如下:

\delta (t)=tan^{-1}(\frac{2Lsin(\alpha (t))}{l_{d}}) 

        为了使得控制律更具有直观性,可以引入一个新的变量cross track error e_{ld}(横跨跟踪误差),该误差描述的是车辆行驶方向与目标点之间的横向距离,那么:

sin(\alpha )=\frac{e_{ld}}{l_{d}}

k=\frac{2}{l_{d}^{2}}e_{l_{d}}

         由上式可知,纯追踪方法是一个方向盘角度的比例控制器,它作用在车里前方一些前视距离的横跨追踪误差上,增益为\frac{2}{l_{d}^{2}}

        在实践中,增益(前视距离)被独立地调整为在几个恒定的速度下保持稳定,从而使l_{d}更好地被指定为车速的函数。

3、Stanly Method 

        纯追踪方法以车辆后轴为参考点,而Stanly Method以前轴中心为参考点,同时考虑相对于路径最近点的行驶方向和位置误差。

         如上图所示,\theta角是前轮偏转角,\theta _{p}是在点(c_{x},c_{y})处前轮与路径的夹角,那么前轮要再偏转的角度\theta _{e}为:

\theta _{e}=\theta - \theta _{p}

         Stanly Method使用非线性反馈函数,从前轴中心到最近路径点(c_{x},c_{y})测量横跨跟踪误差e_{fa},公式如下:

二、PID控制器

        PID控制器试图通过调整控制变量u(t)使误差随时间的误差最小,整体的控制函数如下:

u(t)=K_{p}e(t)+K_{i}\int_{0}^{t}e(\tau)d \tau+K_{d}\frac{de(t)}{dt} 

         比例项P_{out}=K_{p}e(t)产生一个与当前误差值e(t)成正比的输出值,K_{p}被称为比例增益常数。上图可以直观反映比例增益的取值对系统的影响,如果比例增益过高,系统就会变的不稳定,而如果比例增益太低,则当系统发生扰动时,控制作用可能太小。

        积分项I_{out}=K_{i}\int_{0}^{t}e(\tau )d\tau是针对比例控制器工作时存在的稳态误差,稳态误差指的是期望的最终输出与实际输出之间的差值。积分项跟踪累积误差,累计误差乘以积分增益K_{i}再添加到控制器输出中。如果积分增益过高,则会导致参考值超调。 

         为了减小控制的波动性(提高阻尼稳定性),又引入微分项D_{out}=K_{d}\frac{de(t)}{dt},通过确定误差随时间的斜率来计算微分误差,计算该误差的变化率乘以微分增益K_{d},并加上控制器输出。微分项根据当前变化率来估计误差的未来趋势。误差变化越大,阻尼效应越大,微分项能够提高系统的稳定时间和稳定性。

三、LQR(Linear Quadratic Regulator)

1、基本思想        

        LQR是一种设计状态变量反馈的方法,它通过最小化一个二次型代价函数来调节线性系统的控制。

        每个时间戳的最优控制都可以用下面的公式实现(状态反馈过程):

u=-Kx

        LQR的整体思路就是给定一个状态量x,通过状态反馈可以得到控制量u,将控制律给到系统作用,得到下一点的状态量然后再重新作为输入量再进行状态反馈,循环迭代直到状态收敛。

         状态反馈中K的求解可以通过公式K=R^{-1}B^{T}P计算得到,其中R和B都是目标函数和线性系统中已知的,而P要通过ARE方程获得:

A^{T}P+PA+Q-PBR^{-1}B^{T}P=0

2、LQR解法

         寻找LQR反馈K的设计过程为:

  • 选择设计目标函数中的参数矩阵Q和R以及线性系统中的参数矩阵A和B;
  • 解关于P的代数方程,由K=R^{-1}B^{T}P取得K的值;
  • 根据反馈u=-Kx取得每个状态量对应的控制量。

3、案例学习

基于LQR的路径跟踪 

        对于传统的自行车模型,可以得到下方的表达式:

  • (x,y,\theta ):后桥处的参考点姿态(状态量);
  • \delta:道路上车轮偏转角(状态量);
  • v:纵向速度(状态量);
  • \gamma:转向角变化速率(控制量);
  • a:纵向加速度(控制量);
  • L:车轴距离(参数)。

         LQR方法要是有标准的线性系统\dot{x}=Ax+Bu,但自行车模型并不是一个线性系统方程,因此需要对自行车模型做一些转化。

         对于横向控制,将状态向量定义为:

x=\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix} = \begin{bmatrix} d\\ \theta ^{*}-\theta \\ \delta \end{bmatrix}

        横向偏移量为:

         对x的每个维度求导,然后代入自行车模型:

         为了获得线性系统方程,需要对上述求导后的结果设置假设:

  • 假设一:\theta ^{*}-\theta要足够小,即车辆航向角与轨迹参考线上的角相差不大;
  • 假设二:偏转角\delta比较小。

        那么根据线性系统方程\dot{x}=Ax+Bu可以写出如下方程:

 基于LQR的速度跟踪

 4、MPC(Model Predicitive Control)

 1、基本思想

        与LQR算法相似,MPC也采用优化的思想进行控制,这种控制技术计算出的控制动作使约束动力系统在有限的、后退的水平的代价函数最小化。

  • Model:给定的动力学系统方程;
  • Prediction:预测未来的状态; 
  • 控制:生成最优策略

2、优化思路

  •  最小化的目标有:相对参考线的误差,消耗的能量……
  • 预测系统状态的系统模型:可以是线性也可以是非线性;
  • 需要满足的约束:控制、状态、线性、非线性……

        在每一个时间步长(采样间隔),通过求解预测视界的开环优化问题来计算控制量。虽然在预测时域内获取了很多时间戳上的最优控制策略,但是在当前时间点只应用计算控制序列的第一个值。然后在下一个时间步长,得到新的系统状态并重新计算。

        虽然我们在当前时间点只应用第一个时间戳的优化策略,但是仍然要计算一个较大预测时域内的控制策略,是采用了类似前面基于几何方法控制中的“前视距离”的思想,能够让系统考虑得更远,以更加平缓的方式接近参考线,即未雨绸缪,决策当下。 

3、MPC vs LQR

  •  MPC和LQR都是最优控制的表达式,但它们的优化代价设置方案不同;
  • LQR优化整个预测时域内,而MPC则更像是优化一个滑动窗口,每次都优化后一个时间窗口;
  • LQR具有较好的全局稳定性,因为它考虑的是整个时间域内的轨迹,而MPC通常具有较好的局部最优性;
  • MPC对线性没有任何假设,它可以处理线性或非线性约束,状态转移方程也可以是非线性的,而这都是LQR的缺点。

4、案例学习

系统模型

 

        为了简化问题,这里我们直接使用自行车模型,和前面类似,不再叙述。

生成参考状态 

        给定规划的轨迹和车辆的当前状态,生成参考状态预测范围内的状态。相比较规划模块较长的预测时域,控制模块对实时性的要求更高,频率更高,相对的预测时域就要小很多。

数学优化

        在优化模块设置目标函数和设置各种约束条件。

代价函数设计

        一般来讲,代价函数由两部分组成,一部分是跟踪轨迹的误差代价(对应左上Tracking Error Cost),另一部分是车辆运动时考虑平顺性的代价(对应右上Smoothness Cost)。

约束设计

 自行车模型和动态约束:

 初始约束:

状态/控制边界约束:

 

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

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

相关文章

Python通过SFTP实现网络设备配置备份

一、背景 为了防止网络设备意外损坏,导致配置文件无法恢复,可以通过将网络设备的配置文件备份到本地电脑上。 一般情况下,设备支持通过FTP、TFTP、FTPS、SFTP和SCP备份配置文件。其中使用FTP和TFTP备份配置文件比较简单,但是存在…

JAVA虚拟机实战篇之内存调优[4](内存溢出问题案例)

文章目录 版权声明修复问题内存溢出问题分类 分页查询文章接口的内存溢出问题背景解决思路问题根源解决思路 Mybatis导致的内存溢出问题背景问题根源解决思路 导出大文件内存溢出问题背景问题根源解决思路 ThreadLocal占用大量内存问题背景问题根源解决思路 文章内容审核接口的…

尚硅谷JavaScript高级学习笔记

01 准备 JavaScript中函数是对象。我们后续描述构造函数的内存模型时,会将构造函数称为构造函数对象。 02 数据类型 typeof 运算符来查看值的类型,它返回的是类型的字符串值 会做数据转换 03 相关问题 04数据_变量_内存 05相关问题1 06相关问题2 …

办公电脑换成MacBookPro半年之后……

小白是从2008年开始接触电脑的,当时朋友给我注册的第一个QQ账号是2008年4月。 从此,小白一直认为电脑全部都是Windows系统。直到上大学那年,看到了外教老师的MacBookPro…… 折腾电脑的开始居然是起源于诺基亚手机,给半智能S40的…

Igraph入门指南 3

4、图转换到其他R数据结构 图是对实体关系的表达,在igraph中,图可以转换为三种数据结构。 4-1 图转邻接矩阵:as_adjacency_matrix | as_adj,结果是矩阵 邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵,但本函数使用…

老司机都懂的!【打赏】完美运营的最新视频打赏系统

完美运营的最新视频打赏系统优于市面上95%的打赏系统,与其他打赏系统相比,功能更加强大,完美运营且无bug。支付会调、短链接生成、代理后台、价格设置和试看功能等均没有问题。 以上为原简介,经测试验证。成功搭建并可以正常进入…

Linux学习之线程

目录 线程概念 1.什么是线程? 2.线程的优缺点 3.线程异常 4.线程用途 线程操作 1.如何给线程传参 2.线程终止 3.获取返回值 4.分离状态 5.退出线程 线程的用户级地址空间: 线程的局部存储 线程的同步与互斥 互斥量mutex 数据不一致的主要过…

Sora的核心技术预测

在ChatGPT火爆全网的一年后,OpenAI公司又一次大显身手:推出了全新的文生视频大模型Sora。直接输入文字提示词,即可直接生成长达60秒的视频。 “现实真的要不存在了。” 马斯克直接大呼:人类彻底完蛋了! 马斯克为什么…

CDN(内容分发网络):加速网站加载与优化用户体验

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【NR技术】 3GPP支持无人机的关键技术以及场景

1 背景 人们对使用蜂窝连接来支持无人机系统(UAS)的兴趣浓厚,3GPP生态系统为UAS的运行提供了极好的好处。无处不在的覆盖范围、高可靠性和QoS、强大的安全性和无缝移动性是支持UAS指挥和控制功能的关键因素。与此同时,监管机构正在调查安全和性能标准以及…

WinSCP下载安装并结合内网穿透实现固定公网TCP地址访问本地服务器

文章目录 1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件,它的主要功能是在本地与远程计…

二叉树入门

这篇博客通过手动创建的一个简单二叉树,实现二叉树遍历,返回节点,叶子个数,查找结点等相关操作。 1. 二叉树的概念 二叉树不为空时,由根节点,左/右子树组成,逻辑结构如下,当二叉树…

上班族真香副业:工资4500,靠steam游戏搬砖项目月入过w

steam游戏搬砖项目已经存在好多年了,这个项目比较冷门且能持续稳定盈利,是一个非常不错的项目。即使你没玩过steam游戏也没关系,这个steam游戏搬砖项目既不需要你会玩游戏,也不需要你懂英语。 steam游戏搬砖项目的盈利点在汇率差和…

Lwip之TCP服务端示例记录(1对多)

前言 实现多个客户端同时连接初步代码结构已经实现完成(通过轮训的方式) // // Created by shchl on 2024/3/8. // #if 1#include <string.h> #include "lwip/api.h" #include "FreeRTOS.h" #include "task.h" #include "usart.h&…

寻找数组的中心索引

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

斐讯N1 刷coreelec 笔记

1.下载恩山的镜像 下载好后不需要刷优盘 这个很方便&#xff0c;可以勾选擦除flash &#xff08;如果第一次装&#xff09; 升级可以不用勾选 详细使用参考恩山大佬的描述 2.下载插件 想装openwrt 发现镜像里面 coreelec-addons 挂了&#xff0c;研究了好长时间可以 去githu…

一文扫荡,12个可视化图表js库,收藏备用。

hello&#xff0c;我是贝格前端工场&#xff0c;可视化图表在web前端开发中经常碰到&#xff0c;是不是很疑惑这些炫酷的图表是怎么实现的&#xff0c;其实是通过js库开发的&#xff0c;本文带来12个javascript库的介绍&#xff0c;欢迎关注我&#xff0c;阅读精彩内容。 一、什…

2024 RubyMine 激活,分享几个RubyMine 激活的方案

文章目录 RubyMine 公司简介我这边使用RubyMine 的理由RubyMine 2023.3 最新变化AI Assistant 正式版对 AI 生成名称建议的支持改进了 Ruby 上下文单元测试生成 RailsRails 应用程序和引擎的自定义路径Rails 路径的自动导入对存储在默认位置之外的模型、控制器和邮件器的代码洞…

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…

C++进阶之路---继承(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承与友元 友元关系不能继承&#xff0c;也就是说基类友元不能访问子类私有和保护成员。 class Student; class Per…