很多人一看到比例巡线,就觉得很low,不过原理是简单,但是要写一个完整的比例巡线程序也不简单。 在理想情况下,光感从黑线的边缘向白色区域移动时,读取的光感值逐渐增加,向黑线区域移动时,读取的颜色值逐渐减小;当颜色逐渐增加时,白色一边的电机功率要比黑色一边电机的功率快才能避免情况恶化,反之亦然。将颜色的偏移值乘以一个比例系数得出两个电机的功率的差值,我们将这个巡线定义为比例寻线。 但是在实际巡线过程中,在光感是存在最大值和最小值,当大于最大值,必须将黑色一边的电机停止;当小于最小值时,必须将白色一边的电机停止,这样才能避免飞线。当刚好在黑线边缘时,两个电机的功率应该相等才对,并且此时电机的功率尽可能大一点。当光感值出现偏差时,则两个电机的功率都应该减小,并且一个减小的多一点,一个减小的少一点,这样小车才会向正确的地方偏移。从上面的分析可以得出,光感值应该存在三个参数,最大值,边缘值,最小值;电机的功率也应该存在三个参数,边缘值时电机功率,光感达到最大或者最小值时,快速电机的功率值,慢速电机停止前的最小功率。 B、C电机对应的功率和光感的测量值的曲线如下图: 对应的C语言代码如下: 在传入的参数中pWrData[0]为光感的测量值,pWrData[1~3]分别对应光感的最大值,边缘值,最小值;pWrData[4~6]分别对应电机的功率最大值,快电机的最小功率值,慢电机的最小功率值,快电机和慢电机两个功率值不能相等,result[0~1]为返回的两个电机功率值。 在写出模块后的G语言示例程序如下: 依据惯例附上程序和内核 链接:https://pan.baidu.com/s/1kas53edBp44qB_wgrzqGDw?pwd=euhg
昨天发的贴子提供那个内核到现在为止已经被下载了将近100次,不过帖子回的人不多,也没人关注我,这可不是个好习惯,希望大家关注一下我。这样提供的内核有升级或者有bug,我也能及时通知到大家。 同时也对下载过内核的人表示抱歉,昨天那个内核比例巡线有个小bug,我在测试时出现飞线,我当时以为功率设置太大,今天我用excel模拟一下,发现真的有个小问题。新的内核已经更正。希望大家能够及时更新。
|