开发者说 | Apollo控制算法之汽车动力学模型和LQR控制
动力学主要研究作用于物体的力与物体运动的关系。
车辆动力学模型一般用于分析车辆的平顺性和车辆操纵的稳定性。
对于车来说,研究车辆动力学,主要是研究车辆轮胎及其相关部件的受力情况。
比如纵向速度控制,通过控制轮胎转速实现;
横向航向控制,通过控制轮胎转角实现。
正常情况下,车辆上的作用力沿着三个不同的轴分布:
纵轴上的力包括驱动力和制动力,以及滚动阻力和拖拽阻力作滚摆运动;
横轴上的力包括转向力、离心力和侧风力,汽车绕横轴作俯仰运动;
立轴上的力包括车辆上下振荡施加的力,汽车绕立轴作偏摆或转向运动。
无论是LQR或是MPC控制,都需要有车辆的模型作为基础。


动力学模型
小角度侧偏角
匀速
不考虑环境因素

设e1为横向偏差,e2为航向角偏差,
进而得:

其中



其中:



LQR 理论是现代控制理论中发展最早也最为成熟的一种状态空间设计法。特别可贵的是,LQR可得到状态线性反馈的最优控制规律,易于构成闭环最优控制。
LQR 最优设计是指设计出的状态反馈控制器 K 要使二次型目标函数 J 取最小值,而 K 由权矩阵 Q 与 R 唯一决定,故此 Q、R 的选择尤为重要。
而且 Matlab 的应用为 LQR 理论仿真提供了条件,更为我们实现稳、准、快的控制目标提供了方便。

线性二次调节器(Linear Quadratic Regulator 或LQR)是基于模型的控制器,它使用车辆的状态来使误差最小化。
Apollo 使用 LQR 进行横向控制。横向控制包含四个组件:
横向误差
横向误差的变化率
朝向误差
朝向误差的变化率
变化率与导数相同,我们用变量名上面的一个点来代表。
我们称这四个组件的集合为X,这个集合X捕获车辆的状态。除了状态之外,该车有三个控制输入:转向、加速和制动。我们将这个控制输入集合称为U。
我们考虑有如下离散线性系统:

为了达到上述效果,定义代价函数:

其中x为状态量,u为控制量,Q为状态权重矩阵,R为控制权重矩阵,
为最终状态权重矩阵,N为到达最终状态的控制序列数。

其中K即为通过迭代求解黎卡提方程得到的等效闭环反馈矩阵。
至此,LQR算法求解过程可以总结为:
令P等于最终状态权重矩阵;
迭代黎卡提方程求出新的P;
当两次P的差值足够小时,计算反馈矩阵K;
根据反馈矩阵K获取最优控制量u;
采用《Apollo控制算法之汽车动力学模型》一文中的模型,代入AD、BD、
到以上算法对应各项,因模型中的CD项为常量,在LQR求解完成后加入即可获得最终所需的系统控制量。
另外参见:
https://blog.csdn.net/heyijia0327/article/details/39270597
开发者说 | Apollo控制算法之汽车动力学模型和LQR控制的更多相关文章
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型(CSOM)基础
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型(CSOM)基础 在SP2 ...
- 【Java】JMM内存模型和JVM内存结构
JMM内存模型和JVM内存结构 JAVA内存模型(Java Memory Model) Java内存模型,一般指的是JDK 5 开始使用的新的内存模型,主要由JSR-133: JavaTM Memor ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 介绍SP2013中远程APIs
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 介绍SP2013中远程APIs 当SP首次開始 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 JavaScript
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 JavaScript 与托管.NETclien ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 托管代码(.NET)
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 托管代码(.NET) 在SP2010中,微软提 ...
- 从零3D基础入门XNA 4.0(2)——模型和BasicEffect
[题外话] 上一篇文章介绍了3D开发基础与XNA开发程序的整体结构,以及使用Model类的Draw方法将模型绘制到屏幕上.本文接着上一篇文章继续,介绍XNA中模型的结构.BasicEffect的使用以 ...
- NOSQL数据模型和CAP原理
NOSQL数据模型和CAP原理 http://blog.sina.com.cn/s/blog_7800d9210100t33v.html 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoS ...
- 网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)
以下的内容和之后的几篇博客只是比较初级的介绍,想要深入学习的话建议自己钻研<TCP/IP详解 卷1:协议> 1.ISO/OSI七层模型 下四层是为数据传输服务的,物理层是真正的传输数 ...
- 黑马-----内存模型和volatile详解
黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA线程-内存模型和volatile详解 一.单核内存模型 1.程序运行时,将临时数据存放到Cache中 2.将CPU计算所 ...
随机推荐
- 关于VS2013下制作和使用静态库和动态库
关于VS2013下制作和使用静态库和动态库 引言 什么是库:库是写好的现有的,成熟的,可以复用的代码. 所谓静态.动态是指链接.将一个程序编译成可执行程序的步骤: 静态库在链接阶段,会将汇编生成的目标 ...
- bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法
给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sampl ...
- ListView与SimpleAdapter(三)
一般用于只有两个控件的列表. 使用SimpleAdapter 的数据是以List<Map<String,?>>形式封装数据, List的每一节对应ListView的每一行. H ...
- SSM集成activiti6.0错误集锦(二)
项目环境 Maven构建 数据库:Orcle12c 服务器:Tomcat9 <java.version>1.8</java.version> <activiti.vers ...
- CentOS 安装 MongoDB
一.安装mongodb 本文介绍的安装方式是以二进制方式离线安装,相当于windows"绿色"安装版本的概念. 下载mongodb: # https://www.mongodb.c ...
- FileAttributes Enum
https://docs.microsoft.com/en-us/dotnet/api/system.io.fileattributes?view=netframework-4.7.2 读取FileA ...
- 【问题解决】连接mysql 8错误:authentication plugin 'caching_sha2_password
在刚安装好mysql8,使用native连接的时候报错 authentication plugin 'caching_sha2_password'... 首先确保服务已开启,然后通过cmd命令进入my ...
- 【第十七章】 springboot + devtools(热部署)
技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...
- hihoCoder week23 最短路径·一
spfa 最短路 #include <bits/stdc++.h> using namespace std; #define pb push_back #define INF 1e16; ...
- hihoCoder week7 完全背包
完全背包 题目链接 https://hihocoder.com/contest/hiho7/problem/1 #include <bits/stdc++.h> using namespa ...