当前位置: 首页 > news >正文

【自动控制入门1B】从零搭建混合控制系统:基于抗积分饱和PID的输入限制直线运动物体位置控制仿真程序

目录

  • 引言
  • python 仿真程序
    • 完整程序

引言

本文分享【自动控制入门1A】从零搭建混合控制系统:基于抗积分饱和PID的输入限制直线运动物体位置控制文章里仿真使用的程序,包括从零搭建的python仿真程序和用于对比的matlab/simulink仿真模型,其中python程序仅用到常用数据处理库和绘图库,控制系统的核心逻辑均为从零实现。编程不难,贵在逻辑梳理。

python 仿真程序

程序主要包括被控对象类、控制器类、传感器类、参数设置、仿真循环、控制性能计算、仿真结果绘图等几个模块,均有详细注释。


被控对象类:可以设置初始状态、微分方程函数ode_plant(self,state0=[0,0,0,0])包含分别考虑空气阻力重力的四种情况,可以根据需要取消注释对应微分方程的代码,共可以观察四种系统的特性(包括线性系统非线性系统
控制器类:可以设置更新频率、设置输入限制和抗积分饱和、修改控制器系数、改进控制器结构(修改内部逻辑和接口即可)等
传感器类:可以设置采样频率噪声等干扰
执行器类:可以根据需要添加,在接在控制器和被控对象之间模拟执行器动态


程序中设有打开输入限幅、实验数据打印到控制台、实验数据导出到txt开关,可以根据需要打开。如需实验记录导出到xlsx实验数据导出到xlsx功能,可以参考
【自动控制入门2B】从零搭建全连续控制系统:基于抗积分饱和PID的输入限制直线运动物体位置控制仿真程序。

完整程序

本文使用python=3.10环境,需要提前安装如下第三方库
pip install numpy、matplotlib
之后如下完整代码可直接运行

frommatplotlibimportpyplotaspltimportnumpyasnpimporttime# 2025.11.30 Sun# 运动模型采用考虑重力mg和拉力F、空气阻力f的垂直方向运动# 系统状态更新采用RK4方法近似连续系统仿真classVir:def__init__(self,state0=[0,0],para=None,dt=0.001)->None:self.m=para['m']# 质量self.k=para['k']# 空气阻力系数self.dt=dt# 时间步长# 初始状态,以向上和向右为正方向self.s=state0[0]# 初始竖直方向位置self.v=state0[1]# 初始竖直方向速度defode(self,state0=[0,0],u=0):# 状态变量初值s,v=state0[0],state0[1]# 微分方程组ds=vifv>=0:air_resist=-self.k*v**2elifv<0:air_resist=self.k*v**2else:air_resist=0# 考虑重力和空气阻力dv=(u-9.8*self.m+air_resist)/self.m# 不考虑重力,只考虑空气阻力# dv = (u + air_resist) / self.m# 不考虑空气阻力,只考虑重力# dv = (u - 9.8 * self.m) / self.m# 重力和空气阻力都不考虑# dv = u / self.mreturnnp.array([ds,dv]).reshape((2,1))defupdate(self,u=0):# RK4 方法更新状态state=np.array([self.s,self.v],dtype=float).reshape((2,1))k1=self.ode(list(state.flatten()),u)state1=state+k1*self.dt/2k2=self.ode(list(state1.flatten()),u)state2=state+k2*self.dt/2k3=self.ode(list(state2.flatten()),u)state3=state+k3*self.dt k4=self.ode(list(state3.flatten()),u)d_state=(k1+2*k2+2*k3+k4)/6state+=d_state*self.dt# state 和 d_state 是 (4,1) 的 numpy 数组,直接取标量 floatself.s=float(state[0,0])self.v=float(state[1,0])returnstateclassControllerPID:def__init__(self,kp=6,ki=0,kd=0,dt=0.1)
http://www.cnnetsun.cn/news/22325.html

相关文章:

  • 零基础也能做!用Qoder快速开发“技能五子棋”蹭热点项目
  • GitHub加速终极方案:告别龟速访问,体验丝滑编程
  • 【总结】【计组】【OS】页号、页框号、虚拟地址、物理地址、地址
  • 超细整理,性能测试如何做?怎么做?性能压力负载(汇总三)
  • 国外代理IP怎么选?4大标准帮你避坑选优
  • 艾体宝洞察 | 当供应链恶意代码会“二次来袭”:Shai-Hulud 事件下,为什么必须重新审视你的应用安全体系?
  • OpenHarmony环境搭建——02-JDK17安装教程
  • 艾体宝干货 |【Redis实用技巧#4】Redis分布式锁真的安全吗?可靠性深度剖析(Part 2)
  • 21-4. PLC的基本逻辑指令(置位,复位指令)
  • VueScan Pro:专业扫描仪增强软件,支持多品牌设备与高质量OCR识别
  • Kali 必备!Burp Suite 超全教程 网安新手必看
  • 60、深入理解与配置 SSH:安全远程访问的全面指南
  • 视频生成大模型Wan2.2开源:MoE架构重构创作生态,消费级显卡实现电影级视频生成
  • [HNCTF 2022 Week1]easync
  • Ultravox终极指南:10个步骤掌握AI音频生成技术
  • 虎贲等考 AI 科研工具:大学生 / 科研人必备!用 AI 高效搞定学术研究
  • 学习 Python,用哪个编辑器比较好?
  • 如何高效地分析问卷调查的数据?
  • nginx部署前端vue项目(非常详细)零基础入门到精通,收藏这篇就够了
  • 何为前端工程化?一文给你说透前端工程化,收藏这篇就够了
  • 免费学习资源|谷歌 5天AI Agents 强化课程|十一月开课
  • 前端及其技术栈,零基础入门到精通,收藏这篇就够了
  • vscode 前端常用插件推荐,零基础入门到精通,收藏这篇就够了
  • 前端牛马 被优化,二选一
  • 社交媒体用户行为特征与发布时间的关联性
  • 微服务编排引擎Conductor:源码编译与定制化开发实战手册
  • WINCC实现手机 APP 远程监控及短信报警方案
  • 《Python学习手册》第1章 Python概述
  • 西南民族大学软件工程25级研究生赴华清远见成都中心开启元宇宙实训之旅
  • Obsidian图像工具包:终极图片管理与编辑指南