从小车倒立摆系统看系统建模控制LQR+LQE仿真

为什么要选择小车倒立摆

以下是chatgpt的回答。

倒立摆问题是控制理论中的一个经典问题,它代表了一类广泛存在的控制挑战--平衡和稳定化不稳定系统。研究倒立摆的建模与控制有以下几个原因:

1、教育意义:倒立摆是理解控制理论基本概念的一个很好的实例。它涵盖了动态系统建模、系统稳定性分析、控制器设计和系统仿真等方面,非常适合作为教学案例。

2、技术挑战:在技术层面,倒立摆是一个非线性动态系统,且本质上是不稳定的。设计一个能够使得摆杆保持直立的控制系统,需要用到各种先进的控制策略,比如线性化方法、最优控制、自适应控制、鲁棒控制等。

3、研究价值:由于倒立摆系统简单且具有代表性,它常常被用来验证新的控制理论和算法。研究者可以在这个模型上测试自己的理论,然后再将这些理论应用到更复杂的实际系统中。

4、应用背景:倒立摆问题在很多现实世界的应用中都有其对应的场景,如机器人平衡、飞行器姿态控制、汽车的主动悬挂系统等。因此,通过研究倒立摆的控制,可以为这些实际应用提供理论基础和技术指导。

5、标准测试平台:倒立摆系统是控制系统设计与分析的标准测试平台之一。它为研究者提供了一个共同的基准,以比较不同控制策略的性能。

6、科研竞赛:倒立摆控制问题经常被用作科学竞赛的问题,以激励学生和研究者发展新的控制算法。

因为这些原因,倒立摆成为了控制领域研究的热点,并且经常被用作各种科研文章和研究项目的对象。研究这类基础问题对于推动控制理论和应用的发展具有重要的意义。

一、物理建模与simulink仿真

1、系统描述

如上图所示,假设我们的小车质量为M,小球的质量为m,忽略轻杆的质量,小车在水平面上唯一受到外力F的作用,只做水平直线行驶运动,假设阻力与小车车速成正比,比例系数为b。 

假设小车质心位置为(x,y),则质心运动速度为,由于小车在垂直方向上没运动,所以,则小球的位置及水平与垂直两个方向的运动分量如下:

2、拉格朗日方程介绍

拉格朗日方程是分析力学系统中描述系统动力学行为的一组方程,尤其是在经典力学中,它为研究复杂系统的动力学提供了一种非常强大和通用的框架。拉格朗日方程的核心概念是拉格朗日量L,它是系统动能T和势能V之差的函数,L=T-V。拉格朗日方程

 其中,qi是系统的广义坐标,在我们的小车倒立摆系统中,广义坐标就是水平运动的x轴,和小球摆动的θ轴;F为系统受到的广义力,在我们的小车倒立摆系统中,就是外力F和阻力。

3、使用拉格朗日方程推导倒立摆微分方程

同学们还是自己动手推导一遍比较好,以上是我推的,如果有错,欢迎评论区告知。

根据最后两个微分方程便能搭建出simulink模型。

4、倒立摆系统simulink模型仿真

如上图所示,搭建完成的模型输入量为外力F和初始角度,输出量为小车水平运动的位置x,速度d_x,小球摆动的角度theta和角速度d_theta.

给定初始角度0.5 rad,外力F为0,自由运动下,可以预见,只要时间足够长,x会回到0位置附近

这图是角度,只要时间足够长,小球最终会停在pi (小车下端)位置。

从以上两张图,看着符合常理,为了生动性,我整理了个脚本,把运动的动画也画了出来

倒立摆动画

二、小车倒立摆系统线性化

1、线性化

小车的运动微分方程:

方程里包含了正弦,余弦运算,因此这个系统是非线性的,不容易控制。 我们的控制目标是把倒立摆直立在小车上(角度在0附近),因此可以在0附近对sin(θ),cos(θ)项进行优化。

考虑到\dot{\theta }^{2}sin(\theta )这一项中,如果sin(θ)近似为θ,则存在\dot{\theta }与θ耦合的情况,因此对于这一项,sin(θ)近似为0,其余项,sin(θ)近似为θ。简化后得到:

 取状态向量为:\left [ x,\dot{x} ,\theta,\dot{\theta }\right ]^T,将上述微分方程转换为状态空间方程的形式:

2、验证线性化结果的准确性

将重力g的数值改为-10,就可以将倒立摆的坐标切换到在小车底部角度为0(g为10时是以倒立垂直向上为0),给定初始角度,没给外力的情况下,小球角度便会在0附近摇摆。我们可以对比系统非线性微分方程与线性微分方程运动的曲线,检验线性化的过程是否正确。

初始角度为0.1rad时,非线性与线性的结果几乎一致。

初始角度设置为0.5rad时,两者就能看出相位和幅值上的差异。

以上两个实验可以说明线性化后的状态空间方程是符合预期的,在0附近结果与非线性的几乎一致。

三、系统的能控性与能观性分析

1、能控性

系统的能控性(Controllability)是控制理论中的一个基本概念,它描述了系统状态是否能够在有限时间内,通过适当设计的输入(或控制信号),从任何初始状态转移到任何期望的最终状态。如果一个系统满足这个条件,我们就说这个系统是完全能控的。

对于线性时不变系统,系统的能控性是由系统本身决定的(即,物理建模得出的状态空间方程不会变了),系统的能控性通过其数学模型来判定。假设系统的状态空间方程如下:

\dot{x}=Ax+Bu

y=Cx+Du

能控性可以通过判断能控矩阵(Controllability Matric)  CM来判定

CM=[B,AB,A^2B,A^3B...A^{n-1}B]

其中,n为系统状态的维度。如果矩阵CM的是满秩的,(系统的秩等于状态空间向量的维数n),则系统是完全能控的。意味着通过适当设计输入u(t),可以在有限时间内将系统的状态x(t)从任何初始状态转移到任何期望的最终状态。 

在matlab中,使用ctrb(A,B)命令可以直接生成能控性矩阵,使用rank函数可以计算能控矩阵的秩,结合使用这两个函数,可以直接判断系统的能控性。

 显示完全能控。

2、能观性

如果系统完全能控,我们可以通过设计控制律 u=-kx,对系统做反馈控制,其中x=[x_{1},x_{2},x_{3},x_{4}]'​,是系统的全部状态量。一般情况下,系统的输出y不会完全包含全部的状态量,因此,我们需要设计状态观测器,借助传感器采集的输出数据和已知的输入数据,逆推出全部状态量。如果一个系统的任何状态都可以通过基于一段时间内的输出和输入唯一确定,那么这个系统是完全能观的。

对于系统:

\dot{x}=Ax+Bu

y=Cx+Du

通过能观性矩阵,可以判断系统的能观性,能观性同样也是由系统本身唯一绝对的。能观矩阵如下:

OM=[C,CA,CA^2,CA^3...CA^{n-1}]^{T}

如果矩阵OM是满秩的,那么系统被认为是完全能观的。意味着通过观测输出y(t)和已知的输入u(t),可以在有限时间内确定系统的状态。

在matlab中,使用obsv(A,C)能生成观测矩阵,再配合rank函数求秩,便能判断系统的能观性。

在我们搭建的系统中,运行如下指令:

显示系统完全能观。

因此,可以进行后续的控制器和观测器开发。

四、小车倒立摆LQR闭环控制

在之前直流电机控制仿真里有讲过状态控制的基本架构,有兴趣的同学可以再回去看看,链接如下

好玩的直流电机调速实验、PID、极点配置、LQR、观测器;不讲大道理_lqr控制器观测器-CSDN博客

 我们建立的小车的状态空间方程,并且证明了系统是完全能观与完全可控的。

在我们的系统中,小车受到唯一外力F,我们的目标是:计算出恰当的F,使得小车能够运行到指定的任意x位置,并且倒立摆保持垂直直立(即θ为0)。

 控制目标涉及到两个输出变量:水平位移x和旋转角度θ;传统的Pid适用于单输入单输出的系统,因此,为了实现控制目标,我们采用状态反馈控制。

只要A-Bk的特征值小于0,系统就能稳定收敛。关键就在于寻找合适的k,使得A-Bk收敛。

在matlab中,可以通过lqr,matlab能够根据设置的权重系数Q和R,计算出k的最优解。

%% 控制器设计
Q = [1 0 0 0;
     0 1 0 0;
     0 0 10 0;
     0 0 0 100];
R = .0001;
K_lqr = dlqr(Ad_T,Bd_T,Q,R);

运行后结果如下:

 

初始角度不为0,小车先将初始角度调节到0位置,随后跟随x的阶跃需求,同时角度也维持在0。

运动动画视频:

LQR倒立摆运动-CSDN直播

五、倒立摆系统卡尔曼观测器设计

 1、为什么需要观测器

在实际系统中,并不是所有状态量都是可测量的,往往只有其中一两个状态量可以通过传感器测量得到。在小车倒立摆系统极点配置,LQR闭环控制-CSDN博客中,我们又需要用到全部状态向量,这时候,我们就引入状态观测器,来估算四个状态量。如下图所示:

2、卡尔曼观测器设计

卡尔曼观测器的结构框图如下,与之前文章提到的龙伯格观测器结构类似,只是卡尔曼观测器在求解观测器增益时,考虑了过程噪声和测量噪声,在实际中更为常用。

 在matlab中,可以用lqe函数求解增益Kf。

 用法都非常简单,只要设置好噪声,加上我们已经求得的A、B、C、D矩阵,直接代入函数就可以求得增益矩阵L,最后代入观测器求解器,就可以实现全状态量观测。

Vd = .1*eye(4);  % 过程噪声矩阵
Vn = 1;          % 测量噪声矩阵
[Kf,P,E] = lqe(A,Vd,C,Vd,Vn);        % 卡尔曼观测器

 3、建模与仿真

 

观测器也可以由help文档里的求解式直接换成状态空间方程。

sysKF = ss(A-Kf*C,[B Kf],eye(4),0*[B Kf]);  

 观测结果如下,尽管噪声很大,观测结果与实际真实结果仍很接近。

六、LQE+LQR仿真

仿真架构如下:

在加入测量噪声,初始角度不为0的情况下,初调控制效果如下。

八、模型和脚本

演示视频可以去b站看了。

倒立摆控制LQR+卡尔曼观测器_哔哩哔哩_bilibili

如果有需要源码和模型的客官,还是在某宝店<极简车辆控制>中获取,也可以b站工房直接购买。

包含7个脚本和5个模型。分别对应以上1到6章节中的6个实验,能绘制倒立摆小车运动动画。

运行脚本可直接运行模型。

如果使用低版本的模型,注意脚本中模型名称应该变动一下。

  • 19
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
自平衡车是一种具有双轮车体和水平姿态保持能力的智能机器人,具有广泛的应用前景。其控制系统主要包括运动控制和姿态控制两个部分,其中姿态控制是关键。在姿态控制中,二级倒立摆是一个经典的动态系统,是自平衡车姿态控制的基础。因此,本文提出了一种基于自平衡车的二级倒立摆LQR控制系统LQR控制是一种优化控制方法,是一种经典的线性控制方法。其基本思想是通过权重矩阵Q和R来优化控制效果,将系统状态从当前状态调整到期望状态。在自平衡车的姿态控制中,LQR控制可以用于设计控制器,控制车身的前后倾斜角度,使其保持稳定。 在本文中,我们采用了二级倒立摆模型来建立自平衡车的姿态控制系统。该系统包括两个质量、弹性、摩擦等属性的刚性杆,上杆代表车身,下杆代表车轮。根据牛顿力学定律,可以得到二级倒立摆的动态方程: $$m_1l_1\ddot{\theta_1}-(m_1+m_2)gl_1\sin\theta_1+m_2l_1l_2\ddot{\theta_2}\cos(\theta_1-\theta_2)-(m_1+m_2)l_1l_2\dot{\theta_2}^2\sin(\theta_1-\theta_2)=u_1$$ $$m_2l_2\ddot{\theta_2}-m_2gl_2\sin\theta_2+m_2l_1l_2\ddot{\theta_1}\cos(\theta_1-\theta_2)+m_2l_1l_2\dot{\theta_1}^2\sin(\theta_1-\theta_2)=u_2$$ 其中,$m_1$和$m_2$分别是车身和车轮的质量,$l_1$和$l_2$分别是车轴和车轮轴长度,$g$是重力加速度,$\theta_1$和$\theta_2$是车身和车轮的倾角,$u_1$和$u_2$分别是两个电机的输入。 根据动态方程可以设计状态反馈控制器,将状态向量$x=[\theta_1,\theta_2,\dot{\theta_1},\dot{\theta_2}]$作为反馈变量,控制输入为$u=[u_1,u_2]$,可以得到如下状态反馈矩阵: $$\dot{x}=Ax+Bu$$ $$A=\begin{bmatrix}0&0&1&0\\0&0&0&1\\-m_2g/l_1&-m_2g/l_2&0&0\\(m_1+m_2)g/l_1&-(m_1+m_2)g/l_2&0&0\end{bmatrix},B=\begin{bmatrix}0&0\\0&0\\1/m_1&0\\0&1/m_2\end{bmatrix}$$ LQR控制利用二次型函数来描述控制系统的性能,即寻求一个状态反馈矩阵K,使得二次性能指标最小。在本文中,我们将控制效果的重点放在车体的倾斜角,因此Q矩阵对应的权重主要放在$\theta_1$和$\theta_2$上,而R矩阵对应的权重主要放在电机输入量上,即$u_1$和$u_2$。 $$J=\int_{0}^{\inf}(x^TQx+u^TRu)dt$$ 根据LQR控制的方法,可以求解最优反馈系数矩阵K: $$K=-(B^TPB+R)^{-1}B^TPA$$ 其中P为代数矩阵,是利用Lyapunov方程求解的。 最终,将求解得到的K值用于控制系统的反馈控制器中,即可实现对车体的姿态控制。 本文的二级倒立摆LQR控制系统可以作为自平衡车姿态控制方案的一个基础,能够实现对车体的前后倾斜角度的控制,为自平衡车的应用提供了更加完整和系统控制方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极简车辆控制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值