control库的安装方法为pip install control
原文链接地址

使用内/外循环设计进行横向控制

注意,无需逐段复制代码,直接跳转到最后复制完整代码即可。
本节演示了矢量推力飞机示例的环路整形控制器的设计。此示例摘自[http://www.cds.caltech.edu/~murray/amwiki Astrom and Murray]的第11章(频域设计)。此处列出的python代码包含在文件pvtol-nested.py中。

为了设计矢量化推力飞机横向动力学的控制器,我们使用了“内/外”环设计方法。我们首先使用框图表示动态


其中,为了简化,我们令以下物理量:

Hθu1=rJs2,Hxu1=Js2−mgrJs2(ms2+cs)H _ {{\theta u_ {1}}} = {\frac {r} {Js ^ {2}}},\qquad H _ {{xu_ {1}}} = {\frac {Js ^ {2} -mgr } {Js ^ {2}(ms ^ {2} + cs)}}Hθu1​​=Js2r​,Hxu1​​=Js2(ms2+cs)Js2−mgr​

通过将动力学和控制器分为两个部分来构造控制器:
1、 由侧倾动力学PiP_iPi​和控制CiC_iCi​组成的内循环
2、由侧向位置动力学PoP_oPo​E和控制器CoC_oCo​组成的外循环。

内环HiH_ {i}Hi​使用矢量推力控制飞机的侧倾角,而外环控制器CoC_ {o}Co​命令侧倾角调节侧向位置。

以下代码导入所需的库并定义动力学特性:

from matplotlib.pyplot import * # Grab MATLAB plotting functions
from control.matlab import *    # MATLAB-like functions
#系统参数
m = 4;#飞机质量
J = 0.0475;#围绕俯仰轴的惯性
r = 0.25;#距力中心的距离
g = 9.8;#重力常数
c = 0.05;#阻尼系数(估计值)
#动态传递函数
Pi = tf([r],[J,0,0]); #内部循环(滚动)
Po = tf([1],[m,c,0]); #外循环(位置)

对于内层反馈循环,使用超前补偿器

k = 200;a = 2;b = 50
Ci = k * tf([1,a],[1,b])#超前补偿器
Li= Pi * Ci

内环的闭环动力学由HiH_ {i}Hi​给出

Hi = parallel(feedback(Ci, Pi), -m*g*feedback(Ci*Pi, 1));

最后,我们使用另一个主补偿器设计横向补偿器

#现在设计横向控制系统
a = 0.02;b = 5;K = 2;
Co = -K * tf([1,0.3],[1,10]);#另一个主要补偿器
Lo = -m * g * Po * Co;

可以使用灵敏度函数和互补灵敏度函数来表征系统的性能

L = Co*Hi*Po;
S = feedback(1, L);
T = feedback(L, 1);

使用以下命令计算环路传递函数的频率响应和奈奎斯特图

bode(L)
nyquist(L, (0.0001, 1000));
axis([-700, 5300, -3000, 3000]);gangof4(Hi*Po, Co);

相应的图如下所示:

伯德图

奈奎斯特图

四个图

标准答案是这样的,但是我未能复现这个图。上两个图我都可以复现。

代码实现

# pvtol-nested.py - inner/outer design for vectored thrust aircraft
# RMM, 5 Sep 09
#
# This file works through a fairly complicated control design and
# analysis, corresponding to the planar vertical takeoff and landing
# (PVTOL) aircraft in Astrom and Murray, Chapter 11.  It is intended
# to demonstrate the basic functionality of the python-control
# package.
#from __future__ import print_functionimport os
import matplotlib.pyplot as plt  # MATLAB plotting functions
from control.matlab import *    # MATLAB-like functions
import numpy as np# System parameters
m = 4               # 飞行器质量
J = 0.0475          # 俯仰轴惯性
r = 0.25            # 力与质心距离(原文为:distance to center of force
g = 9.8             # 重力加速度
c = 0.05            # 阻尼系数(估计)# 传递函数
Pi = tf([r], [J, 0, 0])  # inner loop (roll)
Po = tf([1], [m, c, 0])  # outer loop (position)# Use state space versions
Pi = tf2ss(Pi)
Po = tf2ss(Po)#
# 内控制环路设计
#
# This is the controller for the pitch dynamics.  Goal is to have
# fast response for the pitch dynamics so that we can use this as a
# control for the lateral dynamics
## Design a simple lead controller for the system
k, a, b = 200, 2, 50
Ci = k*tf([1, a], [1, b])  # lead compensator
Li = Pi*CiSi = feedback(1, Li)
Ti = Li*SiHi = parallel(feedback(Ci, Pi), -m*g*feedback(Ci*Pi, 1))a, b, K = 0.02, 5, 2
Co = -K*tf([1, 0.3], [1, 10])  # another lead compensator
Lo = -m*g*Po*Co# Finally compute the real outer-loop loop gain + responses
L = Co*Hi*Po
S = feedback(1, L)
T = feedback(L, 1)plt.figure('时域响应')
y,t=step(T,T=np.linspace(0,10,100))
plt.plot(t,y)
plt.xlabel('time/s')
plt.ylabel('y(t)')
plt.grid()# 对整个系统绘制伯德图
plt.figure('伯德图')
bode(L, np.logspace(-4, 3))plt.figure('奈奎斯特图')nyquist(L, (0.0001, 1000))
plt.axis([-4000, 300, -300000, 300000])plt.figure('四个图')
gangof4(Hi*Po, Co)
plt.show()

python control控制系统仿真再更新:使用内外环系统进行垂直起降飞行器横向控制仿真相关推荐

  1. 控制系统仿真技术(二)-连续系统的数字仿真二

    太原理工大学控制系统仿真技术实验报告 连续系统的数字仿真 1.分别利用欧拉法和预估-校正法求下图所示系统的阶跃响应,并对其结果进行比较. %欧拉法求阶跃响应 r=2;num0=8;den0=[1 3 ...

  2. matlab 离散控制系统仿真,实验二-基于Matlab的离散控制系统仿真.doc

    实验 基于Matlab的离散控制系统仿真一.实验目的 学习使用Matlab命令对控制系统进行仿真的方法. 学习使用Simulink工具箱对控制系统进行仿真的方法. 二.实验原理 1. 控制系统命令行仿 ...

  3. m基于内外环PD控制算法的四旋翼无人机飞行控制simulink仿真

    目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件 1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要 随着无人飞行器技术的 ...

  4. 解决Python Socket UDP端口侦听线程内更新UI界面卡顿、奔溃的问题

    网络读卡器介绍:WIFI无线网络RFID云读卡器远程网络开关物流网NB-IoT4G刷卡阅读器-淘宝网 (taobao.com) Python使用PyQt5做UI界面,开启线程侦听UDP端口,端口接收到 ...

  5. python control控制系统库

    python control控制系统库 参考:Docs » Python Control Systems Library 系统创建 ①control.tf(num, den) 传递函数方式 contr ...

  6. python全栈工程师薪水_不止 20K,Python 工程师薪资再飙升(内附转型指南)

    原标题:不止 20K,Python 工程师薪资再飙升(内附转型指南) Python 诞生之初就被誉为最容易上手的编程语言.进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言 ...

  7. python不需要先声明变量类型、在第一次_Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。...

    Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型. 答:× ()不属于"零余者"形象特征 答:思想大于行动 以下关于模糊关系的正确说法是 答:模糊关系描 ...

  8. 网络控制系统仿真:Truetime2.0工具箱安装(win10 + matlab R2017b)

    最新更新:matlab2018之后的版本和truetime2.0不兼容,我修改了下truetime源码的内核代码,出错的同学可以试试,点击此处下载 提取码:8888 . 网络控制系统简介     网络 ...

  9. SCILAB及其在控制系统仿真中的应用

    科学计算软件SCILAB及其在控制系统仿真中的应用 黄慧敏 徐华中 (武汉理工大学 自动化学院,湖北 武汉,430070) 摘要:Scilab (Science laboratory)是一种类似于商业 ...

最新文章

  1. jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片
  2. 【Python】Error:Input 'y' of 'Add' Op has type float32 that does not match type int32 of argument 'x'.
  3. 区块链分叉如何解决_什么是分叉区块链又该如何分叉
  4. 七、Java编码字符集和转义符介绍
  5. HDU 1162 Eddy's picture (最小生成树)(java版)
  6. Ubuntu 下无法Tab键自动补全功能解决办法
  7. 求浮点数的幂的精确值
  8. apache make install 问题
  9. python在线游戏_几个简单的python小游戏
  10. easyui模板中的disabled的使用
  11. Android 开源无线投屏,用树莓派Raspberry Pi 4B制作一个无线投屏器(20200803)
  12. c语言除法计算和取模计算
  13. IOS开发之宏的深度学习
  14. 在ubuntu系统下下载和卸载skype
  15. NOIP模拟赛 czy的后宫3
  16. 看看月明光彩照入东 水浒
  17. 扫描至计算机功能被禁用,远程访问功能已禁用怎么办_允许远程界面控制被禁用的解决方法...
  18. 二阶边值问题的数值解matlab,《二阶常微分方程边值问题的数值解法》-毕业论文.doc...
  19. AD19 报错记录 Un-Routed Net Constraint: Net LED Between Pad J3-10
  20. html5 swf在线播放,html5怎样播放swf格式的视频

热门文章

  1. fr4速度 微带线_微带线和带状线(microstrip and stripline)
  2. AGV路径规划方法——A*算法
  3. 分享一个简易的AT变速箱(TCU)换挡逻辑控制模型
  4. UVA1593 代码对齐 输入输出控制
  5. VS2017-C++-使用CSpreadSheet写EXCEL
  6. echarts旭日图数据重构处理
  7. 10月书讯丨10本新书为你充电
  8. 蓝牙耳机音质真的不好吗?初级发烧友应该选择什么样式蓝牙耳机
  9. arr.map()的使用
  10. vue引入html报错