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

news2024/11/19 6:29:41

目录

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

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

约束设计

 自行车模型和动态约束:

 初始约束:

状态/控制边界约束:

 

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

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

相关文章

【万题详解】DFS搜索专题合集(上)

专栏推荐 我的专栏——专栏链接 1.文章平均质量分 70分以上 2.以洛谷题为基础,解决C问题 3.有题目、讲解、思路、参考代码…… 4. 文章数:29 (2024.3.8) 课前C小程序(脱控极域电子教室) 这个图标相信…

‘老生常谈’ - 图书管理系统

在软件开发中,增、删、改、查这几个业务非常常见 增 基于axios从服务器拿到需要数据,进行渲染、封装,新增数据并不是一条一条渲染,而是整体重新渲染; 对于该系统新增数据:收集表单数据、提交服务器保存 -…

C++ 实战项目之 Boost 搜索引擎

项目地址:https://gitee.com/Vertas/boost-searcher-project 1. 项目背景 日常生活中我们使用过很多搜索引擎,比如百度,搜狗,360搜索等。我们今天是要实现一个像百度这样的搜索引擎嘛?那是不可能的,因为像…

听 GPT 讲 client-go 源代码 (24)

分享更多精彩内容,欢迎关注! File: client-go/applyconfigurations/batch/v1/jobstatus.go 在client-go的applyconfigurations/batch/v1/jobstatus.go文件中,定义了与Job的状态相关的配置和操作。 文件中定义了以下几个结构体: Jo…

投标中项目组织结构的设置以及调整(样式表,多级列表)

投标中项目组织结构的设置以及调整(样式表,多级列表): 投标项目中需要处理大规模的文字排版,就是需要用到样式表(解决层级关系),多级列表(解决自动编号的问题&#xff0…

WatiN——Web自动化测试(三)【弹出窗口处理】

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

Day25:安全开发-PHP应用文件管理模块包含上传遍历写入删除下载安全

目录 PHP文件操作安全 文件包含 文件删除 文件编辑 文件下载 云产品OSS存储对象去存储文件(泄漏安全) 思维导图 PHP知识点 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框…

7个实用的CSS技巧

1. First letter drop 首字母丢失 我们可以使用 :first-letter 来删除文本的第一个字母: p:first-letter {font-size: 200%;color: #8A2BE2; }:first-letter 选择器用于指定元素的首字母样式,它仅适用于块级元素。效果如下: codepen.io/OMGZui/pen/… …

Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器

引言 在当今的软件开发世界中,网络通信已成为不可或缺的一部分。Qt,作为一个跨平台的C框架,为我们提供了强大的网络编程能力。本文将带你深入Qt的网络模块,探索如何使用QNetworkAccessManager、QNetworkRequest和QNetworkReply等核…

读《文明之光》第1册总结

人类几千年的文明史和地球的历史相比,实在是太短暂了,大约相当于几分钟和一年的关系。人类已经走过的路,相比今后要走的漫漫长路,只能算是刚刚起步。如果跳出一个个具体事件,站在历史的高度去看,我们会发现…

找出单身狗1,2

目录 1. 单身狗12. 单身狗2 1. 单身狗1 题目如下: 思路:一部分人可能会使用对数组排序,遍历数组的方式去找出只出现一次的数字,但这种方法的时间复杂度过高,有时候可能会不满足要求。 有一种十分简便的方法是使用异或…

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念🎧面试题✒️1.2static的特性🎧1.3思考🎧 2.友元2.1什么是友元?🎧2.2两种友元关系:🎧 1.static成员 1.1概念🎧 🔎 static关键字用于声明类…

Python教程,python从入门到精通 第1天 温习笔记

1.1 字面量 1.2 注释 1.3 变量 1.4 数据类型 1.5 数据类型转换 1.6 标识符 1.7 运算符 1.8 字符串的三种定义方式 1.9 字符串拼接 1.10 字符串格式化 1.11 掌握格式化字符串的过程中做数字的精度控制 1.12 掌握快速字符串格式化的方式 1.13 字符串格式化-表达式的格…

动态规划基础模型总结

前言 动态规划是用一个数来表示一堆状态,可以看成是对暴搜的优化 暴搜一个一个数枚举过去,但DP是一堆堆数枚举,效率会快很多; 状态数用几维表示:从小到大考虑,看怎么样才能够让答案清楚表达出来 需要一定的…

下载一些ROS的包的方式

ROS Index 我们可以去ROS Index网站下载一些我们需要的包。打开浏览器在网址框输入index.ros.org。或者点击此处链接ROS Index 在这个网站中我们可以浏览并找到我们需要的包,也可以下载它的源代码或者仅安装到我们的系统中来使用。(安装过程在终端中进行…

LeetCode的使用方法

LeetCode的使用方法 一、LeetCode是什么?1.LeetCode简介2.LeetCode官网 二、LeetCode的使用方法1.注册账号2.力扣社区力扣编辑器 2.1 讨论发起讨论参与讨论关注讨论 2.2 文章撰写文章关注文章 3.力扣面试官版测评面试招聘竞赛 4.力扣学习LeetBook 书架我的阅读猜您喜…

【PyTorch】进阶学习:探索BCEWithLogitsLoss的正确使用---二元分类问题中的logits与标签形状问题

【PyTorch】进阶学习:探索BCEWithLogitsLoss的正确使用—二元分类问题中的logits与标签形状问题 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、Py…

智能指针基础知识【C++】【RAII思想 || unique_ptr || shared_ptrweak_ptr || 循环引用问题】

目录 一,为什么需要智能指针 二,内存泄露的基本认识 1. 内存泄露分类 2. 常见的内存检测工具 3,如何避免内存泄露 三,智能指针的使用与原理 1. RAII思想 2. 智能指针 (1. unique_ptr (2. shared_…

【重制版】WSDM 2024 2023时空时序论文总结

🌟【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘!🚀 欢迎大家关注时空探索之旅 WSDM 2024于2024年3月4日-3月8日在墨西哥梅里达(Mrida, Mxico)正在举行。目前官网已经放出了所有被录用论文的表单(链接…

2024037期传足14场胜负前瞻

2024037期售止时间为3月9日(周六)20点00分,敬请留意: 本期深盘多,1.5以下赔率4场,1.5-2.0赔率5场,其他场次是平半盘、平盘。本期14场整体难度中等。以下为基础盘前瞻,大家可根据自身…