基于LQR算法的一阶倒立摆控制

news2024/12/23 20:24:31

1. 一阶倒立摆建模

在这里插入图片描述

2. 数学模型

倒立摆的受力分析网上有很多,这里就不再叙述。直接放线性化后的方程:

F = (M+m)x″-mLφ″
(I+mL²)φ″= mLx″+ mgLφ

(F为外力,x为物块位移,M,m为物块和摆杆的质量,φ为摆杆相对竖直向上方向的角度)

然后建立状态控制方程:
在这里插入图片描述

得到状态矩阵为:

在这里插入图片描述

3. python代码

# lqr.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import control
import numpy as np

M = 1.0      # 小车质量
m = 1.0      # 摆杆质量
g = 9.8      # 重力加速度
L = 2.0      # 摆杆长度

I = 1.0 / 3.0 * m * (L*L)      # 均质摆杆转动惯量

print("I is: ", I)

A_23 = -(m*m) * (L*L) * g / (I * (M + m) + M * m * (L*L))
A_43 = (M + m) * m * g * L / (I * (M + m) + M * m * (L*L))

print("A_23 is: ", A_23)
print("A_43 is: ", A_43)

B_2 = (I + m * (L*L)) / (I * (M + m) + M * m * (L*L))
B_4 = -m * L / (I * (M + m) + M * m * (L*L))

print("B_2 is: ", B_2)
print("B_4 is: ", B_4)

A = np.array([[0, 1, 0,    0], 
              [0, 0, A_23, 0], 
              [0, 0, 0,    1], 
              [0, 0, A_43, 0]])

# B = np.array([[0], [B_2], [0], [B_4]])
_B = np.array([0, B_2, 0, B_4])
B = _B.reshape(_B.shape[0],1)

Q = np.array([[100, 0, 0,   0],
              [0,   1, 0,   0],
              [0,   0, 100, 0],
              [0,   0, 0,   1]])

R = 10

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

print("K is: ", K)

执行结果:

$ ./lqr.py 
I is:  1.3333333333333333
A_23 is:  -5.880000000000001
A_43 is:  5.880000000000001
B_2 is:  0.8
B_4 is:  -0.30000000000000004
K is:  (array([[ -3.16227766,  -6.43571648, -83.62359638, -39.56913008]]), array([[  203.5152246 ,   206.59223321,  1251.28576097,   656.32187724],
       [  206.59223321,   292.76442691,  1890.23514953,   995.22902118],
       [ 1251.28576097,  1890.23514953, 15580.3357274 ,  7828.080278  ],
       [  656.32187724,   995.22902118,  7828.080278  ,  3972.91505928]]), array([-2.38935921+0.27045155j, -2.38935921-0.27045155j,
       -0.97172371+0.81464125j, -0.97172371-0.81464125j]))

参考:
一阶倒立摆simscape建模

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机是怎么跑起来的(2)?程序如何驱动硬件工作的?

上文计算机是怎么跑起来的?从零开始手动组装微型计算机我们说了,如何手动从来组装一台计算机,那组装完后的计算机上是怎么跑起来程序的呢?程序是如何驱动硬件工作的? 前面我们通过DMA将代码输入到内存的指定位置,然后…

JavaWeb 学习

1. 基本概念 1.1 Web web:网络,网页 静态 web html,css提供给所有人看的数据始终不会变化 动态 web 淘宝提供给每个人看的数据会有所不同技术栈:Servlet/JSP,ASP,PHP Java 中,动态 web 资…

如何通过优化Read-Retry机制降低SSD读延迟?

近日,小编发现发表于2021论文中,有关于优化Read-Retry机制降低SSD读延迟的研究,小编这里给大家分享一下这篇论文的核心的思路,感兴趣的同学可以,可以在【存储随笔】VX公号后台回复“Optimizing Read-Retry”获取下载链接。 本文中主要基于Charge Trap NAND架构分析。NAND基…

[C++网络协议] 优于select的epoll

1.epoll函数为什么优于select函数 select函数的缺点: 调用select函数后,要针对所有文件描述符进行循环处理。每次调用select函数,都需要向该函数传递监视对象信息。 对于缺点2,是提高性能的最大障碍。因为,套接字是…

python+vue驾校驾驶理论考试模拟系统

管理员的主要功能有: 1.管理员输入账户登陆后台 2.个人中心:管理员修改密码和账户信息 3.用户管理:管理员可以对用户信息进行添加,修改,删除,查询 4.添加选择题:管理员可以添加选择题目&#xf…

读高性能MySQL(第4版)笔记15_备份与恢复(下)

1. 二进制日志 1.1. 服务器的二进制日志是需要备份的最重要元素之一 1.2. 对于基于时间点的恢复是必需的,并且通常比数据要小,所以更容易被进行频繁的备份 1.3. 如果有某个时间点的数据备份和所有从那时以后的二进制日志,就可以重放从上次…

MySQL数据库入门到精通8--进阶篇( MySQL管理)

7. MySQL管理 7.1 系统数据库 Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下: 7.2 常用工具 7.2.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 语法 : mysql [options] [database] 选…

NumPy数值计算

1、Numpy概念 1.1Numpy是什么? Numpy是(Numerical Python的缩写):一个开源的Python科学计算库使用NumPy可以方便的使数组、矩阵进行计算包含线性代数、傅里叶变换、随机数生成等大量函数 1.2为什么使用Numpy 对于同样的数值计…

Windows打开:控制面板\网络和 Internet\网络连接 显示空白怎么办?

Windows打开:控制面板\网络和 Internet\网络连接 显示空白怎么办? 最近有用户反馈遇到这个问题,问题产生原因:在卸载某个软件的时候,系统提示需要重新启动计算机,但是,启动之后,就…

前端项目练习(练习-002-NodeJS项目初始化)

首先,创建一个web-002项目,内容和web-001一样。 下一步,规范一下项目结构,将html,js,css三个文件放到 src/view目录下面: 由于html引入css和js时,使用的是相对路径,所以…

从聚水潭到金蝶云星空通过接口配置打通数据

从聚水潭到金蝶云星空通过接口配置打通数据 数据源平台:聚水潭 聚水潭SaaSERP于2014年4月上线,目前累计超过2.5万商家注册使用,成为淘宝应用服务市场ERP类目商家数和商家月订单增速最快的ERP。2014年及2015年“双十一”当天,聚水潭SaaSERP平稳…

python的讲解和总结V2.0

python的讲解和总结V2.0 一、Python的历史二、Python的特点三、Python的语法四、Python的应用领域五、Python的优缺点优点a. 简单易学:b. 可读性强:c. 库和框架丰富:d. 可移植性强:e. 开源: 缺点a. 运行速度较慢&#…

C 语言基础题:PTA L1-027 出租

下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]2 对应 arr[2]1,index[1]0 对应 arr[0]8,index[2]3 对应 arr[3]0&…

springboot 捕获数据库唯一索引导致的异常

在一些业务场景中,需要保证数据的唯一性,一般情况下,我们会先到数据库中去查询是否存在,再去判断是否可以插入新的数据.如果是在高并发的情况下,可能还是会出现重复的情况.这时候可能就需要用到锁.也可以在数据库中设置唯一索引. 如果使用唯一索引,在插入相同数据的情况下会抛出…

【postgresql】ERROR: column “xxxx.id“ must appear in the GROUP BY

org.postgresql.util.PSQLException: ERROR: column "xxx.id" must appear in the GROUP BY clause or be used in an aggregate function 错误:列“XXXX.id”必须出现在GROUP BY子句中或在聚合函数中使用 在mysql中是正常使用的,在postgre…

GAN笔记:利普希茨连续(Lipschitz continuity)

利普希茨连续(Lipschitz continuity)是一个数学概念,用于描述一个函数在其定义域内的变化程度。在生成对抗网络(GAN)中,利普希茨连续性对于鉴别器(Discriminator)的设计和训练具有重…

麻将技术从入门到高手,麻将听牌从基础到进阶

一、教程描述 本套麻将教程,大小8.82G,共有132个文件。 二、教程目录 麻将教程001-麻将的基本概念.mp4 麻将教程002-数牌的特性.mp4 麻将教程003-好坏搭判断.mp4 麻将教程004-拆搭原则.mp4 麻将教程005-听牌攻略.mp4 麻将教程006-进程判断.mp4 …

MySQL高级语句(第二部分)

MySQL高级语句(第二部分)一、视图表 create view1、视图表概述2、视图表能否修改?(面试题)3、基本语法3.1 创建3.2 查看3.3 删除 4、通过视图表求无交集值 二、case语句三、空值(null) 和 无值(’ ) 的区别四、正则表达式五、存储过程1、简介…

【LeetCode热题100】--238.除自身以外数组的乘积

238.除自身以外数组的乘积 思路: 利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀和后缀)相乘得到答案 算法: 1.初始化两个空数组L和R,对于给定索引i,L[i]代表的是i左侧所有数字的乘积&#xff…

基于springboot会员制医疗预约服务管理信息系统springboot017

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…