news 2026/2/25 17:12:05

【自动控制入门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/2/17 19:51:35

reaConverter Pro:专业级批量文件转换工具,支持700+格式高效处理

reaConverter Pro是一款功能强大的专业级批量文件转换与处理工具&#xff0c;以其全面的格式支持和高效的批量处理能力&#xff0c;在图形图像处理领域占据重要地位。该软件集格式转换、批量编辑、自动化流程于一体&#xff0c;为专业用户提供了完整的文件处理解决方案。 获取…

作者头像 李华
网站建设 2026/2/19 17:39:42

碰一碰发视频系统源码开发搭建技术全解析

在数字时代&#xff0c;碰一碰发视频系统凭借“NFC&#xff0c;二维码发布等”轻量交互模式&#xff0c;为线下实体商家提供了一种全新的引流工具。其核心功能&#xff0c;不仅包括视频批量剪辑&#xff0c;视频碰一碰发布&#xff0c;碰一碰加好友&#xff0c;碰一碰连WIFI等还…

作者头像 李华
网站建设 2026/2/18 15:36:08

Go语言短UUID终极指南:如何快速生成用户友好的唯一标识符

在现代应用开发中&#xff0c;生成简洁、易读且安全的唯一标识符是每个开发者都会面临的挑战。传统的UUID虽然保证了唯一性&#xff0c;但其冗长的格式和难以识别的字符让用户体验大打折扣。短UUID库正是为解决这一问题而生&#xff0c;它基于Google UUID库&#xff0c;通过bas…

作者头像 李华
网站建设 2026/2/18 17:06:25

【开题答辩全过程】以 基于JAVA的社团管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/2/18 10:37:26

无频闪LED工矿灯护眼效果评估

为什么很多工厂坚持要把传统灯换成“无频闪LED工矿灯”&#xff1f;真相不只是护眼&#xff01; 照明升级&#xff0c;首先是一场关乎员工健康与企业效益的革命。走进国内一家大型精密制造企业的车间&#xff0c;负责设备维护的老李指着头顶新换的 LED 工矿灯说&#xff1a;&qu…

作者头像 李华
网站建设 2026/2/24 4:27:39

Wan2.2视频生成模型终极指南:3分钟快速上手专业级AI视频创作

Wan2.2视频生成模型终极指南&#xff1a;3分钟快速上手专业级AI视频创作 【免费下载链接】Wan2.2-TI2V-5B Wan2.2-TI2V-5B是一款开源的先进视频生成模型&#xff0c;基于创新的混合专家架构&#xff08;MoE&#xff09;设计&#xff0c;显著提升了视频生成的质量与效率。该模型…

作者头像 李华