PID解释:

位置式:

     可以看出,比例部分只与当前的偏差有关,而积分部分则是系统过去所有偏差的累积。位置式PI调节器的结构清晰,P和I两部分作用分明,参数调整简单明了。
但直观上看,要计算第拍的输出值,需要存储等每一拍的偏差,当很大时,则占用很大的内存空间,并且需要花费很多时间去计算,这是目前书籍及网络上普遍认为的位置式PI的缺点。
然而在具体编程操作中,可在每一拍对积分部分进行累积,再加上当前拍的比例部分,即为当前的输出,根本不需要大量的内存空间;另外由于输出有可能超过允许值,因此需要对输出进行限幅,而当输出限幅的时候,积分累加部分也应同时进行限幅,以防输出不变而积分项继续累加,也即所谓的积分饱和过深。
增量式:
    

上式仅仅为增量,只需要当前的和上一拍的偏差即可得出结果,不需要存储每一拍的偏差,因此占内存空间小,这也是普遍认为的增量式的优点。
然而很多场合下需要的往往不只增量,还有上一拍的输出值,于是可知增量式PI调节器算法为


由于,在具体编程操作中,对每一拍的进行累积,即为PI调节器的输出;同样地,为了避免超过允许值,仅需对输出限幅即可

PID一般有两种:位置式PID和增量式PID。在小车里一般用增量式,为什么呢?位置式PID的输出与过去的所有状态有关,计算时要对e(每一次的控制误差)进行累加,这个计算量非常大,而明没有必要。而且小车的PID控制器的输出并不是绝对数值,而是一个△,代表增多少,减多少。换句话说,通过增量PID算法,每次输出是PWM要增加多少或者减小多少,而不是PWM的实际值。

 
程序

//计算PI控制器的输出,并将结果显示到窗口
float errorheight = currentheight - beforeheight;
detaheight = KP * (errorheight - beforeheight) + KI * errorheight; //PI 控制器计算高度变化值
//对控制器输出做出必要的防错
if ( detaheight <= 0 )
{
detaheight = 1;
}

//更新PI控制上次误差
beforeheight = errorheight;

pd

while ( (abs(theta1) > epson) || (abs(theta2) > epson) )
{
//利用雅克比矩阵求得电机的运动
gemm( Jaco_rot.inv(cv::DECOMP_SVD), ImageCharacterVar, 1, NULL, 0, MotorPoseVar, 0);

//采用PD控制,控制电机的运动
float deltaThetax(0), deltaThetay(0);
deltaThetax = kpX * MotorPoseVar.at<float>(0,0) + kdX *(MotorPoseVar.at<float>(0,0)- ErrorOrigin.at<float>(0,0) );
deltaThetay = kpY * MotorPoseVar.at<float>(1,0) + kdY *(MotorPoseVar.at<float>(1,0)- ErrorOrigin.at<float>(1,0) );

//电机运动
if ( deltaThetay < 0 )
SurugaController5.RelativeMove(1, 1, int(deltaThetay));
else
SurugaController5.RelativeMove(1, 0, int(deltaThetay));
if ( deltaThetax < 0 )
SurugaController5.RelativeMove(2, 0, int(deltaThetax));
else
SurugaController5.RelativeMove(2, 1, int(deltaThetax));

ErrorOrigin = MotorPoseVar;

上述为典型的增量式

J*△μi=ei=△xi

△x2i=   ui=   kp*(ei-ei-1)+ki*ei

输出为增量,适合电机

 
 
 
 
 
 
 
 
 
 
 
 
 

PID控制的更多相关文章

  1. 【iCore3应用开发平台】发布 iCore3 应用开发平台PID控制代码

    说明:1.本代码包包含FPGA和STM32F407两部分内容2.FPGA工程为出厂代码FPGA工程,版本为REV43.STM32F407为只含PID控制的ARM工程4.在使用风扇过程中,请勿将手伸入扇 ...

  2. 两轮自平衡小车双闭环PID控制设计

                                                                                            两轮自平衡小车的研究意义 ...

  3. 数字式PID控制的应用总结

    PID控制是一个二阶线性闭环控制器,通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型 ...

  4. PID控制学习笔记(二)

    不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...

  5. SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  6. MATLAB-离散系统的数字PID控制仿真

    %PID Controller clear all; close all; ts=0.001; %采样时间=0.001s  sys=tf(,]); %建立被控对象传递函数 dsys=c2d(sys,t ...

  7. 了解PID控制

    @2019-03-07 [小记] 了解PID控制 比例 - 积分 - 微分 积分 --- 记忆过去 比例 --- 了解现在 微分 --- 预测未来

  8. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

  9. STM32L476应用开发之七:流量的PID控制

    在气体分析仪使用过程中,为了力求分析结果的准确性,一般要求通过的气体流量尽可能的稳定.为了保证流量控制的稳定,我们采用PID调节来控制气路阀门的开度. 1.硬件设计 我们采用的流量计为气体质量流量计, ...

  10. 转 C#实现PID控制的模拟测试和曲线绘图

    C#实现PID控制的模拟测试和曲线绘图   本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...

随机推荐

  1. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  2. java中servlet的各种路径

    1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...

  3. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  4. 【转】 FineBI:自助式BI工具打造业务分析的“快与准”

    如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...

  5. Android中的LinearLayout布局

    LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,  线性布局是按照垂直方向(vertical)或水平方向 ...

  6. Oracle 10g安装教程

    首先下载安装文件,打开后文件结构如图所示: 安装之前请关闭Windows防火墙并断开网络. xp系统下直接双击运行(本经验以XP系统安装为例进行讲述). 如果是在win7上安装,如图:在setup文件 ...

  7. eclipse,myeclipse 误删文件,回滚历史文件操作

    昨天因为误操作把一个写了一上午的代码给删了,找到的这个,以前竟然还没发现有这个功能- -! 具体操作: 1.建立同路径同名的文件 2.文件上右键 --> Compare With --> ...

  8. [DS] 标记字段

    标记字段 代码中有时候有这种需求:需要一个公共访问的标记字段,以下称为标记字段. 下面是案例: 一个订单详情页面,如果页面在显示中,程序中其它地方需要访问这个"正在查看中"的订单信 ...

  9. 说说DOM的那些事儿

    引子 先来一颗栗子: <img src="/sub/123.jpg" alt="test" /> <script type="tex ...

  10. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...