关于单级PID及串级PID

2023-05-16

简单记录下我在学习PID过程中遇到的困难及解决方法,希望能对大家有所帮助。

1. 首先,关于PID这块理论知识必须非常清楚,能够自行推导公式,包括位置式PID公式和增量式PID公式
2. 实现位置式PID和增量式PID的C语言代码编写
代码如下如下

  • [ 1 ] 位置式PID(C语言实现)
#include <stdio.h>




//结构体
typedef struct
{
	float kp;
	float ki;
	float kd;
	float expect;		//期望
	float ex;			//误差
	float ex_prior;		//前次误差
	float ex_sum;		//误差和
	float ux;			//输出
}_pid;

_pid p_struc = {0.5,		//P
				0.1,		//I
				0.001,		//D
				};


void  pid_func(_pid *p,float temp_exp);										//函数声明



int main()
{
		
	int i = 0;

	

	while(i++ < 500)														//测试
	{
		pid_func(&p_struc,1000.0);
		printf("The output is : %.3f\r\n",p_struc.ux);
	}



	return 0;
}



//位置式PID实现函数
//入口参数 结构体指针/期望值
void  pid_func(_pid *p,float temp_exp)
{
	p->expect = temp_exp;													//传参

	p->ex = p->expect - p->ux;												//求出误差	
	
	p->ex_sum += p->ex;														//求误差累加和

	p->ux = p->kp*p->ex + p->ki * p->ex_sum + p->kd * (p->ex-p->ex_prior);	//主体计算
	
	p->ex_prior = p->ex;													//保存副本

}
  • [ 2 ] 增量式PID(C语言实现)
#include <stdio.h>




//结构体
typedef struct
{
	float kp;
	float ki;
	float kd;
	
	float expect;								//期望
	float ex;									//误差
	float ex_prior;								//前次误差
	float ex_prior_prior;						//前前次误差

	float ux;									//输出
	float dux;									//输出增量 
		
}_pid;




_pid p_struc = {
				0.5,							//P
				0.1,							//I
				0.001,							//D
				};



void pid_func(_pid *p,float temp_exp);			//函数声明






int main()
{


	int i = 0;

	

	while(i++ < 500)							//测试						 
	{
		pid_func(&p_struc,1000.0);
		printf("The output is : %.3f\r\n",p_struc.ux);	
	}





	return 0;
}




//增量式PID实现函数
//入口参数 结构体指针/期望值
void pid_func(_pid *p,float temp_exp)
{

	p->expect = temp_exp;						//传参

	p->ex = p->expect - p->ux;					//求出误差
		
	p->dux = p->kp * (p->ex - p->ex_prior) + p->ki * p->ex + p->kd * (p->ex - 2 * p->ex_prior + p->ex_prior_prior);
												//计算增量

	p->ex_prior_prior = p->ex_prior;			//保存副本
	
	p->ex_prior = p->ex;						//保存副本

	p->ux += p->dux;							//计算输出

}

3. 深入理解串级PID,关于这部分,直接参考别人写的,基本就能看懂,资料如下
1 . B站关于串级PID讲解视频,先通俗理解下
https://www.bilibili.com/video/av24220271
2 . 而后看下面这篇博客对串级PID深入理解,框图必须看懂
https://blog.csdn.net/csshuke/article/details/80252406

4.研究匿名代码中关于PID的部分,如下
关于匿名中PID这块东西还是挺多的,简单看了下,首先是“Ano_Pid.c”此文件,实现单级PID,虽然简单,但是后面各种PID控制都直接调用此文件中的函数,很重要,务必看懂,后面是“Ano_AttCtrl.c”文件,里面是关于角度环和角速度环的串级PID内容,接下来是“Ano_AltCtrl.c”文件,设计的是高度环和高度速度环,由于未涉及到过这方面所以也不是很懂,最后顺带着把“Ano_FlightCtrl.c”和“Ano_LocCtrl.c”一起解决了,基本上PID就差不多可以结束了。
以下关于诸文件的解读会各开一个新的文章,所以本文到此结束。
兄弟们,任重而道远啊!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于单级PID及串级PID 的相关文章

  • 大规模多智能体强化学习资料整理

    多智能体中存在一些问题和一些可行解决方法 2020年 xff0c Multi Agent RL领域的主流研究方向有哪些 xff1f 深度强化学习 初学者入门介绍 xff08 通俗易懂 xff09 多智能体强化学习 新手入门算法论文大总结 多
  • python路径拼接os.path.join()函数的用法

    os path join 函数 xff1a 用来连接路径名组件 1 如果各组件名首字母不包含 则函数会自动加上 2 如果有一个组件是一个绝对路径 xff0c 则在它之前的所有组件均会被舍弃 3 如果最后一个组件为空 xff0c 则生成路径以
  • linux python解决中文字体Font family [‘sans-serif‘] not found. Falling back to DejaVu Sans

    点击此处
  • Python导入自定义模块方法

    添加链接描述
  • 课程学习邂逅强化学习

    一篇综述带你全面了解课程学习 Curriculum Learning 课程强化学习 课程学习邂逅多智能体强化学习
  • 常见的几种白盒测试

    2019 6 26 补充与修正了短路相关的内容 2019 9 16 修正了短路部分的错误 xff0c 顺便去掉了用词不合适的前言 目前我所了解到的逻辑覆盖 xff08 而非路径覆盖 xff09 型的白盒测试大概有这几种 xff1a SC x
  • 元强化学习

    元强化学习 即可以迁移到训练阶段未见过的任务中
  • 深度学习中的标量、向量、矩阵和张量的区别

    在深度学习中 xff0c 张量 xff08 tensor xff09 的维数就是张量的阶数 0维的tensor就是标量 xff0c 就是一个单独的数 xff1b 1维的tensor就是向量 xff0c 就是一列数 xff0c 其中的每一个元
  • word使用技巧

    删除文档中多余的空白页 在word中插入图表目录 xff08 插图清单 表格清单 xff09 step1 先设置图表目录 xff08 引用 插入题注 xff09 step2 然后在目录页面点击 xff08 引用 插入表目录 xff09 st
  • tf.AUTO_REUSE的作用

    Tensorflow复用计算图 reuse 61 tf AUTO REUSE tf AUTO REUSE作用
  • 对多智能体强化学习算法MADDPG的理解

    MADDPG的架构 MADDPG采用的是 中心化训练 43 去中心化决策 的架构 xff0c 是一种Actor Critic方法 其中每个智能体都有一个价值网络和策略网络 价值网络和策略网络 第i号价值网络 Critic 输入 xff1a
  • 互联网知识点整理

    软件测试知识点 数据库知识点 计算机网络知识点 数据结构知识点 C 43 43 知识点整理 JAVA知识点整理
  • 导出TensorBoard中的所有数据并平滑处理

    点击此处 tensorboard平滑曲线代码
  • RL论文数据图绘制

    rl plotter 强化学习论文里的训练曲线是用什么画的 xff1f 如何计算相关变量
  • 强化学习之美

    强化学习作为一门灵感来源于心理学中的行为主义理论的学科 xff0c 其内容涉及概率论 统计学 逼近论 凸分析 计算复杂性理论 运筹学等多学科知识 xff0c 难度之大 xff0c 门槛之高 xff0c 导致其发展速度特别缓慢 随着近年来以
  • 直线型一阶倒立摆2---建模

    三 直线型一阶倒立摆模型建立 一级倒立摆系统是一个不稳定的系统 xff0c 需要对其进行机理建模 在研究过程中 xff0c 应忽略空气摩擦 等 xff0c 而后可将倒立摆系统进行抽象化 xff0c 认为其由小车和匀质刚性杆两部分组成并对这两
  • 可用性和可靠性的区别

    首先 xff0c 这两个属性都是质量 xff08 可维护性 xff09 的一部分 按照书上的定义 xff0c 可靠性 xff08 reliability xff09 xff1a 在规格时间间隔内和规定条件下 xff0c 系统或部件执行所要求
  • 直线型一阶倒立摆3---控制器设计

    四 控制器设计 如前文所述 xff0c 倒立摆状态空间方程表明系统能够被控制 被观测 倒立摆或者其它受控系统达到受控稳定状态 xff0c 其实质上是指系统的各状态量收敛至一目标稳定值 对于状态空间描述而言 xff0c 系统矩阵A的特征值为负
  • Centos7 关闭防火墙

    Centos7 关闭防火墙 CentOS 7 0默认使用的是firewall作为防火墙 xff0c 使用iptables必须重新设置一下 1 直接关闭防火墙 systemctl stop firewalld service 停止firewa
  • 485无线通信/数传模块_zigbee模块_RS485转ZigBee_顺舟智能

    一 概述 顺舟智能 SZ02系列 ZigBee无线串口通信设备 xff08 485无线通信 数传设备 xff09 xff0c 采用了加强型的ZigBee无线技术 xff0c 集成了符合 ZIGBEE协议的射频收发器和微处理器 xff0c 符

随机推荐

  • 华清远见嵌入式学院学员实践项目案例介绍一

    基于GPRS的远程安防监控系统 1 项目背景 随着现代电力电子技术和微电子技术的迅猛发展 xff0c 自动化 xff0c 智能化程度的不断的提高 xff0c 家居安防技术正在不断发展 传统的家居安防系统已经越来越不能满足现代人的需求 消费者
  • Ubuntu 20.04.05安装ceres-1.14.0

    1 安装Ceres1 14 0 链接 Ubuntu20 04安装Ceres1 14 0 3 cmake编译ceres遇到的问题 xff08 1 xff09 TBB 问题描述 xff1a Did not find Intel TBB libr
  • ubuntu18.04 安装编译ceres-solver-1.14.0 编译错误

    在Ubuntu18 04 安装Ceres solver 1 14 0 xff0c make时出现了98 Built target bundle adjuster xff0c ecipe for target examples CMakeFi
  • ls-remote -h -t git://github.com/adobe-webplatform/eve.git

    npm WARN deprecated bfj node4 64 5 3 1 Switch to the bfj package for fixes and new features npm WARN deprecated nomnom 6
  • 数据可视化图表插件调研:Echarts、Highcharts、G2、D3

    目前常用于前端网页数据可视化实现的图表插件主要有四款 xff1a Echarts Highcharts G2 D3 xff0c 开发一些产品工具的时候可能会集成这些开源的可视化插件 xff08 这里Highcharts不开源 xff09 1
  • 31岁转行的我

    2011年从一所普通二本师范大学毕业后先后从事了两年的教育工作 xff0c 但都没有挣到钱 xff0c 12年从深圳回到西安 xff0c 参加了几次公务员和事业单位的招考 xff0c 几次因0 1分的微小差距与国家饭碗擦肩而过 后来决定不再
  • git submodule 如何同步更新

    摘要 xff1a git submodule 更新之后 xff0c 如果在父仓库里直接调用 git submodule update init recursive 会发现 子模块的代码不会更新 初学者会很迷惑 xff0c 怎么能把子模块更新
  • egret 入门 初试

    整理的文章 白鹭引擎入门 趁着今天周六 xff0c 把苹果放下一边先 今天早上一醒来就装上了js编辑神器Webstorm xff0c 最近也开始关注了一些移动方面的 js 前端框架 如 谷歌的Angularjs 和 fackbook 的Re
  • Ubuntu 18之vnc连接不上问题(已解决)

    在配置vnc时所以的准备动作已经准备好了 xff0c 该配的文件也配好了 xff0c 但就是一直连接不上 在主机端报time out的错误 xff0c 后来查百度得知vncserver xff1a 1对应5901端口 xff0c 2就是59
  • Matlab R2019a Win64位 迅雷下载链接

    鉴于百度云和PanDownload各种限速 xff0c 所以我特意寻了迅雷磁力链接供大家下载 实在是因为百度云下载只有50 k s xff0c 而迅雷下载5 m s啊 Matlab R2019a Win64位 链接内容包括Matlab和Ca
  • 力扣K神图解算法数据结构解析08

    力扣K神图解算法数据结构点这里 八 位运算 剑指15 xff0c 二进制中1的个数 class Solution public int hammingWeight uint32 t n int cnt 61 0 for int i 61 0
  • 吴军老师《给中学生/大学生的书单》----Yohao整理

    2018 7 27记录 span class hljs code 给中学生的书单 span 一 文学类 18本 span class hljs code 1 金庸和琼瑶各一本 长篇的比短篇的好 span span class hljs co
  • 北航2系921 2021考研历年真题及参考答案(2020-2004)

    需要自取 百度网盘 提取码 xff1a iwbg 关于2020北航921试题 相信大家都听说了 xff0c 2020年的921试题整体难度较2019年小 2019考完后 xff0c 群里面怨声载道 xff0c 信号10年没考电路题了怎么就今
  • 姿态解算

    姿态解算全过程 关于这方面 xff0c 姿态计算的理解大致需要经过以下几个步骤 1 秦永元的 惯性导航 xff0c 不但十分基础而且写的也十分好 xff0c 适合入门 但是并不是所有章节都是需要看的 xff0c 其中1 2节 9 2节和9
  • 匿名飞控代码解读汇总

    由于本人临近毕业 xff0c 所做的毕设是有关无人机方面的 xff0c 所使用的也是匿名的飞控 lt 资料包 20171217 gt xff0c 所以首先需要读懂匿名代码然后才能增加自己的功能 xff0c 临近毕业还有两个月左右 xff0c
  • 融合磁力计的Mahony互补滤波算法

    https blog csdn net qq 21842557 article details 50993809 上面博客有关于磁力计的详细解释 xff0c 不过由于本人资质愚钝 xff0c 至今还不是完全理解 不过思想大致和加速度计差不多
  • 代码解读一 文件名“ANO_Imu.c”

    我把这个文件的所有代码贴上来了 xff0c 供大家参考 xff0c 由于本人水平有限 xff0c 且匿名代码注释比较少 xff0c 所以很多也不是很懂 xff0c 实在是一些莫名的定义太多了 xff0c 什么w x y z h之类的 xff
  • 每周学一点 egret(2): EgretConversion 工具转换ts

    今晚无聊试了一下wing的格式化和这个转换工具 开始的时候我尝试手写翻译 xff0c 发现这一款转换也比较简单 所以尝试做了一下转换 对于如果文件名是中文 要小心一点 总是出现怪怪的 转换后 xff0c 没有直接跳转到对于的目录去 如果加上
  • 代码解读二 文件名“Ano_Math.c”

    这里面都是一些关于数学函数的骚操作 xff0c 既然不使用math h xff0c 那么至少说明这里面的数学函数调用不应比math h里面的函数慢 下面贴出代码 xff0c 简要做了个注释 xff0c 看看就行 至于怎么做的 xff0c 有
  • 关于单级PID及串级PID

    简单记录下我在学习PID过程中遇到的困难及解决方法 xff0c 希望能对大家有所帮助 1 首先 xff0c 关于PID这块理论知识必须非常清楚 xff0c 能够自行推导公式 xff0c 包括位置式PID公式和增量式PID公式 2 实现位置式