Python实现PID控制及图像化展示

因为假期在家没带车子回家,又想调试PID,就用python写了一个PID的算法,用matplotlib作图展现一下结果并进行调试。
代码是参考的GitHub上的大佬写的,自己做了一些注释。

import time
class PID:
    def __init__(self,P=0.2,I=0.0,D=0.0):
        self.Kp = P
        self.Ki = I
        self.Kd = D
        self.sample_time = 0.00       #设置采样时间
        self.current_time = time.time()
        self.last_time = self.current_time  #上个时间的值给下个时间
        self.clear()
    def clear(self):          #定义初始化函数
        self.setpoint = 0.0   #给定目标值
        self.PTerm = 0.0
        self.ITerm = 0.0
        self.DTerm = 0.0        #用PTerm,ITerm,DTerm来表示三个控制的数值
        self.last_error = 0.0
        self.int_error = 0.0
        self.windup_guard = 20.0  #设置范围

        self.output = 0.0
    def update(self,value):
        error = self.setpoint - value     #初次差值
        self.current_time = time.time()
        delta_time = self.current_time - self.last_time   #时间差
        delta_error = error - self.last_error             #差值
        if (delta_time >= self.sample_time):
            self.PTerm = self.Kp *error                #比例线性控制
            self.ITerm += error * delta_time           #积分
            if (self.ITerm < -self.windup_guard):      #积分的控制量在一定范围内
                self.ITerm = -self.windup_guard
            elif (self.ITerm > self.windup_guard):
                self.ITerm = self.windup_guard
            self.DTerm = 0
            if delta_time > 0:
                self.DTerm = delta_error / delta_time
                self.last_time = self.current_time
                self.last_error = error
                self.output = self.PTerm + (self.Ki * self.ITerm) +(self.Kd * self.DTerm)

            def setKp(self, proportional_gain):
                self.Kp = proportional_gain

            def setKi(self, integral_gain):
                self.Ki = integral_gain

            def setKd(self, derivative_gain):
                self.Kd = derivative_gain

            def setWindup(self, windup):
                self.windup_guard = windup

            def setSampleTime(self, sample_time):
                self.sample_time = sample_time

因为自己用python写的话不像是在单片机上,单片机编程有一个重要的函数中断函数。Python里面没有内置这个函数,所以我们用time库来控制函数的运行时间的间隔。上述代码就是一个完整的pid的算法,但是也有不足的地方,当然这只是一个演示,并没有做仔细的更改,毕竟在单片机上进行用不是在python上。下面附上图像展示。
在这里插入图片描述

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于机器学习图像视觉的安全急救系统python实现源码+项目说明(本科毕设).zip 安全急救系统(Safety First Aid System)是一款软硬件结合的、基于图像处理、机器视觉的目标检测追踪技术、机器学习的分类预测模型、传感器数据收集处理分析技术、PID 控制算法与舵机控制、UWB 室内定位技术、嵌入式单片机开发技术、嵌入式 Linux 开发技术、安卓软件开发技术、后台服务器等开发技术的系统。 由智能安全帽、定位基站、边缘运算盒、云端服务器以及移动端 APP 组成,采用自主设计的安全急救方法,结合 UWB 定位以及多传感器融合技术,实现当危险发生时,能够及时向外界发送求救信息,精准定位险情地点,以达到缩短黄金救援时间的目的。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) MATLAB(Matrix Laboratory)是一款由美国MathWorks公司开发的高性能商业数学软件,它集成了高级技术计算语言、交互式环境以及丰富的工具箱,被广泛应用于工程计算、数据分析、算法开发和科学可视等领域。MATLAB的核心功能包括: 1. **数值计算**:支持大规模矩阵和数组运算,对线性代数、微积分、概率统计等数学问题提供高效解决方案。 2. **编程环境**:提供了易于使用的脚本编写与函数定义界面,支持面向对象编程,并可通过M文件实现模块程序设计。 3. **数据可视**:内置强大的二维和三维图形绘制功能,能够创建高质量的数据图表,便于数据分析和结果展示。 4. **工具箱扩展**:MathWorks为MATLAB提供了众多领域的专业工具箱,如信号处理、图像处理、通信系统、控制系统、机器学习、深度学习、量金融、优算法等,极大地扩展了MATLAB的应用范围。 5. **Simulink仿真**:作为MATLAB的重要组成部分,Simulink是一个动态系统建模、仿真和基于模型的设计环境,特别适用于多域物理系统和嵌入式系统的模拟和实时测试。 6. **集成能力**:MATLAB可以与其他编程语言(如C、C++、Java、Python等)及外部应用程序进行数据交换和联合开发,也可以调用硬件接口进行实时实验和控制。 7. **交互式工作空间**:用户可以在命令窗口中直接输入表达式并立即得到结果,这种交互式的特性使得快速原型设计和调试变得极为便利。 总之,MATLAB是科学家、工程师和技术人员进行科研、教育和工业应用不可或缺的强大工具之一,尤其在需要大量数值计算和复杂系统建模的场景下发挥着重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值