news 2026/7/28 23:20:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【自动控制入门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)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 13:37:44

零基础也能做!用Qoder快速开发“技能五子棋”蹭热点项目

大家好&#xff0c;我是来自阿里云设计部的一名设计师。坦白说&#xff0c;我是个纯开发小白&#xff0c;但今天我想和大家分享一个让我自己都感到惊喜的经历&#xff1a;如何仅凭自然语言&#xff0c;借助AI工具Qoder&#xff0c;从零做出一款技能五子棋游戏。一、设计阶段&am…

作者头像 李华
网站建设 2026/7/22 3:55:01

GitHub加速终极方案:告别龟速访问,体验丝滑编程

GitHub加速终极方案&#xff1a;告别龟速访问&#xff0c;体验丝滑编程 【免费下载链接】github-hosts &#x1f525;&#x1f525;&#x1f525; 本项目定时更新GitHub最新hosts&#xff0c;解决GitHub图片无法显示&#xff0c;加速GitHub网页浏览。 项目地址: https://gitc…

作者头像 李华
网站建设 2026/7/28 13:50:49

【总结】【计组】【OS】页号、页框号、虚拟地址、物理地址、地址

目录 页号和页框号对比 页表项、页表、页号、页框号关系 页表项详细结构 页表的组织方式与特点 操作系统与硬件的协同管理 地址字段划分计算 页表大小计算 整体过程分析&#xff08;地址转换、通过物理地址访问数据&#xff09; 地址转换与访问流程 操作系统核心职责…

作者头像 李华
网站建设 2026/7/26 16:23:49

超细整理,性能测试如何做?怎么做?性能压力负载(汇总三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 做性能测试的时候…

作者头像 李华
网站建设 2026/7/28 13:40:51

国外代理IP怎么选?4大标准帮你避坑选优

随着跨境数据采集、海外营销、国际市场研究等业务需求激增&#xff0c;越来越多企业开始关注国外代理IP的选型问题。但市面上的代理服务五花八门&#xff0c;质量参差不齐&#xff0c;不少用户踩过“IP频繁掉线”、“响应速度慢”、“并发失败”等坑。那么&#xff0c;该如何选…

作者头像 李华
网站建设 2026/7/27 2:48:03

艾体宝洞察 | 当供应链恶意代码会“二次来袭”:Shai-Hulud 事件下,为什么必须重新审视你的应用安全体系?

在 AI、自动化开发和开源生态高度繁荣的今天&#xff0c;一次 npm 包更新&#xff0c;就足以把攻击者请进你的 CI/CD 和云账号。 最新曝光的 Sha1‑Hulud供应链攻击&#xff0c;再次把整个行业敲醒&#xff1a; 它不再满足于“顺手偷点凭证”&#xff0c;而是进化出了—— 可…

作者头像 李华