自动控制原理学习--平衡小车的控制算法(三)

上一节PID的simulin仿真,这一节用LQR

一、模型

             

二、LQR

LQR属于现代控制理论的一个很重要的点,这里推荐B站的【Advanced控制理论】课程(up主DR_CAN),讲得很好,这里引用了他视频里讲LQR的ppt。

LQR属于lost优化问题,L:Linear ;Q:Quadratic二次型;R:regulater 调制器

主要是优化状态空间下,保证稳定的同时,如何选取状态方程特征值。

Q一般是根据你想控制那些状态给出不同权重的矩阵,就是一个对角矩阵,按顺序对状态量给出权重,给的数值越大,代表你对对应的状态控制要求也高,R是输入是N*1的矩阵,一般只有一维输入的话就一个数,越大表示对输入的控制要求更高。

二、平衡小车LQR

由于需要有状态转移矩阵和输入系数矩阵,所以需要建立动力学模型,建模方法很多(一般常用的是牛顿力分析和拉格朗日方程)

1.牛顿力学分析方程

(1)底盘只有水平方向的移动,故运动方程只有在x方向,

假设小车的摩擦系数为b,由m*a=F公式可得:

m \ddot{x}=F-b \dot{x}-N   其中N为车身(摆杆)对底盘在x方向的反作用力    (1)

(2)车身(摆杆)受力分析:

某一时刻单摆在水平上的位置:

x^{\prime}=x-l \cdot \sin (q)         

单摆在水平方向所收到的力只有N,所以水平方向的运动方程:

\boldsymbol{M} \ddot{\boldsymbol{x}}^{\prime }=\boldsymbol{N}

\boldsymbol{M} \left(\boldsymbol{x}-\boldsymbol{l} \cdot \sin (q)\right)^{\prime \prime}=\boldsymbol{N}

N=M \ddot{x}-M l \ddot{q} \cos (q)+M l \dot{q}^{2} \sin (q)                           (2)

由(2)带入(1)可得第一个运动方程

F=(M+m) \ddot{x}+b \dot{x}-M l \ddot{q} \cos (q)+M l \dot{q}^{2} \sin (q)           (3)

对单摆在垂直方向的受力分析

\begin{array}{l} \boldsymbol{M} \ddot{y}^{\prime }=\boldsymbol{P}-\boldsymbol{M} g \\ y= l cos(q)\\ \ddot{y}^{\prime }=-\ddot{q} \sin (q)-\dot{q}^{2} \cos(q) \\ \boldsymbol{M} l\left(-\ddot{q} \sin (q)-\dot{q}^{2} \cos(q)\right)=\boldsymbol{P}-\boldsymbol{M} g \\ \boldsymbol{P} =M g-M l \ddot{q} \sin (q)-M l \dot{q}^{2} {\cos (q)}\end{array}                               (4)

摆杆质心力矩平衡可得(I是摆杆的转动惯量,规则的物体容易求,但这里我看了人家,尝试去算,但都感觉不对,看过别人的基本设定在0.005左右都可以,后面试了其他值感觉都还可以用,其实有种方法是用实物倒放,让它自由摆动后测出相关的值去推,以后有时间可以试试) :

P l \sin (q)+N l \cos (q)=I \ddot{q}                                                    (5)

把公式(2)、(4)带入(5)可得

\begin{array}{l} M g l \sin (q)-M l \ddot{q} \sin q l \sin q-M l \dot{q}^{2} \cos q l \sin q \\ =M g l \sin q-M l^{2} \ddot{q}+M \ddot{x} l \cos q= I \ddot{q} \end{array}

化简得到第二条运动学方程:

\left(I+M l^{2}\right) \ddot{q}-M g l \sin (q)=M l \ddot{x} \cos(q)                                  (6)

由(3)和(6)得到的方程组:

\left\{\begin{array}{l} F=(M+m) \ddot{x}+b \dot{x}-M l \ddot{q} \cos (q)+M l \dot{q}^{2} \sin (q)\\ \\(I+M l^{2}) \ddot{q}-M g l \sin (q)=M l \ddot{x} \cos(q) \end{array}\right.

线性化, 为小接近的小角度,q为小接近0的小角度,\dot{q} ^2\approx 0, 𝑐𝑜𝑠(q) 为1, 𝑠𝑖𝑛(q) 为0,  F施加给小车的输入,改成u表示:

\left\{\begin{array}{l} u=(M+m) \ddot{x}+b \dot{x}-M l \ddot{q} \\ \\ (I+M l^{2}) \ddot{q}-M g l q=M l \ddot{x} \end{array}\right.                                       (7)

(7)可以改写成

\ddot{x} = \frac {-b(I+M l^2) }{p} \dot{x} +\frac{M^2 g l^2}{p} q +\frac{I+M l^2}{p} u

\ddot{q} = \frac {-b M l }{p} \dot{x} +\frac{M g l (M+m)}{p} q +\frac{M l}{p} u

其中   p=I(M+m)+ Mml^2

 设状态量为   

                          \begin{bmatrix} x \\ \dot x \\ q \\ \dot q \end{bmatrix}

最终的状态空间方程模型为:

\begin{bmatrix} x \\ \dot x \\ q \\ \dot q \end{bmatrix} =\begin{bmatrix} &0 &1 &0 &0 \\ & 0 & \frac{-b(I+M l^2)}{p} & \frac{M^2gl^2}{p} &0 \\ & 0 &0 &0 &1 \\ &0 & \frac{-bMl}{p} & \frac{Mgl(M+m)}{p} &0 \end{bmatrix} * \begin{bmatrix} x \\ \dot x \\ q \\ \dot q \end{bmatrix} +\begin{bmatrix} 0\\ \frac{I+M l^2}{p} \\ 0 \\ \frac{Ml}{p} \end{bmatrix} *u

                                  状态转移矩阵A                                    输入矩阵B

由于状态量与输出反馈一致,故C矩阵为

C=\begin{bmatrix} 1 & 0& 0&0 \\ 0& 1& 0&0 \\ 0& 0& 1&0 \\ 0& 0& 0& 1 \end{bmatrix}      如果你模型里面反馈数据只有平移速度 和角度速度,那C就算2*4的矩阵

D=0

有了A B C D矩阵就可以用LQR求解 (也可以用MPC来求解,套路都一样) ,MATLAB里面有lqr的求解器,一行代码搞定.

不过还有Q  和R 超参的设置, Q可简单设置[10 0 10 0] 顺序对应的水平方向 的x 和速度, 角度q 和角速度,意思是对x 和角度q重点控制,  R=1,对输入要求一般,都可以修改,根据具体情况修改超参。

MALAB 的代码很简单

K = lqr(A,B,Q,R)

会得出K,K 是4*1的向量,然后分别与状态量点乘就得到输入u的值,即F  这就是控制量

由于系统是非时变系统,因此lqr只需求一次K就行了

通过A 和B矩阵,也可以判断系统是否可控

Tc = ctrb(A,B);
if (rank(Tc)==4)
    fprintf('此系统是可控的!\n');

如果不加外力,系统肯定是不稳定的,直接用

Tc = ctrb(A);
if (rank(Tc)==4)
    fprintf('此系统是可控的!\n');

  就可以测试,

说白就算去判断它的状态转移矩阵是否满秩,现代控制理论有相关的推导分析

simulink建模跟上一张PID的模型基本一样,只是计算输入控制量这块不一样,简单放个图:

这里的K_LQR就算lar算出来的K,这里是负反馈,因此是负号;

其他的参数主要有l取0.065m;g=9.8,车身质量M=1.25kg,底盘m=0.5kg。

算出的K为

K =[   -1.0000   -2.1447   37.5875    3.2123 ]

三、上面的牛顿力学分析运动方程很繁琐,同样是找状态转移矩阵 A 输入矩阵 B 一般直接用拉格朗日动力学方程,省事些。

这里不想再敲公式了,直接参考使用B站博主(J_H_Li)的小车倒立摆最优控制教程 视频  讲得通俗易懂,推荐去看

拉格朗日方程:

 q_j 是指某个状态量  \tau 是对应q_j 状态量的外力

分别找出系统总动能 和势能 再分别对状态量进行拉格朗日方程  

总动能

因为以底盘质点为原点,只有车身的势能,因此总势能

V=mgl cos(q)

这里的M是底盘的质量,m是摆杆的,

所以拉格朗日量

分别对x和q进行拉格朗日方程得到:

再进行线性化,q为小接近0的小角度,\dot{q} ^2\approx 0, 𝑐𝑜𝑠(q) 为1, 𝑠𝑖𝑛(q) 为0, 得到两条动力方程:

然后退出A B矩阵,F改为u,就得到

可以看到A 和 B 跟上面用牛顿受力分析得出的不一样,这里算出来的k

K =[   -1.0000   -1.9719   36.2409    1.8586 ]

但相差不大,都是可以让系统稳定的

这种方法比牛顿受力分析,找出一大堆公式要友好得多。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/611654.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

车载电子电器架构 —— 应用软件开发(中)

车载电子电器架构 —— 应用软件开发(中) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

医疗行业如何提升Windows操作系统登录的安全性

医疗行业使用账号和密码登录Windows系统时,可能会遇到一些痛点,这些痛点可能会影响工作效率、数据安全和用户体验。以下是一些主要的痛点: 1. 密码管理复杂性:医疗行业通常涉及大量的敏感数据和隐私信息,因此密码策略…

非模块化 Vue 开发的 bus 总线通信

个人感觉,JavaScript 非模块开发更适合新人上手,不需要安装配置一大堆软件环境,不需要编译,适合于中小项目开发,只需要一个代码编辑器即可开发,例如 vsCode。网页 html 文件通过 script 标签引入 JavaScrip…

学习笔记——字符串(单模+多模+练习题)

单模匹配 Brute Force算法(暴力) 算法思想 母串和模式串字符依次配对,如果配对成功则继续比较后面位置是否相同,如果出现匹配不成功的位置,则j(模式串当前的位置)从头开始,i&…

中北大学软件学院javaweb实验二JSP应用开发实验报告

实验时间 2024年4月 25 日17时至 22 时 学时数 4 1.实验名称 实验2:JSP应用开发(2学时) 2.实验目的 (1)学会编写和运行简单的JSP页面,理解其运行原理; (2)学会使用JSP的声明、表达式、脚…

中国211大学全部排名一览表

211大学是指中国教育部实施的名为“211工程”的高等教育发展战略中被选为重点支持的高等院校。这个名称来源于项目的启动背景和目标:“211”中的“21”代表21世纪,意味着该项目面向21世纪的中国高等教育发展;“1”则意指要重点建设大约100所左…

126.删除链表的倒数第N个节点(力扣)

题目描述 代码解决(双指针) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, Li…

C语言实现扫雷游戏完整版

游戏介绍: 目录 游戏介绍: 游戏框架: 游戏具体功能实现: 棋盘的定义: 棋盘初始化: 棋盘打印: 棋盘布置雷: 棋盘扫雷: 爆炸展开一片: 获取周围八个…

画出入学管理系统的顶层图和1层图

(学校作业) 题目如下: 某培训机构入学管理系统有报名、交费和就读等多项功能,下面是对其各项功能的说明: 1、报名:由报名处负责,需要在学员登记表上进行报名登记,需要查询课…

Kettle连接Mysql数据库时报错——Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found

一、问题描述 当我们使用ETL工具Kettle需要连接Mysql数据库进行数据清洗操作,在配置好Mysql的连接串内容后,点击【测试】按钮时报错【错误连接数据库 [MysqlTestConnection] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to conne…

记一次DNS故障导致用户无法充值的问题(下)

上一篇说到DNS故障导致无法充值,后来我们通过拨测发现业务域名的解析目标地址被解析到了【127.0.0.1】IP。 1、联系阿里云厂商,通过沟通,阿里云反馈我们的域名被XX省通管单位封禁了,导致解析到了不正确的地址。 2、为了解决用户问…

idea运行SpringBoot项目爆红提示出现:Java HotSpot(TM) 64-Bit Server VM warning...让我来看看~

在运行SpringBoot项目的时候,发现总有这个警告提示出现,有点强迫症真的每次运行项目都很难受啊!那么今天便来解决这个问题! 先来看一下提示内容:Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none an…

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking (MTT)。 那么多目标跟踪是什么? 不难看出,跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别(似乎都是用方框来框出目标捏…

树与二叉树之间的转换

树转化成二叉树:兄弟相连留长子 1.加线:在兄弟之间加一条线 2.抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系 3.旋转:以树的根结点为轴心,将整树顺时针转45 二叉树转化成为树…

云衔科技成为卓豪Zoho中国区代理商,开启智能化企业管理新篇章

每一家企业数字化转型,都在寻求通过技术创新实现业务的飞跃。为了更好地服务于中国企业的数字化转型需求,云衔科技荣幸宣布正式成为卓豪Zoho中国区代理商,这一强强联合将为市场带来全新的数字化解决方案与服务体验,共同开启中国企…

Oracle -在线回缩表

conn scott/tiger DROP TABLE EMP1 PURGE; CREATE TABLE EMP1 AS SELECT * FROM EMP; alter table emp1 enable row movement; -- 启动回缩特性 insert into emp1 select * from emp1; / / commit; -- 增加到14000行 -- 分析表的结构 analyze table emp1 comput…

20240510每日后端---聊聊文件预览,doc,image,ppt转PDF预览

一、引入依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>crac…

关于JAVA-JSP电子政务网实现参考论文(论文 + 源码)

【免费】关于JAVA-JSP电子政务网.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89292355关于JAVA-JSP电子政务网 摘 要 当前阶段&#xff0c;伴随着社会信息技术的快速发展&#xff0c;使得电子政务能够成为我国政府职能部门进行办公管理的一个重要内容&#x…

代码随想录算法训练营第36期DAY24

DAY24 235二叉搜索树的最近公共祖先 迭代法&#xff1a; /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solutio…

ssrf(第二弹)

四&#xff0c;post请求 1.打开环境&#xff0c;提示说发一个HTTP POST请求&#xff0c;ssrf是用php的curl实现的.并且会跟踪302跳转。 2.用dirsearch扫一下常见的端口&#xff0c;看到有三个可以访问的页面 3.构造伪协议&#xff0c;因为要通过172.0.0.1访问&#xff0c;我们…
最新文章