PID控制示例

news2024/11/18 10:51:23

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 = kp
        self.ki = ki
        self.kd = kd
        self.ep = 0.0
        self.ei = 0.0
        self.ed = 0.0
        self.dt = 0.1

    def get_u(self, e):
        self.ed = e - self.ep
        self.ei += e
        self.ep = copy.deepcopy(e)
        u = self.kp*self.ep+self.ki*self.ei+self.kd*self.ed
        if u > np.pi/2: u = np.pi/2        
        if u < -np.pi/2: u = -np.pi/2
        return 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 * dt
        self.x += np.cos(self.angle) * dt
        self.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.x
    y_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.coloradmin.cn/o/1150402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个人服务器怎么搭建?个人服务器搭建方法

​  个人服务器是指一台由个人拥有和管理的服务器&#xff0c;用于存储和提供个人网站、应用程序或其他在线服务。搭建个人服务器可以让我们更好地掌控自己的数据和网络资源。下面介绍一种常见的个人服务器搭建方法。 第一步&#xff1a;选择合适的硬件 我们需要选择一台适合…

【自用】英语一新题型每年归类

图片出自马天艺老师视频课。

数据存储新难题:“面粉”又涨价,“面包”怎么卖?

文 | 智能相对论 作者 | 叶远风 存储介质的价格要压不住了。 在减产策略执行数月后&#xff0c;三星、美光、SK海力士等存储介质巨头纷纷“扬言”要涨价&#xff0c;其中三星计划在今年四季度起调整NAND Flash产品的合约价格&#xff0c;涨幅超过10%。 “减产、削供、提价”…

lvsDR模式

LVS-DR模式 是最常用的LVS负载方式 直接路由模式 Lvs调度器 只负责请求和转发 转发到真实服务器 但是响应结果 由后端服务器直接转发给客户端 不需要经过调度器处理 可以减轻Lvs调度器的负担 提高系统性能和稳定性 工作原理&#xff1a; 客户端发送请求到vipLVS调度器接受请求…

mulesoft开发支撑

mulesoft开发支撑 开发支撑1. raml语法说明2. dataweave在线测试平台3. dataweave基础语法4. dataweave官方指南 感 开发支撑 1. raml语法说明 点击跳转 raml-10.md 重点看下面这部分内容&#xff0c;对raml语法做了详细说明和举例。 2. dataweave在线测试平台 点击跳转 d…

服务器感染了.mxdown-V-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

尊敬的读者&#xff1a; 在当今数字化时代&#xff0c;网络犯罪的阴谋在虚拟世界中蔓延&#xff0c;mxdown-V-XXXXXXXX、.vollhavhelp-V-XXXXXXXX、.arricklu-V-XXXXXXXX勒索病毒是其中的恶梦般存在&#xff0c;这三种勒索病毒均属于同一个勒索病毒家族旗下。这种勒索病毒以其…

【C/C++】引用的本质是指针常量

在c内部&#xff0c;**引用的本质是一个指针常量&#xff0c;**如 int * const ref &a。引用一旦初始化后&#xff0c;就不可以改变指向。 指针常量&#xff0c;int * const ref &a; const修饰的是 "ref "–> , ref 的值不可以改&#xff0c;即指针变量…

vue3中使用vue-i18n

1.先在项目中下载vue-i18n npm install vue-i18n9.6.2 2.1 .为了结构清晰&#xff0c;在src目录下创建一个lang文件夹 2.2 . 在lang文件夹分别下创建两个文件&#xff1a;en.js / zh.js代表两种语言 en.js: export default {message: {hello: hello,world,btn:modif…

国外怎么传大文件到国内,这款传输软件跨国企业必备

从国外传输文件到国内&#xff0c;这项任务常常充满了挑战。国际之间的距离、网络延迟、数据安全和文件大小限制等问题使得这个过程异常复杂。本文将深入剖析这些挑战&#xff0c;并说明一款优秀的跨国传输软件&#xff0c;如何能够成为解决这些问题的强有力工具。 国外传输文件…

暴力递归转动态规划(十一)

题目1&#xff1a; 这篇帖子中有多道题&#xff0c;由浅入深。 arr是货币数组&#xff0c;其中的值都是正数。再给定一个正数aim。每个值都认为是一张货币&#xff0c;即便是值相同的货币也认为每一张都是不同的&#xff0c;返回组成aim的方法数。 例如&#xff1a;arr {1,1,1…

企业文件防泄密方法

企业文件防泄密方法 安企神数据防泄密系统下载使用 企业文件是企业的核心资产&#xff0c;其中可能包含大量的敏感信息&#xff0c;如客户资料、产品配方、财务数据等。一旦这些文件泄露&#xff0c;可能会给企业带来不可估量的损失。 然而&#xff0c;企业文件防泄密是确保…

气膜场馆里面噪声很大怎么解决?

随着气膜结构在各个领域的广泛应用&#xff0c;人们开始意识到在这些场馆内部&#xff0c;特别是在大型活动和展览中&#xff0c;噪声问题可能会变得相当严重。传统的气膜结构通常难以提供良好的声学环境&#xff0c;这对于参与者的舒适度和活动的质量构成了挑战。为了解决气膜…

QECon大会亮相产品,支持UI自动化测试?RunnerGo

最近在gitee上看见一款获得GVP&#xff08;最有价值开源项目&#xff09;的测试平台RunnerGo&#xff0c;看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用&#xff0c;果断使用了一下&#xff0c;对其中场景管理和性能测试印象深刻&#xff0c;…

Wmware虚拟机网络配置

Wmware虚拟机网络配置 这几天我在家里电脑安装虚拟机打算学习一下集群配置&#xff0c;出现了一些问题。现在想把它记录下来&#xff0c;如果能给看到的人一些帮助&#xff0c;那就更好了。 1、桥接模式的配置 这个时候 我们的虚拟机就是桥接模式上网了。这时候可能会出现不能…

vue 获取年龄

今天对接完成百度身份证号识别相关API后&#xff0c;需要从身份中的出生年月日业获取其年龄&#xff0c;封装如下方法。 实现代码&#xff1a;ageValue()接受一个出生字符串 export function ageValue(val) {// 新建日期对象let date new Date()// 今天日期&#xff0c;数组&a…

如何快速搭建springboot+前后端分离(vue),客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

kxmall 针对中小商户、企业和个人学习者开发。使用Java编码&#xff0c;采用SpringBoot、Mybatis-Plus等易用框架&#xff0c;适合个人学习研究。同时支持单机部署、集群部署&#xff0c;用户与店铺范围动态定位&#xff0c;中小商户企业可根据业务动态扩容。kxmall使用uniapp前…

goctl 安装步骤

goctl&#xff1a;go-zero框架强大的项目脚手架工具&#xff0c;一个简单易用的代码生成工具。 go-zero官网&#xff1a;https://go-zero.dev/ go-zero 官网上面对 goctl 的介绍&#xff1a;goctl读作go control&#xff0c;不要读成go C-T-L。goctl的意思是不要被代码控制&a…

学习笔记|配对样本均数T检验|SPSS常用的快捷键|规范表达|《小白爱上SPSS》课程:SPSS第六讲 | 配对样本均数T检验

目录 学习目的软件版本原始文档配对样本均数T检验一、实战案例二、案例解析三、统计策略四、SPSS操作1、正态性检验2、配对样本T检验 五、结果解读六、规范报告1、规范表格2、规范文字 划重点Tips:SPSS常用的快捷键 学习目的 SPSS第六讲 | 配对样本均数T检验 软件版本 IBM S…