• 基于LEGO使用PID算法进行单光巡线机器人设计的心得体会


    高中毕业,高考成绩不错,这一个假期的时间相当富裕,准备静下心来研究PID算法,手边有LEGO EV3机器人,正好是很优秀的实验平台,研究完了以后,在这里谈谈我的感想。

    公式:

    光感测定值 - OFFSET(平均值) = ERROR(误差)

    TP(目标功率/直线功率)-/+ TURN = 左/右电机功率 (文章中所说的原函数

    KP*E + KI*I + KD*D = TURN

    OFFSET、E和TURN看起来可能很没有必要,但是定义它们属于流传已久的经验方法是先人总结的产物,他们的巧妙之处在之后的实际参数调整和后续的计算中会慢慢体现出来。

    不论用不用LEGO平台,入门的PID学习都可以参见糖大的帖子:用于乐高机器人的PID控制器

    PID算法虽然可以说是应用最广泛的控制算法,但是它的的要求一点不少,比如:必须是线性变化,对动态范围宽度要求较高。这次我研究的是较为简单的PID算法,光感值经过PID算法处理只需要控制电机功率。具体算法以及实现方式,请参见糖大的帖子,在此不多赘述。

    下面是心得体会:

    选择LEGO的平台有优点也有缺点,优点是:电机性能保障,其动态范围宽(PID对动态范围有很高的的要求)、加减速响应快、扭矩大。缺点是:其一、常用的LEGO编程IDE——EV3-G(可以刷其他固件,直接写代码),是图形化编程界面,对这种变量较多的程序并不友好,写起来很累。其二、LEGO的颜色(光电)传感器在巡线时,离地高度不好控制,太高就容易被环境光干扰(太阳光敏感些),太低就容易使动态范围不够,容易飞线。

    一、基础理解:

    1.巡线还是要从单光感的二段式开始,到双光感的三段式,到单光感的比例式,到双光感的比例式,再到单光感的PID算法式,最后到双光感的PID算法式。越往后dand单到双dech的差别与明显。

    2.PID算法式是对比例式的完善,PID算法中引入了四个变量,数值通用性较差,容易受到被控制装置“惯性”的影响,不同装置这种惯性都是不同的。

    3.PID算法的调试需要一定的数学依据,并且要清楚每一个变量的物理意义和数学意义。

    二、注意事项

    1.数据需要被约束在有效动态范围内

    (1)如果传感器在黑线上测得的值为8,在白线上测得的值为60,那么传感器的有效动态范围就是8到60。

    (2)电机不能从其自身的最低速度开始计算,此处有效的电机最低功率必须保证机器人的运动。我的机器人在电机功率为3时运动,为1和2时不运动,那么我的功率有效动态范围就是3到100。

    这里也可以体现出传感器的动态范围较窄,这一点不利于PID算法的运算

    2.将数据约束在有效范围内,在传感器达到最大或最小值时,功率必须是有效的。这样可以最大限度的利用有效动态范围。

    3.NXT-G是不可以识别负数功率的(EV3-G可以)需要将电机转向取反。P控制器可以做到原地转弯。

    三、算法理解

    1.引入OFFSET(补偿量)的概念,并计算ERROR(ERROR = 测得值 - OFFSET),与2.共同将函数划归为正比例函数,容易求出参数。

    2.不将E与功率直接相关联,而是与转向相关联,结合1.就可以将函数划归为正比例函数,便于计算。

    3.比例式巡线不做过多说明,按照y = kx + b的形式代入化简即可求解。

    4.比例式巡线的公式是可以使用纯数学方法进行推导的,也是PID控制算法的基础,要先理解比例式算法才能继续向后进行。

    5.入门比例式算法时,可以使用纯数学函数的方法进行计算推导,直接求电机功率关于传感器测得值的函数,这种程序大多是在理论上可行的,实际不一定可行,也可以初步理解上述的有效动态范围问题,但是如果以这种函数关系编写程序,这种程序不具有普适性,由于物理意义不明确,所以调试难度很大,虽然整理提取完一样可以划归到后面的函数型,但是这又何必呢?不用这么折磨自己。现在再用上OFFSET、E和TURN重新使用函数推导试试看,推导出的 y = k ( x - a ) 。k是比例常数KP,也是PID中所谓的比例常数,a是OFFSET,x是传感器的测得值,x-a是ERROR,y是转向修正值。

    以上就是P控制器

    5.I是F(t)=E的积分,控制原函数的截距,积分是有正负的。来看下面两个情况:

    (1)长时间走在直线上,E值在x轴附近上下波动,积分趋近于零,接近于比例巡线,I对电机功率的影响可以忽略不计。

    (2)刚上曲线的时候,F(t)图像在x轴上或下的部分面积将增加,导致I开始正加或负减,这就可以调整原函数的截距,在原E对应TURN的基础上可以获得更大或更小的TURN修正。

    有了I,机器人就好像有了学习能力,能够回首过去,I是PID中很重要的参数,像一个存储器,记录过去的经历。

    6.I可以看做是在P数值不够大或不够小时的一种补救措施!

    7.拐弯很急时,就需要I的值较大。但是I过大也常常引起“超调”而飞线,这是我们不希望的。I如果太小就会发现直线转换到弯道时转向跟不上,弯道转换到直线时摆动严重,甚至跟不上弯道的转向角度。

    8.

  • 相关阅读:
    年度榜单:2013年最流行的15款免费英文字体
    优秀案例:12个精美的设计工作室 & 设计公司网站
    jQuery Label Better – 友好的表单输入框提示插件
    CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
    Feathers JS – 基于 Express 构建数据驱动的服务
    Node.app – 用于 iOS App 开发的 Node.js 解释器
    100款免费的圣诞节矢量图标素材(PSD & SVG)
    Web 开发人员不能错过的 jQuery 教程和案例
    Headroom.js – 快速响应用户的页面滚动操作
    10个实用的 CSS3 按钮效果制作教程
  • 原文地址:https://www.cnblogs.com/LYT-Dveloper/p/12834187.html
Copyright © 2020-2023  润新知