当前位置: 首页 > news >正文

PID控制示例

PID控制简单示例

import numpy as np
import matplotlib.pyplot as plt
import copy# 定义曲线函数 y = sin(x)
def target_curve(x):return np.sin(x)class PID:def __init__(self, kp, ki, kd):self.kp = kpself.ki = kiself.kd = kdself.ep = 0.0self.ei = 0.0self.ed = 0.0self.dt = 0.1def get_u(self, e):self.ed = e - self.epself.ei += eself.ep = copy.deepcopy(e)u = self.kp*self.ep+self.ki*self.ei+self.kd*self.edif u > np.pi/2: u = np.pi/2        if u < -np.pi/2: u = -np.pi/2return u# 定义小车模型
class Car:def __init__(self):self.x = 0.0  # 当前位置self.y = 0.0  # 当前位置self.angle = 0.0  # 当前转角def update(self, angle_control, dt):self.angle += angle_control * dtself.x += np.cos(self.angle) * dtself.y += np.sin(self.angle) * dt# 定义控制参数
Kp = 10  # 转角比例增益
Ki = 0.0  # 转角积分增益
Kd = 10  # 转角微分增益# 定义时间参数
dt = 0.1
t = np.arange(0, 100, dt)# 创建小车对象和PID控制器对象
car = Car()
pid = PID(Kp, Ki, Kd)# 进行控制循环
x_ref = t  # 设定x值为时间
# y_ref = target_curve(x_ref)  # 计算对应的y值
y_ref = np.array([1]*len(t))
x_actual = np.zeros_like(t)
y_actual = np.zeros_like(t)
for i in range(len(t)):x_actual[i] = car.xy_actual[i] = car.y# 转角控制angle_error = y_ref[i] - y_actual[i]angle_output = pid.get_u(angle_error)# 更新小车状态car.update(angle_output, dt)# 绘制结果
plt.figure(figsize=(20, 5))
plt.plot(x_ref, y_ref, label='Reference')
plt.plot(x_actual, y_actual, label='Actual')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

在这里插入图片描述
尝试了一下跟踪正弦波的参数

Kp = 0.5
Ki = 0.01
Kd = 12

但效果一般。
在这里插入图片描述

http://www.lryc.cn/news/211743.html

相关文章:

  • GoLand GC(垃圾回收机制)简介及调优
  • AI:40-基于深度学习的森林火灾识别
  • 37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。
  • 通过Metasploit+Ngrok穿透内网长期维持访问外网Android设备
  • STM32 CubeMX配置USB HID功能,及安装路径
  • 【错误解决方案】ModuleNotFoundError: No module named ‘transformers‘
  • Mac 配置环境变量
  • 如何在linux服务器上安装Anaconda与pytorch,以及pytorch卸载
  • ansble
  • git常见命令(持续更新)
  • Python基础入门例程23-NP23 删除好友(列表)
  • 识别鼠标选中actor_vtkInteractorStyleTrackballActor
  • C++ Qt关于启动可执行文件存在的问题
  • 微信定时发圈,快人一步不落索
  • 数据分析在程序员职业中的重要性及实践应用
  • 计算机网络_04_传输层
  • 3 ALS算法的优化
  • lvsDR模式
  • Linux系统下配置王爽汇编语言环境
  • scss下解决父组件中使用::v-deep修改样式穿透到子组件的问题
  • Redis的瓶颈在哪里?
  • 如何在spark中使用scikit-learn和tensorflow等第三方python包
  • JS中call()、apply()、bind()改变this指向的原理
  • BUUCTF 镜子里面的世界 1
  • 【MySQL--->内置函数】
  • FFmpeg 从视频流中抽取图片
  • Oracle RU 19.21及 datapatch -sanity_checks
  • 云原生周刊:ingress2gateway 发布 | 2023.10.30
  • YOLOv8如何关闭AMP混合精度训练?
  • k8s、kubeadm安装