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)+mMl2mlb​x˙+I(m+M)+mMl2ml​u​
已知系统状态空间方程的标准形式为:
{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¨ψ˙​ψ¨​​⎦⎥⎥⎤​=⎣⎢⎢⎢⎡​0000​1−I(m+M)+mMl2b(I+ml2)​0−I(m+M)+mMl2mlb​​0I(m+M)+mMl2m2l2g​0I(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=[10​00​01​00​]×⎣⎢⎢⎡​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=∫t0​tf​​[XTQX+UTRU]dtmin(J)

  1. 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中较大的一项对应在收敛过程中优先考虑的系统变量。
  2. 同理,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控制相关推荐

  1. [LQR简要快速入门]+[一级倒立摆的LQR控制]

    [LQR简要快速入门]+[一级倒立摆的LQR控制] 1. 什么是LQR 2. 公式含义 3. 倒立摆的建模 3.1 线性化 3.2 状态空间建立 4. LQR算法实现 5. MATLAB代码仿真 6. ...

  2. 线性系统大作业——2.二阶倒立摆建模与控制系统设计(上)

    文章目录 0.简介 1.建立数学模型 1.1.牛顿运动定律分析 欧拉-拉格朗日方程分析 2.Simulink仿真 3.使用SimMechancis仿真 4.在平衡点附近模型线性化 5.系统能控性.能观 ...

  3. 倒立摆系统分析及控制

    引言:倒立摆系统是一个典型的非线性.强耦合.多变量和不稳定系统,作为控制系统的被控对象,许多抽象的告知概念都可以通过倒立摆直观地表现出来. 一. 倒立摆模型 对系统建立数学模型是系统分析.设计的前提, ...

  4. matlab 2014B ,simulink-simscape 创建 物理 倒立摆-动画-pid 控制 傻瓜教程-100%学会

    PS: 网上教程太少了,自己花了3天,终于自己摸索出来了.人老了,搞东西太慢了. 先看最后效果(初始角度向右边偏25度): 1.准备工具 matlab2014b 或者以上,往下版本不清楚. 2.创建工 ...

  5. 直线一级倒立摆数学建模与控制仿真

    学习目标: 1.推导直线型一级倒立摆的数学建模公式,得到状态空间表达式和传递函数,并分析系统的稳定性 2.采用控制算法将系统从不稳定调整到稳定状态,并用matlab和simulink仿真实现 学习内容 ...

  6. 现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

    目录 摘要 数学建模 1. 倒立摆系统简介 2. 直线倒立摆系统数学模型 系统传递函数模型 系统状态空间数学模型 系统分析 3. 直线一级倒立摆系统分析 (1)系统稳定性分析 (2)系统能控性和能观性 ...

  7. 【双足机器人(2)】倒立摆运动学模型构建(附代码)

    1. 简介 在上一期的文章中,我们对线性倒立摆在2D平面内的运动过程进行了分析,并给出了基于轨道能量的线性倒立摆控制过程. [双足机器人(1)]线性倒立摆及其运动控制(附代码) 在本期文章中,我们将建 ...

  8. 二级倒立摆的matlab模拟,输出倒立摆运动过程角度变化

    目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 二级倒立摆是一个复杂非线性.强耦合.多变量的自然不稳定系统,它也是双足行走机器人.火箭飞行姿态控制等许多控制对象的最简单模型.倒双摆是一个 ...

  9. 基于树莓派的电机倒立摆控制系统开发

    目录(注:完整论文和代码私聊QQ2522170001) 第1章绪论 1.1背景和意义 1.1.1 背景 1.1.2 意义 1.2 国内外研究现状 第二章 倒立摆设计方案 2.1 倒立摆系统建模 2.2 ...

  10. MATLAB中SSQJ,基于lqr的一级倒立摆仿真研究

    基于lqr的一级倒立摆仿真研究 综合性实验设计题目:直线一级倒立摆班级:0802姓名:郭长春指导老师:张白莉学号:200807211065摘要倒立摆是一个复杂的多变量强祸合不稳定非线性的系统,借助于这 ...

最新文章

  1. 58.最全正则表达式教程,最好正则表达式教程
  2. Freemarker入门小案例(生成静态网页的其中一种方式)
  3. Lesson 4.张量的线性代数运算
  4. mysql数据库项目式教程答案_MySQL数据库项目式教程(高职)
  5. Product API buffer
  6. DLT(Diagnostic Log and Trace)嵌入式系统程序运行记录
  7. 中国式创新技术“步态识别”终于来临,你大胆地走两步,我就知道你是谁
  8. leetcode404. 左叶子之和
  9. hadoop安装,提前确认hadoop版本是32位还是64位。
  10. Visual Studio Developer Assistant 3月新功能展示
  11. 卖白菜|贱卖白菜|卖大白菜|贱卖大白菜|买白菜
  12. centos 6.2   为mysql5.6.10安装 HandlerSocket插件
  13. CSS中设置height:100%无效的解决方案
  14. 主题抽取的核心——主题词表
  15. 虚拟现实,增强现实的安全问题
  16. 华为鸿蒙源代码在哪里下载,华为鸿蒙正式开源!源码地址公布,对外开放下载...
  17. 【Serverless】云函数微信小程序
  18. SQL语句-各种查询
  19. C++ winpcap网络抓包代码实现,以及抓包内容解析。
  20. 我的三年Android开发总结之回忆过去

热门文章

  1. 《Go语言实战》William Kennedy中文版学习笔记
  2. 斗鱼直播间弹幕爬取2020年最新python
  3. 一款 redis客户端工具RedisDesktopManager的安装和使用
  4. Java面试:java简历包装医疗项目
  5. 如何在HTML网页引入思源黑体
  6. 胶东机场t1离哪个停车场近,青岛胶东国际机场停车场攻略
  7. python 有限域函数库_有限域(4)——程序实现有限域的运算
  8. 软件项目开发过程中应编写的十三类文档
  9. 计算机桌面如何分区,笔记本怎么分区
  10. Mac系统使用idea常用快捷键