一阶系统又称为惯性系统_舵机惯性控制

一阶系统又称为惯性系统_舵机惯性控制1.PID.py#PID控制一阶惯性系统测试程序#*****************************************************************##增量式PID系统##**************************************

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1.PID.py

#  PID控制一阶惯性系统测试程序

#*****************************************************************#
#                      增量式PID系统                              #
#*****************************************************************#
class IncrementalPID:
    def __init__(self, P, I, D):
        self.Kp = P
        self.Ki = I
        self.Kd = D

        self.PIDOutput = 0.0             #PID控制器输出
        self.SystemOutput = 0.0          #系统输出值
        self.LastSystemOutput = 0.0      #上次系统输出值

        self.Error = 0.0                 #输出值与输入值的偏差
        self.LastError = 0.0
        self.LastLastError = 0.0

    #设置PID控制器参数
    def SetStepSignal(self,StepSignal):
        self.Error = StepSignal - self.SystemOutput
        IncrementValue = self.Kp * (self.Error - self.LastError) + self.Ki * self.Error + self.Kd * (self.Error - 2 * self.LastError + self.LastLastError)
        self.PIDOutput += IncrementValue
        self.LastLastError = self.LastError
        self.LastError = self.Error

    #设置一阶惯性环节系统  其中InertiaTime为惯性时间常数
    def SetInertiaTime(self,InertiaTime,SampleTime):
        self.SystemOutput = (InertiaTime * self.LastSystemOutput + SampleTime * self.PIDOutput) / (SampleTime + InertiaTime)
        self.LastSystemOutput = self.SystemOutput


# *****************************************************************#
#                      位置式PID系统                              #
# *****************************************************************#
class PositionalPID:
    def __init__(self, P, I, D):
        self.Kp = P
        self.Ki = I
        self.Kd = D

        self.SystemOutput = 0.0
        self.ResultValueBack = 0.0
        self.PidOutput = 0.0
        self.PIDErrADD = 0.0
        self.ErrBack = 0.0

    def SetInertiaTime(self, InertiaTime,SampleTime):
       self.SystemOutput = (InertiaTime * self.ResultValueBack + SampleTime * self.PidOutput) / (SampleTime + InertiaTime)
       self.ResultValueBack = self.SystemOutput

    def SetStepSignal(self,StepSignal):
        Err = StepSignal - self.SystemOutput
        KpWork = self.Kp * Err
        KiWork = self.Ki * self.PIDErrADD
        KdWork = self.Kd * (Err - self.ErrBack)
        self.PidOutput = KpWork + KiWork + KdWork
        self.PIDErrADD += Err
        self.ErrBack = Err




2.TestPID.py

import PID
import matplotlib.pyplot as plt
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2

#测试PID程序
def TestPID(P, I, D):
    IncrementalPid = PID.IncrementalPID(P, I, D)
    PositionalPid = PID.PositionalPID(P, I, D)
    IncrementalXaxis = [0]
    IncrementalYaxis = [0]
    PositionalXaxis = [0]
    PositionalYaxis = [0]

    for i in range(1, 500):
        #增量式
        IncrementalPid.SetStepSignal(100.2)
        IncrementalPid.SetInertiaTime(3,0.1)
        IncrementalYaxis.append(IncrementalPid.SystemOutput)
        IncrementalXaxis.append(i)

        #位置式
        PositionalPid.SetStepSignal(100.2)
        PositionalPid.SetInertiaTime(3,0.1)
        PositionalYaxis.append(PositionalPid.SystemOutput)
        PositionalXaxis.append(i)

    plt.figure(1)      # 选择图表1
    plt.plot(IncrementalXaxis, IncrementalYaxis,'r')
    plt.xlim(0,120)
    plt.ylim(0,140)
    plt.title("IncrementalPID")

    plt.figure(2)     # 选择图表2
    plt.plot(PositionalXaxis, PositionalYaxis, 'b')
    plt.xlim(0,120)
    plt.ylim(0,140)
    plt.title("PositionalPID")

    plt.show()

if __name__ == "__main__":
    TestPID(4.5,0.5,0.1)



3.实现效果

一阶系统又称为惯性系统_舵机惯性控制

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186017.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Eclipse自动补全功能设置

    Eclipse自动补全功能设置如何设置Eclipse自动补全方法一:按照步骤设置第一步:点击Eclipse导航栏的Window按钮第二步:在Eclipse导航栏的window中找到preferences第三部:进入preferences中找到java→Editor→ContentAssit,在红箭头所指的方框内输入26个英文字母和一些符号“‘<>按照这些操作来进行,您就可以让Eclipse自动补全方法二:使用快捷键Alt+/…

    2022年6月28日
    34
  • c语言fsync函数,c – 如何在一个流上做fsync?

    c语言fsync函数,c – 如何在一个流上做fsync?不幸的是,查看标准没有提供basic_filebuf或任何basic_[io]?fstream类模板,以允许您提取底层的操作系统文件描述符(以fileno()为CstdioI/O的方式).也没有一个open()方法或构造函数将这样的文件描述符作为参数(这将允许您使用不同的机制打开文件并记录文件句柄).有basic_ostream::flush(),但是我怀疑这实际上并不调用fsyn…

    2022年5月23日
    39
  • samba服务器的配置文件是(服务器配置怎么看)

    Samba服务器的配置实验步骤:1、安装有关Samba的RPM包(samba、samba-common、samba-client)2、创建Samba用户3、修改配置文件4、重启samba服务5、设置目录访问权限6、测试具体步骤如下:1、安装RPM包(缺省情况下RHEL5安装了samba的相关软件包,可以用如下命令查看)[root@localhost~]#r

    2022年4月14日
    68
  • goland 2021.3激活 3月最新注册码

    goland 2021.3激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    45
  • Ubuntu 安装 gcc-4.9.3-64-gnu

    Ubuntu 安装 gcc-4.9.3-64-gnu可能每个人的环境不一样,所以安装的方法有些许差别。我参考了多个网络上的教程,在自己的ubuntu虚拟机中安装了gcc-4.9.3-64-gnu,记录一下自己的安装过程。虚拟机中默认安装了gcc-5.4.0,我要安装gcc-4.9.3一、下载地址:wgethttp://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.3/gcc-4.9.3.tar.bz2由于是用的虚拟机,配置不是很高,自己是windows下载完毕拷贝进虚拟机中。gcc-gn

    2022年7月24日
    15
  • docker打开2375监听端口「建议收藏」

    docker打开2375监听端口「建议收藏」由于在使用caliper时,需要用到Docker的监听端口,所以此步骤如下:1、修改/usr/lib/systemd/system/docker.service,在[service]的ExecStart,添加-Htcp://0.0.0.0:2375ExecStart=/usr/bin/dockerd-Htcp://0.0.0.0:2375-Hfd://–containerd=/run/containerd/containerd.sock2、刷新配置文件,重启docker

    2022年5月26日
    243

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号