C++实现PID控制算法

2023-05-16

描述

PID控制算法,是自动化专业学生必须掌握的基本控制算法

比例积分微分算法

  • 比例项P:与当前误差相关
  • 积分项I:与一段时间积累的误差相关
  • 微分项D:与误差的变化相关

大家的解释都很多了,这里不进行描述了。说一下调参的顺序和心得吧:先调P,再调D,最后调I

调P,让曲线震荡起来
调D,阻止曲线的震荡,让曲线平滑
调I,把曲线整体调整到目标值

代码

我随便写的代码,pid三个参数没有调整,但PID的意思我是基本写清楚了。

#include <iostream>
#include <math.h>
#include <unistd.h>
double value_i = 0.0;
double dt = 0.1;
double PID(double value_target, double value_now, double value_last)
{
    double kp = 0.2;
    double ki = 1;
    double kd = 1;

    double value_p = value_target - value_now;
    value_i += (value_target - value_now)*dt;
    double value_d = (value_now-value_last)/dt;

    double control_value = kp*value_p + ki*value_i + kd*value_d;
    return control_value;
}
int main()
{ 
    double target = 10;
    double value = 0;
    double value_now = 0;
    while (true)
    {
        double dvalue = PID(target, value, value_now);
        value_now = value;
        value = value + dvalue*dt;
        usleep(100000);
        std::cout<<value<<std::endl;
    }
    return 1;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++实现PID控制算法 的相关文章

  • LADRC的学习——用simulink搭建仿真模型

    作者 墨心 时间 2019 7 25 用simulink搭建仿真模型 前面两篇博客主要讲了ADRC的相关概念和知识 并且尝试着搭建模型和仿真 之后学习了PID的相关知识 了解了Kp Ki Kd三个参数的意义 接下来 主要根据高志强教授的论文
  • 工程实践---ZN法整定PID

    工程实践 ZN法整定PID 知乎 zhihu com
  • 基于卡尔曼滤波进行四旋翼动力学建模(Simulink&Matlab)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 摘要 由于近年来民用和军事领域对
  • 电机控制进阶——PID速度控制

    之前的几篇文章 电机控制基础篇 介绍的电机编码器原理 定时器输出PWM 定时器编码器模式测速等 本篇在前几篇的基础上 继续来学习电机控制 通过PID算法 来进行电机的速度控制 并进行实验测试 PID基础 PID即 Proportional
  • PID稳压

    思路说明 我们设置一个目标值 这是我们要调节的目标 我们通过AD采样 PC3 采集到当前电压 通过减法运算我们得出当前电压与目标电压的差值 接下来我们只要发现当前电压与目标电压不同 我们就要想办法改变当前单片机的输出电压 PA8 也就是当前
  • 基于LabVIEW的PID算法解读

    记录一下 方便以后翻阅 下图是基本的PID算法实现方式 以及实现PID控制器所需的假设和转换 为实现PID控制器 LabVIEW要求算法对输入信号进行采样并离散积分和微分操作 一 误差计算 e k SP k PV k 上式中 e k 表示当
  • PID算法(一)PID简介

    PID算法简介及实现代码 PID简介 智能车比赛中 用到了PID算法 写下来当一个总结 PID是很经典且应用很广泛的控制算法 依据误差来减少误差 PID PID分为三部分 P 比例 P增大 可以加快系统响应速度 但是不能从根本上消除静态误差
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 Simulink 文章讲解 1 概述 文献来源 抗扰PI
  • 单端反激——隔离型DC/DC变换器的设计及仿真

    单端反激 隔离型DC DC变换器的设计及仿真 技术指标 1 原理分析 2 参数设计 3 仿真验证 技术指标 输入电压 V s m i n
  • # Arduino小车PID调速——整定参数初试水

    Arduino小车PID调速 整定参数初试水 在实现了小车较为可靠的测速基础上 便可以正式开展PID调速实验了 本文是基于使用Arduino平台上由Brett Beauregard大神写的PID库进行参数整定的 侧重于在对PID算法有基本了
  • 【平衡小车制作】(一)硬件原理图讲解(超详解)

    大家好 我是小政 之后的一系列文章我将介绍我玩平衡小车的过程以及遇到的一些问题 将这些内容记录下来分享给大家 也让大家少走一些弯路 接下来我将从硬件框架选择 软件编程 PID算法 PID调参 蓝牙遥控这五个部分向大家讲解平衡小车的制作过程
  • 进程组必须有一个正在运行的领导进程吗?

    在类 Unix 操作系统中 如果一个进程 pid和它的pgid相等 则该进程是进程组的领导者 但是 如果进程领导者已经退出 并且同组中的其他进程仍在运行 那么谁是继任的领导者进程 没有继任领导者 一旦流程组领导者退出 该组就失去了领导权 没
  • 如何在C++中使用system()命令获取执行进程的pid

    当我们使用system 命令 程序等待完成 但我正在执行process using system 并使用负载平衡服务器 因为该程序在执行系统命令后立即进入下一行 请注意 process可能不完整 system my script after
  • 如何在Python中检查是否存在给定pid的进程?

    有没有办法检查 pid 是否对应于有效进程 我从其他来源获取 pid 而不是os getpid 我需要检查机器上是否不存在具有该 pid 的进程 我需要它在 Unix 和 Windows 中可用 我还在检查 PID 是否未被使用 如果 pi
  • C - 获取用popen打开的进程的PID

    我有一个用 C 编写的程序 它使用 popen 打开另一个程序 我想获取该程序的 pid 或某种处理程序 以便在一定时间限制后 或者在它超出某些 ram 和 stdout 限制时杀死它 我认为这必须用ptrace来完成 它需要PID 但我不
  • 如何在 OSX 10.9 中从 ProcessSerialNum 获取 PID?

    GetProcessPID在 OSX 10 9 中被标记为已弃用 并附有注释 使用适当的 processIdentifier 属性 NSRunningApplication 对象 问题是构造类方法NSRunningApplication没有
  • mac os x 下进程使用的内存

    给定PID 如何获取进程当前使用的内存 具体来说 我正在寻找 进程使用的私有物理内存 RAM 进程使用的交换空间 但我对映射文件和共享内存不感兴趣 简而言之 我想确定通过终止 PID 将释放多少内存 RAM 和交换 这有用吗 您可以使用ps
  • Bash:是否可以阻止 PID 被重复使用?

    是否可以阻止 PID 被重复使用 例如 如果我运行一份工作myjob在背景中myjob 并使用获取PIDPID 是否可以阻止 linux 系统重新使用该 PID 直到我检查该 PID 不再存在 进程已完成 换句话说 我想做类似的事情 myj
  • 检查给定 pid 的进程是否存在

    给定 Linux 进程的 pid 我想从 C 程序检查该进程是否仍在运行 Issue a kill 2 http linux die net man 2 kill系统调用0作为信号 如果调用成功 则说明存在该pid的进程 如果呼叫失败并且e
  • 如何通过MATLAB命令获取外部程序(由MATLAB调用)的PID?

    我很好奇如何获取 MATLAB 在 Windows 中 调用的外部程序的 PID 例如 我通过命令调用 MATLAB 中的记事本 记事本 exe or 系统 记事本 exe 我想在调用此记事本后立即获取它的PID 由于一台计算机上可能会同时

随机推荐

  • 磁力链接怎么是html,磁力链接的使用方法有哪些

    磁力下载链接是的一种下载方式 xff0c 比较方便使用 不过有些网友就不知道怎么使用了 xff0c 其实使用方法非常简单 xff01 下面是学习啦小编给大家整理的磁力链接的使用方法 xff0c 希望能帮到大家 迅雷磁力链接的使用方法 1 通
  • 一个服务器和域名可以发布多少项目,一个服务器可以备案多少个域名

    一个服务器可以备案多少个域名 内容精选 换一换 域名如果需要绑定大陆站点 xff0c 必须在华为云备案 xff0c 未备案的域名无法绑定网站 xff0c 备案的具体步骤请参考首次备案流程指导 绑定香港站点的域名无需备案 一个华为云帐号备案的
  • exchange服务器维护模式命令,Exchange .5维护指导.doc

    Exchange 5维护指导 Exchange 5 5维护指导 一 重启和停止服务如许停止服务或重启服务应完全停止服务 xff1b 启动服务顺序 服务依赖 xff1a 1 Microsoft Exchange System Attendan
  • 12864字库的使用

    带字库的12864还是经常用到 xff0c 下面是我的一些小小的收获和记录 1 xff0c 我现在使用的12864的显示坐标和字库的定义如下 xff1a 四行汉字的初始坐标依次是 xff1a 80H xff0c 90H xff0c 88H
  • 诛仙2服务器不显示列表,诛仙2 服务器列表

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 石破天惊 富甲天下 29000 fujiatianxia link zhuxian com cn 956 流星赶月 铁血丹心 29000 tiexuedanxin link zhuxian co
  • 如何让matlab全速运行,提高matlab代码运行效率

    提高matlab代码运行效率 Matlab是一种解释性语言 xff0c 追求的是方便性 灵活性以及交互性 xff0c 因此在快速性上要比C语言这种性能强劲著称的稍逊一筹 然而 xff0c 通过一些手段 xff0c 我们也能让MATLAB语言
  • Word中给公式加编号,编号右对齐方法

    这种方法的神奇之处在于纯自动 xff0c 无须手动拖放 当然此方法的适用版本是office2016以及以后的版本 xff0c 亲测office2007不行 office2016百度云分享网址 xff1a 链接 https pan baidu
  • 构建私有镜像

    文章目录 Docker file定制镜像构建nginx镜像Dockerfile构建命令FROM 指定基础镜像RUN 执行命令COPY 复制文件ADD 文件复制CMD 容器启动命令ENTRYPOINT 入口点ENV 设置环境变量ARG 构建参
  • ROS问题整理

    问题Diary 目录 问题Diary ROS建模期 2021 2 7 1 ROS xff1a No module named rospkg 2 ImportError dynamic module does not define modul
  • MySQL——单表查询(素材+习题)

    例题 1 查询全部课程的信息 2 查询信工学院开设的课程名 课程号及学分 3 查询学分超过3学分的课程代码 课程名和开课单位 4 查询计科专业和大数据专业的学生信息 5 查询不是信工学院的学生姓名和学号 6 查询年龄是17 18 19的学生
  • 如何理解事件以及使用事件

    疑惑点 xff1a 对于刚接触事件来说 xff0c 往往会有一种现象那就是 xff0c 我为什么要用事件来调用过程 xff0c 我直接调用不行吗 xff1f 一样可以达到效果啊 xff0c 我根本就搞不懂为啥需要事件呢 xff1f 理解直接
  • centos -bash: npm: 未找到命令

    原因 xff1a 未安装 npm 解决 xff1a 1 下载 node js 阿里云镜像 xff1a CNPM Binaries Mirror cd usr local 下载所需版本 wget https nodejs org dist v
  • (PMP) 一、引论

    xff08 PMP xff09 一 引论 1 项目1 1 什么是项目1 2 项目特点 xff1a 独特性 临时性和渐进明细1 3 项目终止情况1 4 项目驱动变更1 5 项目创造商业价值 2 项目管理2 1什么是项目管理2 2 项目组合 项
  • VI使用

    VI使用 vi编辑器是所有Unix及Linux系统下标准的编辑器 xff0c 它的强大不逊色于任何最新的文本编辑器 xff0c 这里只是简单地介绍一下它的用法和一小部分指令 由于对Unix及Linux系统的任何版本 xff0c vi编辑器是
  • (PMP)二、项目运行环境

    1 事业环境因素 xff08 不可控 xff0c 须遵守 xff09 事业环境因素 xff1a 项目团队不能控制的 xff0c 将对项目产生影响 限制或指令作用的各种条件 这些因素可能会提高或限制项目管理的灵活性 xff0c 并可能对项目结
  • (PMP)三、项目经理的角色

    1 项目经理 项目经理 xff1a 项目经理是由执行组织委派 xff0c 领导团队实现项目目标的个人 注 xff1a 项目经理无需承担项目中的每个角色 xff0c 但应具备项目管理知识 技术知识 理解和经验 项目经理通过沟通领导项目团队进行
  • Redis随笔---五种基本数据类型和三种特殊数据类型

    基础操作 1 redis有16个数据库 使用命令 lt select gt 切换数据库 2 keys 查询全部key 3 清空当前的数据库的内容 flushdb 4 清空全部数据库的内容 flushall 五大数据类型 1 string类型
  • FastRTPS(一)——基本知识

    Fast RTPS是eProsima公司开发出来的一个库 xff0c 实现的是DDS标准中的RTPS标准 xff0c 用于通讯 引言及目录 ROS2相比ROS1 xff0c 引入了DDS xff08 这篇不是讲ROS的 xff0c 所以是简
  • QT5配置FastRTPS和FastCDR

    问题描述 当电脑已经成功安装了FastRTPS和FastCDR后 xff0c 如果想要在QT程序中使用FastRTPS应该如何去做 配置 Ubuntu16 04 xff08 其实什么系统都行 xff0c 只不过我当前的是Ubuntu xff
  • C++实现PID控制算法

    描述 PID控制算法 xff0c 是自动化专业学生必须掌握的基本控制算法 比例积分微分算法 比例项P xff1a 与当前误差相关积分项I xff1a 与一段时间积累的误差相关微分项D xff1a 与误差的变化相关 大家的解释都很多了 xff