PID非常好的光感巡线思路
在一台不认识小数点的计算机上做数学运算会有一些问题 注意:NXT-G 1.1 版本只支持整数运算,NXT-G 2.0 版本支持浮点运算。如果使用2.0及以上版本的NXT-G程序,你无需了解以下内容,可以直接跳过这一部分。 Turn=Kp*(error) 我们把Kp乘以100,就意味着计算出的Turn是其实际值的100倍。在使用Turn的值以前,必须要对它除以100。 因此,我们新的、改进过的巡线P控制器虚拟代码如下: 等一下,在第一个版本的P控制器中还有一个“微妙的问题”,是什么呢? 在这个例子中,有这样一个问题:在我们计算马达功率值时(如powerC=Tp-Turn),可能会得到一个负的马达功率值,这意味着马达反向转动,但是NXT-G程序中马达模块的数据接口无法“理解”这个数值。马达的功率值是一个在0到100之间的数值,马达的转动方向是由另外一个不同的输入接口控制的。当功率值为负数时,你需要在程序中设置马达的运转方向。方法如下: P控制器概要 希望你已经对P(比例)控制器有了足够的了解,它还是相当简单的。用传感器测量你想控制的东西,将测量结果转换为error(误差)——对于巡线机器人来说,我们通过减掉黑和白光电传感器读值的平均值来实现,将error(误差)乘以
在调整P控制器的过程中,你会对Kp的值做上下调整。 预期的Kp取值范围可能完全取决于P控制器是如何计算的、输入范围有多大、输出范围有多大等因素。对于我们的巡线机器人的P控制器来说,输入范围是5个光值单位,输出范围是100个马达功率单位,因此似乎Kp值在100/5=20 左右。在一些例子当中,预期的Kp值可能不会那么大。如果预期的Kp值为1 会怎样?因为在NXT-G中变量只能使用整数,调整Kp值时,你可以尝试使用的是...-2,-1, 0, 1, 2, 3, ...... 你不能输入1.3,所以你不可能尝试Kp=1.3,你不能使用带小数点的数值!但是当你把Kp值做最小的调整,从1调整到2时,机器人的“反应”可能会有很大的不同。与Kp=1 相比,当Kp=2时,机器人修正的误差会是两倍,在光电传感器值变化量相同时,马达功率的变化量也会是两倍。而我们需要Kp做更精细的控制。
其实解决这个问题很容易。我们要做的只是将Kp乘以10 ,增大整数范围。当Kp接近1 时,乘以100 也是个好主意。实际上,在程序中直接使用100*Kp,可能是最好的选择。当Kp乘以100 时,我们输入的数值就从1.3 变为了130,没有小数点,NXT-G会喜欢这个数的。
但是不要忘记,要对结果进行转换。当完成P控制部分的计算时,要对结果除以100。还记得我们前面定义P控制器的表达式吗?
Kp = 1000记住,我们用Kp*100 ,因此这个Kp实际只有10!
offset = 45 ! 初始化其它两个变量
Tp = 50
Loop forever
LightValue = read light sensor ! 当前光电传感器的读值
error = LightValue - offset ! 减去offset(补偿量)计算error(误差)
Turn = Kp * error ! “比例控制部分”, 我们希望马达的功率值改变多少?
Turn = Turn/100 !记住消除Kp中因数100的影响!
powerA = Tp + Turn ! A马达的功率值
powerC = Tp - Turn ! C马达的功率值
MOTOR A direction=forward power=powerA! 在马达模块中设置这个功率值
MOTOR C direction=forward power=powerC! 设置另一个马达的功率值
end loop forever ! 结束循环,返回,进行下一次循环 !
If powerA > 0 ! 马达功率值为正值时
MOTOR A direction=forwardpower=powerA
else
powerA = powerA * (-1) ! 马达功率值为负值时,要做这一步运算
MOTOR A direction=reversepower=powerA!此时马达功率值为正值,还需要在控制面板上颠倒马达的转向
end If
马达模块通过数据线接收功率值(powerA对应A马达),在马达的参数设置窗口,用复选框设置方向。
对C马达也需要进行相似的程序代码设置。这样,当计算出的马达功率值为负值时,就可以正确地控制马达了,P控制器就能够实现“零转弯半径转弯”,机器人可根据需要实现原地转弯。
还有其他的“微妙问题”。如果出现计算出的马达功率大于100的情况怎么办?实际上马达会将功率值认定为100。在P控制器(或PID控制器)中出现这种情况,并不十分太好。我们更希望控制器永远不会让马达做超出能力范围的事。如果计算出的马达功率值比100大不了多少(或比-100小不了多少),机器人运行情况还算OK;如果这个计算出的马达功率值比100大很多(或者比-100小很多),这就意味着控制器正经常性的失去控制能力。你需要考虑一下如何处理这种情况!
PID光感巡 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)