对倒立摆的LQR控制
1 问题建模
首先对待研究的问题建立数学模型
在倒立摆模型分析这篇文章里,我们已经做了完整的受力分析。最终得到了关于系统变量的微分方程。
(M+m)x¨+bx˙−mlψ¨=u(M+m)\ddot{x}+b\dot{x}-ml\ddot{\psi}= u(M+m)x¨+bx˙−mlψ¨=u
(I+ml2)ψ¨−mglψ=mlx¨(I+ml^2)\ddot{\psi}-mgl\psi = ml\ddot{x}(I+ml2)ψ¨−mglψ=mlx¨
2 状态空间
可以将状态空间理解为一个包含系统输入、系统输出和状态变量的集合,它们之间的关系可以用一个一阶微分方程表达出来。
状态空间(集合)={系统输入系统输出状态变量}=一阶微分方程状态空间(集合)=\left\{ \begin{aligned} 系统输入\\ 系统输出\\ 状态变量 \end{aligned} \right\}=一阶微分方程 状态空间(集合)=⎩⎪⎨⎪⎧系统输入系统输出状态变量⎭⎪⎬⎪⎫=一阶微分方程
通过观察我们知道,目前系统模型是以二阶微分方程的形式描述的。为了消除方程中的高阶项,可以整理得到下面的式子。
{x˙=x˙x¨=m2l2gI(m+M)+mMl2ψ−b(I+ml2)I(m+M)+mMl2x˙+(I+ml2)I(m+M)+mMl2uψ˙=ψ˙ψ¨=mlg(m+M)I(m+M)+mMl2ψ−mlbI(m+M)+mMl2x˙+mlI(m+M)+mMl2u\left\{\begin{array}{l} \dot{x}=\dot{x}\\ \ddot{x}=\frac{m^2l^2g}{I(m+M)+mMl^2} \psi-\frac{b(I+ml^2)}{I(m+M)+mMl^2} \dot{x}+\frac{(I+ml^2)}{I(m+M)+mMl^2}u\\ \dot{\psi}=\dot{\psi}\\ \ddot{\psi}=\frac{mlg(m+M)}{I(m+M)+mMl^2}\psi-\frac{mlb}{I(m+M)+mMl^2}\dot{x}+\frac{ml}{I(m+M)+mMl^2}u \end{array}\right.⎩⎪⎪⎪⎨⎪⎪⎪⎧x˙=x˙x¨=I(m+M)+mMl2m2l2gψ−I(m+M)+mMl2b(I+ml2)x˙+I(m+M)+mMl2(I+ml2)uψ˙=ψ˙ψ¨=I(m+M)+mMl2mlg(m+M)ψ−I(m+M)+mMl2mlbx˙+I(m+M)+mMl2mlu
已知系统状态空间方程的标准形式为:
{x˙=Ax+Buy=Cx+Du\left\{\begin{array}{l} \dot{x}=Ax+Bu\\ y=Cx+Du \end{array}\right. {x˙=Ax+Buy=Cx+Du
式中x˙\dot{x}x˙表示系统中的一阶微分项,yyy表示系统状态。以矩阵运算的形式表示系统的状态空间方程:
[x˙x¨ψ˙ψ¨]=[01000−b(I+ml2)I(m+M)+mMl2m2l2gI(m+M)+mMl2000010−mlbI(m+M)+mMl2mlg(m+M)I(m+M)+mMl20]×[xx˙ψψ˙]+[0(I+ml2)I(m+M)+mMl20mlI(m+M)+mMl2]u\begin{bmatrix} \dot{x}\\ \ddot{x}\\ \dot{\psi}\\ \ddot{\psi} \end{bmatrix}= \begin{bmatrix} 0 & 1 & 0 & 0\\ 0 & -\frac{b(I+ml^2)}{I(m+M)+mMl^2} & \frac{m^2l^2g}{I(m+M)+mMl^2} & 0\\ 0 & 0 & 0 & 1 \\ 0 & -\frac{mlb}{I(m+M)+mMl^2} & \frac{mlg(m+M)}{I(m+M)+mMl^2} & 0 \end{bmatrix} \times \begin{bmatrix} x\\ \dot{x}\\ \psi\\ \dot{\psi} \end{bmatrix} + \begin{bmatrix} 0\\ \frac{(I+ml^2)}{I(m+M)+mMl^2}\\ 0\\ \frac{ml}{I(m+M)+mMl^2} \end{bmatrix} u ⎣⎢⎢⎡x˙x¨ψ˙ψ¨⎦⎥⎥⎤=⎣⎢⎢⎢⎡00001−I(m+M)+mMl2b(I+ml2)0−I(m+M)+mMl2mlb0I(m+M)+mMl2m2l2g0I(m+M)+mMl2mlg(m+M)0010⎦⎥⎥⎥⎤×⎣⎢⎢⎡xx˙ψψ˙⎦⎥⎥⎤+⎣⎢⎢⎢⎡0I(m+M)+mMl2(I+ml2)0I(m+M)+mMl2ml⎦⎥⎥⎥⎤u
y=[10000010]×[xx˙ψψ˙]+[0]×uy= \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \times \begin{bmatrix} x\\ \dot{x}\\ \psi\\ \dot{\psi} \end{bmatrix} + \begin{bmatrix} 0 \\ \end{bmatrix} \times u y=[10000100]×⎣⎢⎢⎡xx˙ψψ˙⎦⎥⎥⎤+[0]×u
3 LQR控制器设计
L(Linear)Q(Quadratic)R(Regulator),直译为线性二次型控制器。
可以通过加入反馈,使系统最终能达到稳定状态,但如何选取最好的系统特征值(极点)在系统收敛的前提下实现最优的收敛过程,这是我们目前要考虑的问题。
这里我们引入目标函数(价值函数),使系统在收敛的同时,满足JJJ最小:
J=∫t0tf[XTQX+UTRU]dtmin(J)J=\int ^{t_f}_{t_0}[X^TQX+U^TRU]dt\\ min(J) J=∫t0tf[XTQX+UTRU]dtmin(J)
- QQQ是一个对角矩阵,XTQX=ax12+bx22+cx32+......X^TQX=ax_1^2+bx_2^2+cx_3^2+......XTQX=ax12+bx22+cx32+......,当系统中的状态变量x≠0x≠0x=0时,我们可以通过调节QQQ中元素的值来改变该变量的对JJJ的影响。QQQ中较大的一项对应在收敛过程中优先考虑的系统变量。
- 同理,UTRUU^TRUUTRU则代表了系统输入UUU对价值函数JJJ的影响。因为JJJ是积分的形式,当矩阵RRR中某一项较大,则意味着我们希望该项对应的系统输入能够快速收敛到0。这么做的现实意义往往是以最小的代价(例如能耗)实现系统的稳态。
式子中代表系统输入的UUU在一个能够实现自稳定的系统中(例如我们这里设计的倒单摆系统)代表控制器反馈回路的输出。
们目前涉及的倒立摆系统只有一个输入,即倒立摆所受到的外部牵引力UUU,所以矩阵RRR仅有一个元素。另外有四个系统状态变量,分别是x,x˙,ψ,ψ˙x,\dot{x},\psi,\dot{\psi}x,x˙,ψ,ψ˙,因此对角矩阵QQQ的规模为4×44\times44×4。
在MATLAB中,我们可以调用lqr()lqr()lqr()函数生成满足JJJ最小的反馈矩阵KKK。KKK对应的就是各个系统变量反馈路径中的增益。即:
U=[K1,K2,K3,K4]×[xx˙ψψ˙]U=[K_1, K_2, K_3, K_4]\times\begin{bmatrix} x\\ \dot{x}\\ \psi\\ \dot{\psi} \end{bmatrix}U=[K1,K2,K3,K4]×⎣⎢⎢⎡xx˙ψψ˙⎦⎥⎥⎤
下图是倒立摆开环系统的阶跃响应。显然系统是不收敛的。
引入LQR反馈后系统的阶跃响应
4 MATLAB 代码
clc;
clear;
close all;% Parameters:
% m: mass of pendulum (kg)
% M: mass of cart (kg)
% b: dampling coefficient
% I: rotional inertia
% g: acceleration of gravity
% L: the distance from mass center to the hingem = 3.375;
M = 5.40;
b = 0.01;
I = 0.0703125;
g = 9.80665;
L = 0.25;% create transfer function model
s = tf('s');q = (m + M) * (I + m * L^2) - (m * L)^2;P_cart = (((I + m * L^2) / q) * s^2 - (m * g * L / q)) / ...(s^4 + (b * (I + m * L^2)) * s^3 / q - ((M + m) * m * g * L) * s^2 / q - b * m * g * L * s / q);P_pend = (m * L * s / q) / ...(s^3 + (b * (I + m * L^2)) * s^2 / q - ((M + m) * m * g * L) * s / q - b * m * g * L / q);sys_tf = [P_cart; P_pend];inputs = {'u'};
outputs = {'x'; 'phi'};
set(sys_tf,'InputName',inputs);
set(sys_tf,'OutputName',outputs);sys_tf% create state-space model
p = I * (m + M) + m * M * L^2;A = [0, 1, 0, 0;0, -b * (I + m * L^2) / p, (m^2 * L^2 * g) / p, 0;0, 0, 0, 1;0, -(m * L * b) / p, m * L * g * (M + m) / p, 0];B = [0;(I + m * L^2) / p;0;m * L / p];C = [1, 0, 0, 0;0, 0, 1, 0];D = [0;0];% definitions of system variables
states = {'x' 'x_dot' 'phi' 'phi_dot'};
inputs = {'u'}; outputs = {'x'; 'phi'};sys_ss = ss(A, B, C, D, 'statename', states, 'inputname', inputs, 'outputname', outputs);% poles of open loop system
poles = pole(sys_tf);
poles% impulse response of system
t = 0: 0.01: 1;
impulse(sys_ss, t);% step response of system
t = 0: 0.01: 1;
step(sys_ss, t);% LQR simulation
% Q matrix of LQR controller
Q = [1000, 0, 0, 0;0, 0, 0, 0;0, 0, 500, 0;0, 0, 0, 0];R = 0.1;% optimal gain matrix K
K = lqr(A, B, Q, R);Ac = A - B * K;
sys_lqr = ss(Ac, B, C, D, 'statename', states, 'inputname', inputs, 'outputname', outputs);% impulse response of system
t = 0: 0.01: 2;
impulse(sys_lqr, t);100% step response of system
t = 0: 0.01: 3;
step(sys_lqr, t);
对倒立摆的LQR控制相关推荐
- [LQR简要快速入门]+[一级倒立摆的LQR控制]
[LQR简要快速入门]+[一级倒立摆的LQR控制] 1. 什么是LQR 2. 公式含义 3. 倒立摆的建模 3.1 线性化 3.2 状态空间建立 4. LQR算法实现 5. MATLAB代码仿真 6. ...
- 线性系统大作业——2.二阶倒立摆建模与控制系统设计(上)
文章目录 0.简介 1.建立数学模型 1.1.牛顿运动定律分析 欧拉-拉格朗日方程分析 2.Simulink仿真 3.使用SimMechancis仿真 4.在平衡点附近模型线性化 5.系统能控性.能观 ...
- 倒立摆系统分析及控制
引言:倒立摆系统是一个典型的非线性.强耦合.多变量和不稳定系统,作为控制系统的被控对象,许多抽象的告知概念都可以通过倒立摆直观地表现出来. 一. 倒立摆模型 对系统建立数学模型是系统分析.设计的前提, ...
- matlab 2014B ,simulink-simscape 创建 物理 倒立摆-动画-pid 控制 傻瓜教程-100%学会
PS: 网上教程太少了,自己花了3天,终于自己摸索出来了.人老了,搞东西太慢了. 先看最后效果(初始角度向右边偏25度): 1.准备工具 matlab2014b 或者以上,往下版本不清楚. 2.创建工 ...
- 直线一级倒立摆数学建模与控制仿真
学习目标: 1.推导直线型一级倒立摆的数学建模公式,得到状态空间表达式和传递函数,并分析系统的稳定性 2.采用控制算法将系统从不稳定调整到稳定状态,并用matlab和simulink仿真实现 学习内容 ...
- 现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)
目录 摘要 数学建模 1. 倒立摆系统简介 2. 直线倒立摆系统数学模型 系统传递函数模型 系统状态空间数学模型 系统分析 3. 直线一级倒立摆系统分析 (1)系统稳定性分析 (2)系统能控性和能观性 ...
- 【双足机器人(2)】倒立摆运动学模型构建(附代码)
1. 简介 在上一期的文章中,我们对线性倒立摆在2D平面内的运动过程进行了分析,并给出了基于轨道能量的线性倒立摆控制过程. [双足机器人(1)]线性倒立摆及其运动控制(附代码) 在本期文章中,我们将建 ...
- 二级倒立摆的matlab模拟,输出倒立摆运动过程角度变化
目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 二级倒立摆是一个复杂非线性.强耦合.多变量的自然不稳定系统,它也是双足行走机器人.火箭飞行姿态控制等许多控制对象的最简单模型.倒双摆是一个 ...
- 基于树莓派的电机倒立摆控制系统开发
目录(注:完整论文和代码私聊QQ2522170001) 第1章绪论 1.1背景和意义 1.1.1 背景 1.1.2 意义 1.2 国内外研究现状 第二章 倒立摆设计方案 2.1 倒立摆系统建模 2.2 ...
- MATLAB中SSQJ,基于lqr的一级倒立摆仿真研究
基于lqr的一级倒立摆仿真研究 综合性实验设计题目:直线一级倒立摆班级:0802姓名:郭长春指导老师:张白莉学号:200807211065摘要倒立摆是一个复杂的多变量强祸合不稳定非线性的系统,借助于这 ...
最新文章
- 58.最全正则表达式教程,最好正则表达式教程
- Freemarker入门小案例(生成静态网页的其中一种方式)
- Lesson 4.张量的线性代数运算
- mysql数据库项目式教程答案_MySQL数据库项目式教程(高职)
- Product API buffer
- DLT(Diagnostic Log and Trace)嵌入式系统程序运行记录
- 中国式创新技术“步态识别”终于来临,你大胆地走两步,我就知道你是谁
- leetcode404. 左叶子之和
- hadoop安装,提前确认hadoop版本是32位还是64位。
- Visual Studio Developer Assistant 3月新功能展示
- 卖白菜|贱卖白菜|卖大白菜|贱卖大白菜|买白菜
- centos 6.2 为mysql5.6.10安装 HandlerSocket插件
- CSS中设置height:100%无效的解决方案
- 主题抽取的核心——主题词表
- 虚拟现实,增强现实的安全问题
- 华为鸿蒙源代码在哪里下载,华为鸿蒙正式开源!源码地址公布,对外开放下载...
- 【Serverless】云函数微信小程序
- SQL语句-各种查询
- C++ winpcap网络抓包代码实现,以及抓包内容解析。
- 我的三年Android开发总结之回忆过去