PID/LQR/MPC自行总结使用
**PID/LQR/MPC自行总结使用**自学控制相关知识,已经一年多了,现在回头看看还是有很多模糊不明确的地方,准备借此机会进行总结一下,第一次写博客,如果错误和不合理之处,请批评指正。
1.pid
包括三部分:kp,ki,kd
kp:比例系数,可迅速反映系统的当前基本误差,从而减小误差,但无法消除稳态误差,比例过大会造成系统不稳定。
ki:积分系数,反映系统在一个周期内的累计误差,只要系统内存在误差,积分作用就会一直发挥作用,输出控制量对系统进行控制,积分作用太强则会使得系统超调加大,系统振荡。
kd:微分系数,反映系统误差的变化率,具有预见性,可以减小超调,提高系统的稳定性,加快系统的动态响应,但会放大噪声。
频域表达式为:
G(s)=Kp+Ki/s+Kd∗s.G(s) = Kp+Ki/s+Kd*s\,. G(s)=Kp+Ki/s+Kd∗s.
时域表达式为:
u(t)=Kp∗e(t)+Ki∗∫0te(t)dt+Kd∗de(t)dt.u(t) =Kp*e(t)+Ki* \int_0^t e(t)dt\,+Kd*\frac{de(t)}{dt}. u(t)=Kp∗e(t)+Ki∗∫0te(t)dt+Kd∗dtde(t).
离散化后为:
u(k)=u(k−1)+(Kp+Ki∗T+KdT)∗e(k)−(Kp+2KdT))∗e(k−1)+KdT∗e(k−2)u(k) =u(k-1)+(Kp+Ki*T+\frac{Kd}{T})*e(k)-(Kp+\frac{2Kd}{T}))*e(k-1)+\frac{Kd}{T}*e(k-2) u(k)=u(k−1)+(Kp+Ki∗T+TKd)∗e(k)−(Kp+T2Kd))∗e(k−1)+TKd∗e(k−2)
其中,T为控制器的计算周期,即dt。
比例系数为:Kp
积分系数为:Ki= KpT/Ti
微分系数为:Kd= KpTd/T
参考资料:
https://www.cnblogs.com/qsyll0916/p/8580211.html
https://blog.csdn.net/yunddun/article/details/107720644
2.LQR
在基本控制理论的基础上,进一步设计一个代价函数,用于优化控制量,代价函数一般设置为系统达到稳定状态以及状态偏差最小,和控制量较小。研究对象为以状态空间方程形式给出的线性系统。
J=12∫0∞xTQx+uTRudt.J=\frac{1}{2} \int_0^\infty x^TQx+u^TRudt\,. J=21∫0∞xTQx+uTRudt.
代价函数一般要保证为正值,所以使用转置乘以本身,即达到平方的效果
Q,R分别为状态权重矩阵和控制权重矩阵。
Q半正定矩阵,R为正定矩阵。
LQR求解:
令
u=−Kxu=-Kxu=−Kx
代入代价函数:
J=12∫0∞xT(Q+KTRK)xdt.J=\frac{1}{2} \int_0^\infty x^T(Q+K^TRK)xdt\,. J=21∫0∞xT(Q+KTRK)xdt.
假设存在一个常量矩阵P使得:
ddt(xTPx)=−xT(Q+KTRK)x.(if)\frac{d}{dt} (x^TPx)=-x^T(Q+K^TRK)x. (if) dtd(xTPx)=−xT(Q+KTRK)x.(if)
反代回原代价函数可得;
J=−12∫0∞ddt(xTPx)dt.J=-\frac{1}{2} \int_0^\infty \frac{d}{dt} (x^TPx)dt\,. J=−21∫0∞dtd(xTPx)dt.
解上式可得:
J=12(x(0)TPx(0)),.J=\frac{1}{2} (x(0)^TPx(0)),. J=21(x(0)TPx(0)),.
微分展开if式左侧并移项得:
x˙TPx+xTPx˙+xTQx+xTKTRKx=0\dot{x}^TPx+x^TP\dot{x}+x^TQx+x^TK^TRKx=0 x˙TPx+xTPx˙+xTQx+xTKTRKx=0
中间省略一系列推导过程可得:
ATP+PA+Q−PBR−1BTP=0A^TP+PA+Q-PBR^-1B^TP=0 ATP+PA+Q−PBR−1BTP=0
A,B,Q,R都已知,可以解出上述Riccati方程
利用matlab即可求解:K = lqr(A,B,Q,R)
参考资料:
https://www.cnblogs.com/niulang/p/9066759.html
https://blog.csdn.net/gophae/article/details/101981600
https://blog.csdn.net/zhouyy858/article/details/107606500
3.MPC
与LQR一样,MPC也是进行优化,它们的目标函数都是多个优化目标乘以不同的权重然后进行求和得到,区别在于,在同一控制周期内,LQR只计算一次,而MPC则是一个滚动优化的过程,在每一个采样周期内计算得到一组控制序列,但是只是将第一个控制的值发给控制器。
MPC是一种基于模型的闭环优化控制策略。主要包括预测模型,滚动优化,反馈校正三个部分。其优点在于具有显式处理约束的能力这是因为:将约束加到未来的输入,输出或者状态量上,就可以改变模型对于系统未来动态行为的预测,且可以将约束放在一个在线求解的二次规划或者非线性规划问题中。
3.1.预测模型
预测模型要根据具体的工程背景来表示,目前用的较多的是状态空间模型。
一般我们得到的都是连续空间模型,需要将其进行离散化,得到离散状态下的状态空间方程。
x(k+1)=A(T)x(k)+B(T)u(k).x(k+1) =A(T)x(k)+B(T)u(k). x(k+1)=A(T)x(k)+B(T)u(k).
其中:
A(T)=TA+I.A(T) = TA+I. A(T)=TA+I.
B(T)=TB.B(T) = TB. B(T)=TB.
建立新的状态方程为:
ξ(k)=[x(k),u(k−1)]T.\xi(k) = [x(k),u(k-1)]^T. ξ(k)=[x(k),u(k−1)]T.
ξ(k+1)=A~ξ(k)+B~Δu(k)\xi(k+1) = \tilde{A}\xi(k)+ \tilde{B}\Delta u(k) ξ(k+1)=A~ξ(k)+B~Δu(k)
A~=[AB0(Nu,Nx)I(Nu)]\tilde{A}=\begin{bmatrix} A & B \\ \\ 0(Nu,Nx) & I(Nu) \end{bmatrix} A~=⎣⎡A0(Nu,Nx)BI(Nu)⎦⎤
B~=[BI(Nu)]\tilde{B}=\begin{bmatrix} B \\ \\ I(Nu) \end{bmatrix} B~=⎣⎡BI(Nu)⎦⎤
Nx为状态量的个数
Nu为控制量的个数
此处这么添加应该是为了状态空间方程维度的一致性,便于后续控制
针对此系统可以得知未来系统p步的状态和输出,可以依靠上述方程计算得出。令系统方程为:
Y(k)=Sξ(k)+SuΔu(k).Y(k) =S_\xi(k)+S_u\Delta u(k). Y(k)=Sξ(k)+SuΔu(k).
则一步一步推算可得:
在此基础上构建代价函数可得:
在此基础上添加控制量和状态量等约束,就可以通过计算机来求解,得到未来k步可能需要的控制增量:
取控制增量的第一项作为实际的控制增量,再根据上一步的控制输入u(k-1)即可得到当前步的实际控制输入:
u(k)=u(k−1)+Δu(k)u(k)=u(k-1)+\Delta u(k) u(k)=u(k−1)+Δu(k)
参考资料:
https://blog.csdn.net/u013914471/article/details/83824490
Torque Coordinated Control of Four In-Wheel Motor Independent-Drive Vehicles With Consideration of the Safety and Economy
https://zhuanlan.zhihu.com/p/99409532
PID/LQR/MPC自行总结使用相关推荐
- 平衡小车的控制算法(PID,LQR,MPC)及arduino程序导航贴
目录 平衡小车电机位置测试小实验 1.编码器脉冲计数 PID控制算法 平衡小车PID调参实验 位置环 2.编码器计数转换角度 小车整体的动力学建模 通过特征值判断系统动态特性 龙伯格观测器 平衡小车电 ...
- Simulink/Carsim联合仿真,基于pid,mpc自适应巡航控制,定速巡航,紧急避撞等
Simulink/Carsim联合仿真,基于pid,mpc自适应巡航控制,定速巡航,紧急避撞等. 包括以下: (1)Carsim参数设置cpar文件 (2)matlab代码s函数 (3)Simulin ...
- PID与MPC的理解小技巧
首先大家想象一个场景: 假设你的导师安排了文献阅读的任务,一个月阅读30篇英文文献,然后导师给你制定一个阅读计划.制定阅读计划有以下两种方式: 方式一: 根据你现在完成的量与目标工作量之间的差距制定阅 ...
- 01.计算机知识常识整理
一.环境和快捷键语法常识 1.虚拟环境和控制器 虚拟的环境可以根据自己的需要设定,大大的节省资源. 创建环境.png 控制台.png 虚拟环境的管理:把虚拟的环境放到一个文件夹下 控制台的第一行告诉我 ...
- Apollo学习笔记(7)车辆运动学模型
这里又整了一遍车辆运动学,之前在Autoware那会,已经在控制那一部分整过一次了,就当复习了吧. 前言 车辆的控制目前用的最广的有三种方式: PID LQR MPC 其中,PID是一种对模型无要求的 ...
- “狂飙”的自动驾驶车,用了哪些规控算法?
视频中这辆"狂飙"的自动驾驶车,正通过MPC轨迹跟踪控制器使其沿着规划好的轨迹行驶.作者用C++实现了MPC算法,并利用ROS与自动驾驶仿真器CARLA进行联合仿真,测试了算法的有 ...
- Apollo代码学习(七)—MPC与LQR比较
Apollo代码学习-MPC与LQR比较 前言 研究对象 状态方程 工作时域 目标函数 求解方法 前言 Apollo中用到了PID.MPC和LQR三种控制器,其中,MPC和LQR控制器在状态方程的形式 ...
- 对MPC原理和公式进行通俗解释及MATLAB代码实现
笔者在翻阅了一天网上关于模型预测控制的讲解资料后,觉得绝大部分的讲解都没有讲解的很清楚,没有很清晰的展现模型预测这样设计的原理和目的到底是什么.于是决定自己理一理思路. 目录 一.引言 二.MPC是什 ...
- 第七篇(下),MPC工程化总结
目录 一.引言 二.MPC的理解与实现 2.1 模型设计与实现 2.2 MPC工程实现步骤 三.参考资料 3.1 基础理论 3.2 Refer to Apollo 3.3 其它实例参考 3.4 MAT ...
最新文章
- KOAProgressBar
- 【cogs 309】香甜的黄油
- Rational Purify 使用及分析实例(转载)
- weblogic 扫描不到jar包的类问题解决方案
- .NET Core 3.0 特性初探:C# 8、WPF、Windows Forms、EF Core
- Android之使用AIDL时的跨进程回调—Server回调Client
- 存放80000000学生成绩的集合,怎么统计平均分性能高
- 基于CSS3实现闪光条效果
- Emgu-WPF学习使用-阈值化
- 草珊瑚理解IFC(inline formatting context)
- php跨域请求解决方案_解决TP接口跨域问题
- 【SQL】CONNECT BY 层次化查询
- 比较各种SpA分类标准
- Top 10 tips to prepare your Dynamics AX 2012 Go Live
- 常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)
- xorg介绍 xorg和桌面环境的关系
- Loadrunner中几个超时函数的用法
- 接触者追踪(Contact tracing)时代的隐私
- [小说连载]张小庆,在路上(2)- 第一天上班
- 第四章 数据结构与算法之算法基础(时间复杂度、空间复杂度、稳定性详述)