PID:从入门到放弃

作者:凤凰游戏 发布时间:2021-02-20 11:07

  前段时间参加了智能小车的比赛为了方便和快速性我们采用了四个麦克纳姆轮结构的小车并用openmv做视觉导航定位。由于这个项目是第一次做而且没有学长学姐的指导不过好歹跌跌撞撞的走过来了。现在横跨在我们面前的是“如何使小车启动后直走”这一个大魔王。为了战胜它我们决定去寻找传说中的“pid调节器”圣剑……

  首先单片机的一般GPIO口输入输出量为0和1也就是对应的0V和5V或3.3V但是现在的STM32系列的单片机不仅可以输入输出0V和5V同时也可以输入输出05V之间的电压。但由于05V电压变化范围很小并且电压值属于一个物理量这个量并不直观并且这个量并不能由单片机直接输入输出或处理。我们可以把这个物理量转变为更加直观的数字量这个数字量不仅可以表现出电压的相对高低而且这个数字量可以直接给单片机进行数据处理。我们把05这一段区域等分成256等份这里的256是单片机标准库里所提供的对于模拟量精度的设置当然用户也可以自己去写一个精度更高的模拟量输出函数那么05V电压我们就可以用0~255这些整数来表示。这样用一个直观的数字量去表示一个测量量电压、电流、频率、温度等这个数字量就是称为模拟量。

  我们普通的控制只需要给其高电平或者是低电平就可以进行控制了如果想让其在中间某个值进行控制就需要使用pwm来控制也就是快速的对该器件进行开关动作。一个比较常用的pwm控制情景就是来调节灯的亮度根据占空比的不同就可以完成灯亮度的不同控制。pwm的占空比就是指高电平保持的时间与该pwm时钟周期时间之比。一般用单片机来产生pwm有以下几种方法第一种就是用指令来形成pwm这种方法可以产生分辨率很高的pwm但是这样会影响其他任务的运行一般使用在比较简单的控制中。另外一种就是用定时器来产生pwm还有的单片机本身具有pwm模块功能。

  要了解什么是PID我们得先弄清楚为什么要PID。众所周知我们的电机驱动模型在假设输入量确定为目标转速输出量确定PWM一定时系统的传递函数模型可以用一个表达式进行表征这里看不懂的同学可以翻开控制工程看一下并且该传递函数只和系统本身的特性有关。就好比输入x传递函数就是y2x输出的自然就是2x了。但是实际情况下输入量和系统都会有一个干扰量输入电压也会波动并且输入输出也并不完全成线c;这就导致了我们无法实际准确的表达传递函数这会导致两点后果第一哪怕是同一型号规格两个不同的电机在同PWM输出的时候转速是不同的第二同一个电机同PWM在不同路况下会受到干扰的影响速度也是波动的。

  这就意味着我们用恒定PWM输出控制小车走直线的愿望破灭了。为了改善速度曲线c;经典控制理论习惯使用添加串联校正或者反馈校正但是刚才提到我们的实际电机模型是未知的明确的环节校正是比较困难的。我们联想在数学中对于一条曲线c;在某点附近可以用泰勒展开变成用一个多项式表述一段曲线c;而在控制中也是类似只不过这里的“多项式”变成了PID即比例环节积分环节和微分环节之所以选择这几个环节的原因参考传递函数的数学表达模型同样参考控制工程。

  在找宝物“pid调节圣器”之前需要向当地的村民问路是一种常识百度村的村民们都很热情提供的资料多种多样不过因为时间原因村民们表述不清个人能力不够等原因很多资料都是过时的错误的甚至无法理解的。作为勇者的我们没有办法只好拿着钱包抵……抱歉串台了只好拿着资料一点点学习对照终于锁定了若干条有价值的情报

  经过简单的情报分析我们对PID有了一个大概的理解也坚定了我们使用PID调节圣器打倒魔王的决心。那么接下来的就很清晰了我们现在对每个电机都有一个霍尔传感器通过这些传感器我们可以测得电机转速我们假设经过PID调节后四个轮子转速一样小车不就可以走直线f;自以为找到问题关键的我们踏上了寻找PID调节器的不归路。

  不过为了能尽快的找到PID圣器我们偷偷开启了勇者金手指打算看一下有没有游戏攻略。于是我们特地找到度娘经过百般恳求终于发现了arduino单片机居然有现成的封装好的库这线;老师无数次的告诉我们不要重复的造轮子但也一定要有造轮子的能力。为了践行老师的要求我们特别深入PID库源码辅助着度娘免费送给我们的这条珍贵的经验使用PID库轻松搞定PID上终于弄清了事情的线c;跃跃欲试只等动手……

  很早的时候就听闻PID调试是一个难点不过这并不是我们放弃的理由。决定采用arduino中封装好的PID库后问题已经变得简单很多了。观察PID源码需要我们设定的值有

  一共6个值Setpoint 相对是最容易理解的它就是我们想达到的目标值我们初步设定空载速度为2.00rad/s尽量慢一点保证摄像头能一次性捕捉到二维码。但是下地跑了一下发现前后运动虽然启动有点困难但是还可以左右却完全启动不了排除机械故障和代码问题后我们认为初始速度过小左右运动需要速度为4.00rad/s或者以上方可以。

  接下来是OutputLimits是输出的极限范围。我们观察代码公式得知该库是用的位置式PID。关于两者的区别详见PID控制及位置式与增量式区别所以我们输出的范围应该是0-255.

  接下里就是最复杂的PID调整。一般而言PI控制器就已经能很好的实现速度控制所以整体调整以PI为主。**如何调整PID呢**网上关于PID调整的技巧很多还有口诀什么的但是对于第一次接触调整的我们来说……恩这个吗。

  好在天无绝人之路经过一两天的折磨大致调整思路差不多整理出来了

  再调整I从1开始逐渐放大如果不震荡观察当I较小的时候并且存在静态误差时候会经过很长很长时间速度才会逐渐到达标准值增大I会减小反应时间而如果I过大则会产生明显的超调现象。我们需要在不改变P的情况将I调整到不出现震荡然后再回调一点。

  如果震荡过于频繁则可少量的加入D使图像稍微平滑一点但是尽量不要加。微分环节在传递函数中表示超前量及对当前运动趋势求导斜率进行估计从而提前反应

  观察整个速度曲线感觉仍然不是很满意思考一下问题出在那里呢

  实验如果利用两个轮子的速度差作为输入会不会好一点呢

  过程问题出现在了最后输出上现在我们将两个电机作为一个大的系统怎么处理最后得到的Output呢

  到这里我已经连续建立了3个不同的PID模型了但是连续失败让我突然有了一点疑惑难道位置PID不适合速度调节吗我决定先以当前最优的模型来跑一下于是又突然发现了一个严重的问题

  **四个轮子从开始到到达目标值附近的波动速率是不一致的。**即小车在刚开始会出现转向到最后才会走直线。这完全不符合比赛的要求我希望它在启动后能直接走直线。这个发现促使我放弃了位置式PID因为在实际调试中我发现位置式PID的波动很大我希望能减小这种波动所以我更换了增量式PID。模仿PID库我重写了PID类将其改成了增量式以后的工作都是在增量式调节的背景下进行的。

  增量式与位置式的一个不同在于它是有初始值的。同时为了解决启动不走直线c;我们决定放大初始值的作用设置一个滤波器当当前速度与目标速度相差大于常量error后PID才真正启动。初始值可以用开环调试的方法测出来保证启动时尽量沿直线启动。而error呢……慢慢试吧。需要调整的参数不过从6个上升为8个而已没什么大不了的没什么大……哇的一声哭了出来。

  或许因为调整的次数比较多熟练了增量式的调整明显快了起来。最后1轮的速度曲线可以看出来还不错

  改进加入滤波器并且采用 (double)( (int)转速 ) 的方法降低精度

  猜想是不是因为没有悬挂底盘导致车轮没法完全接触地面导致打滑之类的现象

  猜想传感器精度、安装误差、摩擦角非完全45度导致的累积误差

  这时候我又看到了放在前面的北京科技大学飞思卡尔智能车摄像头一组的技术报告发现他们同时使用了速度PID和……方向PID我们的目标不是控制方向吗既然速度不行那么方向可不可以呢

  实验仔细研究他们的方向PID发现一个很绝望的事情他们的方向控制完全是由转向一个舵机控制的而麦克纳姆轮呢……抱歉打扰了并且方向PID的输入将不会是转速可以是视觉也可以是陀螺仪。前者由于由openmv单独处理和主控通讯进行调控代价太大而后者……不会需要学习临近考研的学习代价更大。

  所以总结一下历时3个星期的学习和调试进度为零经过了从入门、学习、钻研、到放弃的全过程呼应题目非常完美。

  其实我私以为PID应该还是可以继续调整的但是时间的确不多了所以无奈之下选择放弃到最后仍然有几个猜想没有试验留待小学弟们解决了

  一个 Python 程序员的成长路线图应该是这样子的:基础语法语感训练课题练习分方向继续学习中级程序员拓展深度和广度高级程序员。

  控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用

  (proportion integration differentiation)其实就是指比例,积分,微分控制。先把图片和公式摆出来,看不懂没关系。(一开始看这...

  控制器(比例-积分-微分控制器),由比例单元(P)、积分单元(I)和微分单元(D)组成[1]。可以透过调整这三个单元的增益Kp,Ki和Kd来调定其特性。

  算法分析 必须对传感器的值进行检测(从被控对象中取值-采样) 1.从开机以来传感器所有采样点的一个数据序列 X1、X2、X3、Xk-2、Xk-1、Xk 2.分析采样点的数据序列,可以挖掘出3个方向上的信息 ①Ek=Sv-Xk 1)Ek 0 当前未达标 2)Ek =0 已经达标 3)E...

  的故事小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30 分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3 ...

  总结一下数据分析必备技能,希望可以帮助到各位。 一、数据分析三剑客 Nump多维数组的创建、处理 线性函数、矩阵详解 Pandas数据结构 高斯分布、卡方分布 Pandas下的绘图机制 Matplotlib绘图流程、方法 数据加载、清理、存储、转化、合并、重塑等多方位分析 二、MySQL 多种数据库特点与应用场景 MySQL实战 MySQL

  算法投入单片机使用时,往往需要硬件的支持,在调试时非常麻烦。本文通过Matlab仿真的手段实现

  控制作为传统的控制方法,介绍很多,程序也有很多,这里就不多做介绍。本文主要分两部分,一部分是控制车速快速稳定,一部分是对

  自整定的一些看法。 一、控制车速快速稳定 这里的车是指智能小车(差速控制),不是指汽车。控制小车速度由0mm/s到100mm/s,稳定时间需要控制在200ms内。因为死区和摩擦力的原因,车轮的转速有滞后现象。利用位置式

  的相关知识就把自己从刚接触到仿真出结果看到的大部分资料总结一下,以及一些自己的ps 以下未说明的都为转载内容 1.转自 在讲解模糊

  高大尚,实则我们都是被他的外表所震撼住了。先被别人唬住,后被公式唬住,由于大多数人高数一点都不会或者遗忘,所以再一看公式,简直吓死。了解了很浅的原理后,结果公式看不懂,不懂含义,所以最终没有透彻。我这里先对公式进行剖析,公式理解明白了,结合网上的一些

  这三个系数的含义进行简单扫盲,。同时也防止自己遗忘。P是比例系数,I是积分系数、D是...

  的实现公式: 式中 e(k)=e(k)-e(k-1) 进一步可以改写成 式中 、、 为了便于理解,也可写成: 式中e(k)为第k次采样时的设定值与实际值的差,e(k-1)为上一次采样时的设定值与实际值的差值,e(k-2)一样类推。 所以增量式

  算法 小明接到这样一个任务: 有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不...

  的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊

  参数整定上的应用。 1、模糊算法的原理 模糊算法是一种基于智能推理的算法,虽然称之为模糊算法其实并不模糊,实际上是一种逐步求精的思想。一...

  控制。 神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的

  环境:Vmware Workstation;CentOS-6.4-x86_64 程序和进程: 1、程序:程序是静止的,程序就是磁盘上的一个文件。 2、进程:进程是一个正在执行的程序的实例。 3、进程是动态的。 4、一旦程序被操作系统加载进内存了,那么这程序就成为了进程。

  的理解用这个例子阐述一遍。 有个漏水的水缸,而且漏水的速度还不是恒定的。然后我们还有个水桶,我们可以控制往水缸里面加水或者从水缸里面舀水出来。另外我们可以检测水平面。现在我们的目的就是要控制水平面稳定在我们想要的任何一个平面上...

  概述 在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的

  调节器)是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点 分类 模拟

  (通过AD/DA,结合数字编程来实现) 数字位置式算法:适用当前的输出...

  ,虽然可能执行效率不高,但是用python写工具的时候还是很方便的。从github上把代码搬下来,简单分析一下 给代码: 在截个都看烦了的公式意思一下吧 #!/usr/bin/python # # This file is part of Iv

  . # Copyright (C) 2015 Ivmech Mechatr

  chmod: cannot access build.sh: No such file or directory

  我也遇到了这个问题,请问你解决了吗?用ORB-SLAM3跑EuRoC数据集,同一个数据用ROS接口和非ROS接口跑,非ROS接口输出轨迹姿态和groundtrue拟合的很好,但是ROS接口输出的rpy都和GT有个幅值差,不知道是怎么造成的?另外,GT的rpy有突变,突变值差了一个负号,感觉是四元数转欧拉角的时候的问题?


凤凰游戏
© 2013 北京格林吉能源科技有限公司.版权所有