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

上一节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.rhkb.cn/news/323547.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Desktop 修改容器的自启动设置

Docker Desktop 允许用户控制容器的自启动行为。如果你不希望某个容器在 Docker 启动时自动启动,你可以通过以下步骤来更改设置: 1. 打开 Docker Desktop 应用。 2. 点击右上角的设置(Settings)按钮,或者使用快捷键 Cm…

pycharm编译器背景设置

最近,瞎逛的时候发现个好玩的,pycharm竟然可以设置背景了,也不知道是不是我太out了,觉得很有意思,略微记录一下 如下步骤: 第五步:选择自己的图片路径 第六步:设置图片透明度&…

django显示网页步骤

显示网页步骤 小白的django学习笔记 2024/5/6 8:30 文章目录 显示网页步骤创建输入框(文本、单选、多选)效果如何在django中显示网页写函数配置地址运行,要选择这个工程名的,使用socket复制ip,后面在加上名字,成功&…

DDOS攻击实战演示,一次DDOS的成本有多低?

DDoS攻击成本概览 分布式拒绝服务(DDoS)攻击以其低廉的启动成本和惊人的破坏力著称。攻击者通过黑市轻松获取服务,成本从几十元人民币的小额支出到针对大型目标的数千乃至数万元不等。为了具体理解这一成本结构,我们将通过一个简…

Spark云计算平台Databricks使用,上传文件

Databricks,是属于 Spark 的商业化公司,由美国加州大学伯克利 AMP 实验室的 Spark 大数据处理系统多位创始人联合创立。Databricks 致力于提供基于 Spark 的云服务,可用于数据集成,数据管道等任务。 创建workspace:Spa…

uni-app(二):本地插件使用(Android)

本地插件使用 项目创建等参考1.下载并引用本地插件2.注意插件配置3.制作自定义基座4.编写调用代码5.运行 项目创建等参考 https://lprosper.blog.csdn.net/article/details/138655526 1.下载并引用本地插件 2.注意插件配置 3.制作自定义基座 4.编写调用代码 <template>…

【MongoDB】安装与使用

前两篇文章介绍了前端vuevite&#xff0c;后端fastapi&#xff0c;这篇文章为项目搭建数据库。数据库选用MongoDB。如果你还没看过前两篇&#xff0c;你可以去看一下&#xff1a; 【Vue】搭建第一个vue3vite前段项目 【fastapi】搭建第一个fastapi后端项目 选择版本 官网最新…

十四、网络编程

目录 一、网络编程概述二、网络通讯要素1、IP和端口号2、网络通信协议 三、IP和端口号四、网络协议1、网络通信协议2、TCP/IP协议簇1&#xff09;TCP协议2&#xff09;UDP 3、Socket 五、TCP网络编程1、基于Socket的TCP编程1&#xff09;客户端创建socket对象2&#xff09; 服务…

coherence protocal基础

一致性整体抽象 coherence protocol是通过保证如下的两点invariants&#xff0c;来实现一致性的&#xff1b; SWMR invariant, 对于任何一个地址&#xff0c;任何时刻&#xff0c;都只会有一个core写&#xff0c;可能会有多个core读&#xff1b;Data-value invariant&#xf…

冯喜运:5.10黄金再创新高,今日黄金原油走势分析

【黄金消息面分析】&#xff1a;5月10日周五亚盘早市现货黄金小幅冲高&#xff0c;最高触及2348&#xff0c;较周三收盘价上涨近40美元。金价在周四攀升了1%&#xff0c;收报2345.87美元/盎司&#xff0c;此前美国劳工部公布的最新数据显示&#xff0c;上周美国初请失业金人数的…

接口自动化框架篇:使用python连接数据库 - PySQL介绍!

PySQL介绍&#xff1a;使用Python连接数据库的接口自动化框架 在接口自动化测试中&#xff0c;经常需要使用数据库来操作测试数据&#xff0c;验证接口返回的数据是否正确。Python是一种功能强大的编程语言&#xff0c;可以轻松地连接数据库&#xff0c;并进行各种数据库操作。…

TCP及IP协议

TCP协议的传输是可靠的&#xff0c;而UDP协议的传输“尽力而为” TCP传输可靠性———确认&#xff0c;重传&#xff0c;排序&#xff0c;流控。 流控&#xff1a;滑动窗口机制 TTL--- 数据包每经过一个路由器的转发&#xff0c;他的TTL值将减1&#xff0c;当一个数据包中的T…

使用gRPC基于Protobuf传输大文件或数据流

文章目录 使用gRPC基于Protobuf传输大文件或数据流1. 背景和技术选择1.1 gRPC的优势1.2 Protocol Buffers的优势 2. 项目配置与环境搭建2.1 安装gRPC和Protocol Buffers2.1.1 安装Cmake2.1.2 设置环境变量2.1.3 安装必要的依赖2.1.4 下载gRPC源码2.1.5 编译gRPC和 [Protocol Bu…

HTML4(四)

1. 框架标签 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>框架标签</title></head><body><!-- 利用iframe嵌入一个普通网页 --><iframe src"https://www.toutia…

深入浅出学习Pytorch—Pytorch简介与2024年最新安装(GPU)

深入浅出学习Pytorch—Pytorch简介 学习原因&#xff1a;Pytorch日益增长的发展速度与深度学习时代的迫切需要 Pytorch模型训练 pytorch实现模型训练包括以下的几个方面&#xff08;学习路线&#xff09; 数据&#xff1a;数据预处理与数据增强模型&#xff1a;如何构建模型模…

电脑ip地址设置成什么比较好

随着信息技术的快速发展&#xff0c;IP地址已成为电脑在网络世界中的“身份证”。它不仅是电脑在网络中进行通信的基础&#xff0c;也直接关系到网络连接的稳定性、安全性和效率。然而&#xff0c;面对众多IP地址设置选项&#xff0c;许多用户可能会感到困惑。那么&#xff0c;…

kubernate 基本概念

一 K8S 是什么&#xff1f; K8S 全称&#xff1a;Kubernetes 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的…

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …

信息安全技术-分析题【太原理工大学】

没有历年题或明确说明大题会考什么&#xff0c;以下为个人猜测 简答题和选择判断占60&#xff0c;认真看题库和总结&#xff0c;能过d(^_^o) 好像说是加解密这类题会给公式让你直接套&#xff0c;但还是看一下基本原理&#xff0c;要不到时候蒙圈 1.加密算法步骤 图 1 是一个采…

视频降噪算法 Meshflow 介绍

介绍 Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。 该论文提出了一个新的运动模型MeshFlow&#xff0c;它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field)&#xff0c;其运动矢量 (motion vectors) 仅在网格顶点 (mesh vertexes) 处…