所谓PID就是比例-积分-微分的英文缩写,但并不是必须同时具备这三种算法,也可以是 PD, PI,甚至只有 P算法控制,下面分别介绍每个参数的含义:

首先需要明确一个事实就是,要实现PID算法,必须在硬件上具有闭环控制,就是得有反馈。比如控制一个电机的转速,就得有一个测量转速的传感器,并将结果反馈到控制器中,而在自平衡系统中,常用的有三个控制环 — 角度环、速度环、转向环

大家可以想象出每个闭环的反馈元件分别是什么吗,对就是上面元件清单里面包含的 IMU(陀螺仪+加速度计)、编码器、摄像头(或者其他可以确定方位的元件比如陀螺仪,磁场计等)

P(比例):以小车巡线为例,现在需要让小车跟随一条轨迹前进,用PID算法控制方向环,反馈传感器就假设为摄像头。那么小车行进中有这么几种情况:
1.车通过摄像头发现自己处在轨迹的左边,位置误差值为正,那么就需要向右转向,转向值为正
2.车通过摄像头发现自己处在轨迹的右边,位置误差值为负,那么就需要向左转向,转向值为负
3.车通过摄像头发现自己处在轨迹的正中间,位置误差值为0,很欢快地笔直前行,转向值为0 

于是我们发现,小车转向值的输出可以简单地通过把位置误差乘以一个系数就得到了,而且显然,误差越大,得到的转向值也越大,符合需求。这里面这个系数,就是P了,而系数具体的大小,需要根据实际情况调试确定。
我们有了第一个公式:
1
P_term = kP * error

D(微分):还是以小车巡线为例,依然是那车那线那比例。那么小车行进中有这么几种情况:
在P参数的作用下:
1.小车从左边向中间逐渐靠拢,终于它到达了中点……然而,由于惯性,它根本停不下来!于是小车又到了线的右边
2.小车从右边向中间逐渐靠拢,终于它到达了中点……然而,由于惯性,它根本停不下来!于是小车又到了线的左边
3. …

这跟说好的不一样!于是这个时候D出场了,想想我们期待的效果是啥,我们希望小车到达中点,此时不光位置误差为0,还要转向速度误差也为0。

那么我们设定期望的转向速度为0,此时如果小车转向速度向右的话误差为+,向左为-,再看前面的情况1,小车的转向速度误差为+,我们应该在P之外再给它一个向左的转向力,才能保证它在到达中点时速度不会那么快;情况2类似,此时需要向右的转向力

也就是说,D相当于给了小车一个转向的阻力,而这个力,又恰好可以通过简单地把转向速度误差乘以一个系数得到,显然,转向速度误差越大,得到的阻力越大,符合需求(值得注意的是这里的转向速度是相对中点的,并不是指小车输出的转向速度,可以理解为“位置变化的速度”)
我们有了第二个公式:
1
D_term = kD* (error- last_error)

如果上面的例子还是不好理解的话,考虑前面的单摆模型:
P相当于重力的作用,让摆左右往复运动,而D则相当于空气阻力,让摆慢慢停在中点。D的大小很理想的情况下,应该是大概摆动左右各一下之后就停在中点,想象把摆放在水中摆动的情况。

I(积分):有的时候我们会发现,系统中存在一些固定的阻力,例如,我们用PID控制一个电机的转速,当给定的目标速度很小的时候,就会出现这样的情况:
根据P_term = kP * error,由于error很小,P的输出也很小,而由于摩擦力的存在,此时并不能让电机转动起来;又由D_term = kD* (error- last_error),由于电机没有转动,显然(error- last_error)始终为0于是D输出也为0,那么问题来了,除非改变目标值,否则电机就永远转不起来了…
I的作用就是消除这样的静态误差,它会将每次的误差都积累起来,然后同样也是乘以一个系数之后作为输出。比如上面的情况,虽然误差很小,但却不是0,于是在每一轮的计算中,I项把error逐渐累积,直到超过临界值让电机转起来;而在误差为0的情况下,I项却又不会帮倒忙。
第三个公式:I_term = kI*(I_term + error)

以上就是PID的全部计算了,最后三者加起来就得到了:
1
PID_output = P_term + I_term + D_term

每隔一段固定时间把它运行一遍,就是PID算法了。

PID算法的更多相关文章

  1. 线性控制原理——PID算法应用

    使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...

  2. PID算法学习记录

    最近做项目需要用到PID算法,这个本来是我的专业(控制理论与控制工程),可是我好像是把这个东西全部还给老师了. 没办法,只好抽时间来学习了. 先占个座,后续将持续更新!

  3. 位置式PID与增量式PID算法

    位置式PID与增量式PID算法  PID控制是一个二阶线性控制器     定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.     优点             ...

  4. PID算法笔记2

    总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...

  5. PID算法(c 语言)(转)

    PID算法(c 语言)(来自老外) #include <stdio.h> #include<math.h> //定义PID 的结构体 struct _pid { int pv; ...

  6. PID控制器开发笔记之一:PID算法原理及基本实现

    在自动控制中,PID及其衍生出来的算法是应用最广的算法之一.各个做自动控制的厂家基本都有会实现这一经典算法.我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景. ...

  7. 单片机之PID算法

    说到PID算法,想必大部人并不陌生,PID算法在很多方面都有重要应用,比如电机的速度控制,恒温槽的温度控制,四轴飞行器的平衡控制等等,作为闭环控制系统中的一种重要算法,其优点和可实现性都成为人们的首选 ...

  8. 【转】位置式、增量式PID算法C语言实现

    位置式.增量式PID算法C语言实现 芯片:STM32F107VC 编译器:KEIL4 作者:SY 日期:2017-9-21 15:29:19 概述 PID 算法是一种工控领域常见的控制算法,用于闭环反 ...

  9. 【sky第二期--PID算法】--【智能车论坛】

    [sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread& ...

随机推荐

  1. CSS制作波浪线

    建议先去了解清楚了径向渐变,线性渐变的用法先 这个作者的css制作波浪线讲解很不错额:https://www.jianshu.com/p/8570433e3669不理解的可以看看这个链接的额 可以去菜 ...

  2. C语言的学习

    一.文件的使用方式 r  只读  rb只读  r+ rb+(不带b的为已存在的文本文件,带b的为二进制文件(binary),带+号的为读写文件) w 只写 wb只写 a 追加  ab追加 二.说明 1 ...

  3. [TLSR8266] 1、搭建tlsr8266编译框架在win服务器中

    前言 泰凌微TLSR8266蓝牙芯片的开发环境在win桌面系统中搭建起来比较简单,在其论坛SDK版块->Telink IDE中可以找到安装包,直接安装即可生成基于Eclipse的开发环境,及相关 ...

  4. Python进阶内容(六)--- 函数式编程

    斐波那契数列(Fibonacci)的递归与非递归实现 费波那契数列由0和1开始,之后的数就由之前的两数相加 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

  5. Juicer模板引擎使用笔记

    关于Juicer:Juicer 是一个高效.轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC). 除此之外,它还可以在 Node.js ...

  6. 【数论】洛谷P1372又是毕业季

    题目背景 "叮铃铃铃",随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业 ...

  7. 001_JS基础_JavaScript简介

    1.1 历史 JS的发展历史: http://www.w3school.com.cn/js/pro_js_history.asp 1.2 JavaScript简介 以下摘自维基百科对javascrip ...

  8. AOP---jdk动态代理的思考

    引出问题:动态代理中是谁调用了invoke方法 为了更好的说明情况,我先写一个动态代理类 a.Person类 public interface Person { public void eating( ...

  9. 阿里云云虚拟主机安装Z-BlogPHP

    简介 在阿里云买了一个云虚拟主机,叫共享虚拟主机普惠版,6 块钱一年.本着练习上手的目的,尝试在阿里云云虚拟主机上安装Z-BlogPHP,一个个人建站的CMS 系统. 云虚拟主机网页空间为200M,M ...

  10. Andorid基础_web通信_webView案例

    一.创建Activity,layout文件 activity_web_view.xml代码: <?xml version="1.0" encoding="utf-8 ...