用Python实现的PID控制算法的演示

看了看PID控制算法的原理,自己用Python的matplotlib简单写了一个控制小球到指定位置的小演示。

如果小球不在指定的高度,就计算误差,再输入一个控制信号——这里是加速度a,以便驱动小球运动,从而改变小球的位置。

不停的计算:计算高度误差,计算输出的信号——加速度a,计算新的速度,计算新高度。

如果只考虑小球当前位置和指定高度的误差,始终会来回摆动,无法进入稳定状态。

如果用到PID算法,可以很好的进入稳定状态。

因为是虚拟环境,没有考虑摩擦力,也就用不上PID算法的积分项,也是偷懒,就相当于PID里的PD两部分考虑了。

a(t)=u(t)=K_{p}\times \left [ Err(t)+P_{d}\times\left ( Err(t)-Err(t-1) \right ) \right ]

# -*- coding: utf-8 -*-
# Author: HarryJD@sina.com
import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np

# 设置字体
# mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
# mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 定义数据
itor = 1
X1 = 5  # 横坐标固定为5,只改变小球的高度
X2 = 15  # 初始纵坐标
XP = 10  # 预设的纵坐标
v = 0    # 速度
a = 0    # 加速度

Kp = 0.2
Kd = 0.2
Err1 = X2 - XP
Err0 = 0
Max_itor = 50000
#
plt.figure(figsize=(12, 8), dpi=100)
plt.ion()

while itor < Max_itor:
    # 清空旧的画布
    plt.cla()
    plt.xlim((-1, 20))
    plt.ylim((-1, 20))
    plt.plot([-1, 20], [XP, XP], 'r-')

    # rgeion
    a = Kp*(1.0*Err1 + Kd*(Err1-Err0))  # 按PD算法计算要给予的加速度
    # a = Kp*(1.0*Err1)  # 不用PD算法
    v = v - a
    X2 = X2 + v
    # endregion

    Err0 = Err1  # 保留旧的误差
    Err1 = X2 - XP  # 计算新的误差

    plt.scatter(X1, X2,  # 散点的横、纵坐标序列
                s=30,   # 点
                c='blue',
                label="PD Algorithm")
    plt.legend()  # 显示图例说明
    itor = itor + 1
    plt.pause(0.008)

通过这个小演示案例,更熟悉了一下Matplotlib,确实功能强大。

用matplotlib的交互模式,能很简单的完成演示动画。

 

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值