本帖最后由 “” 于 2012-8-2 23:32 编辑
双引号PID大讲堂——D 今天我们讲的是d 微分
为什么我不说i 而说d? 因为微分使用起来更加直接 而i——积分也会因为要分析很多问题不容易说 所以先以d做讲解。
我们就用走线中遇到的问题来分析
我们回忆一下上节课约定的数值 白:60 黑:40 中间值:50
现在光感几乎在黑白之间 但是有点偏向白色。 现在我们假设是52
对于52的是数值我们一定会想到往左转 没有错
但是对52的数值最佳的处理方式是不一样的 如果机器在从黑色到白的的情况下 也就是说机器在向白色运动的时候需要更大的力向黑色靠拢
相反,在从白色到黑色的情况下 机器应该稍微有点刹车 以至于不能让机器最终的位置太小于50 否则又会有很大的摆动向白色 也就是说虽然光感都是52但是处理的方式是不一样
那么什么是微分呢? 简单的说在数学概念中就是本次结果和上次结果的差。
我们分析一下现在的情况
那么如果上次的光值是53 现在52 那么就是从53到52 对比一下 53比52大 所以知道前面更加亮 也就是说从白到黑这样的过程
相反如果上一次 的光值是51
是从51到52 是不是就是从黑到白了呢? 因此我们就要记录上一次的光值
像这样在极短的时间内计算本次和上次的光值的差这个就是微分。
通过光值的对比能得到这个微分的数值
除了这个方法外 我们还有其他的方法得到 那就是p 中所说的误差。
我们回忆一下上节课说的误差
中间值是50 现在的数值是52 那么误差就是2(52-50) 现在数值是48 那么误差就是-2(48-50)
除了我们对比光的数值以外还可以通过对比这个差值来判断
看分析
上次是53 那么误差就是3 本次52 本次误差就是2 那么现在就是光值的改变就是52-53=-1减少了1 从误差来看:就是2-3=-1减少了1
如果上次是51
那么误差是1 本次52 误差就是2 那么现在光值的改变就是从52-51=1 就是增加1 从误差来看就是2-1=1 也可以这样直接通过误差来计算出微分 。
现在看看效果
把微分的结果乘以一个系数看看结果会发生怎么样的变化呢?
上次是53
那么误差就是3
本次52
本次误差就是2
那么现在就是光值的改变就是52-53=-1减少了1
从误差来看:就是2-3=-1减少了1
比如这个系数是5那么结果就是-5
如果加到两轮之间的速度差里面正好使2轮的速度差减少了
这样的结果就是机器在摆动回来的过程中2轮速度差减少了
也就是更接近一条直线
摆动少了那么机器就不容易又进入黑线
我们再来看看从51到52的过程
如果上次是51 那么误差是1 本次52 误差就是2 那么现在光值的改变就是从52-51=1 就是增加1 从误差来看就是2-1=1 乘以系数5,就变成了5 现在加到2轮的速度差之后,速度差更大了 这样摆动更大了 也就更加容易回到中间值的位置了
通过分析上面的情况
可见微分能起到 当机器运动方向靠近中间值时2轮的力量差就是变小 当机器运动方向远离中间值时2轮的力量差就是变大
好了我们现在看程序应该如何写
设定v(速度)=某个数值 设定比较值=某个数(黑白中间值) 循环开始: 读取光感 保存上一次的差 差=光感-比较值 微分=本次的误差-上次的误差 左轮=v+(差*某个系数+微分*某个系数) 右轮=v-(差*某个系数+微分*某个系数) 循环结束
而 (差*某个系数 +微分*某个系数) 这个就是使得2轮产生速度差的关键
|