中文乐高

 找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 1098|回复: 9

从0开始的PID巡线

[复制链接]
发表于 2020-6-2 16:44:09 | 显示全部楼层 |阅读模式
本帖最后由 蝠王非王 于 2020-6-10 12:43 编辑

前言



巡线,作为乐高机器人中非常常规的技术,普遍应用于各类乐高机器人项目。


从原理上来说,所有的巡线程序都遵循同一个逻辑:“首先,通过颜色传感器来判断巡线小车与黑线的位置关系;然后,按照巡线小车与黑线的位置关系来决定小车的行进轨迹。”

我们常用的巡线技术,大致归类之后可以按照偏向分为硬件与软件方向的技术。一方面,改良车体、增加传感器数量;另一方面,从则是研发出更稳定的巡线程序。但是,因为EV3本身只有4个传感器端口,而且大部分情况下,我们的机器人可能需要端口安装另外的传感器以完成任务,所以,我们更多的会在双颜色传感器巡线技术上进行攻略。

在限定了硬件的情况下,程序是否精巧决定了巡线的稳定性以及速度,看起来高大上的PID巡线就是在这样的情况下脱颖而出的。

从原则上来讲,PID并不是追求速度的巡线方案,他更注重的是巡线的稳定性,即平滑。但由于小车在巡线过程中减少了大量的摆动,所以相对的,PID巡线的速度也不会很慢。

从原理上来说,PID的一种基于P(比例)巡线而出现的更精巧的巡线模式,他使用I(积分)来对小车巡线过程中的偏移进行纠正,使用D(微分)来预判下一瞬间时需要的转向角度(准确说应该叫“左右电机功率差”)。

而我们常用的切换(分段)式巡线,在传感器数量不足时,却是无法显现出足够的优势。

后面的日子里,我会按照我对巡线程序的研究顺序,来为大家阐述我对各类巡线的看法,希望对大家有所启发。





如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2020-6-3 09:59:54 | 显示全部楼层
PID循线当各参数调校好了效果确实非常好,然调校过程确十分的令人头大。

可以看看我的帖子:超简洁且效果还不错的循线算法(https://bbs.cmnxt.com/forum.php?mod=viewthread&tid=59795),希望可以对各位有所帮助吧。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2020-6-3 10:20:37 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2020-6-4 09:52:09 | 显示全部楼层
顶顶顶,有时间可以发表下PID的一些相关于学习的帖子,感谢分享
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2020-6-9 16:07:28 | 显示全部楼层
本帖最后由 蝠王非王 于 2020-6-9 16:12 编辑

1-1 单光电颜色巡线


如果说EV3巡线是存在段位的,那么只使用一个颜色传感器来对巡线小车下方的颜色进行测量从而巡线这种方法,应该是处于最底层段位的存在。

单光电颜色巡线在巡线效率、稳定性上没有任何的优势,但是却是不可或缺的存在,因为它足够简单,简单到大部分初学者都可以通过单光电颜色巡线的程序,清楚地看到巡线小车在巡线时的运行机制,为后面学习其他巡线打下坚实的基础。我极力推荐初学者以它为起点进行巡线

首先,我们需要一个基础小车,以及一个颜色传感器,一块空地,以及一条黑线(黑色电工胶带了解一下)。

基础车需要使用双电机进行驱动,颜色传感器需要朝下并安装在基础车的正前方距离地面1个乐高单位左右的高度。关于基础小车,这边不会过多的阐述巡线小车的搭建方式以及着重点,初学者可以从EV3软件中寻找到简单的基础小车,或者在中文乐高书局中购买相关书籍学习竞赛基础车搭建的相关要点(详见EV3设计与竞赛指南一书)。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2020-6-9 16:09:39 | 显示全部楼层
本帖最后由 蝠王非王 于 2020-6-9 16:14 编辑

然后,打开软件,在流程控制中找到“切换”模块,通过模块的左下方列表将其调整为“颜色传感器-测量-颜色”模式,并通过模块左上角的小“+”进行“添加情况”,保证我们的程序中出现三种情况,同时通过调节情况中的颜色块,保证我们的三种情况分别为“地面颜色”、“黑线颜色”和“无颜色”,然后,通过点击颜色块前方的小圆点,将情况“无颜色”设置为默认情况。
未命名.jpg
这个时候,将模块嵌入进循环,再连接上开始模块,单光电颜色巡线程序的主体架构就完成了。


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2020-6-9 16:13:27 | 显示全部楼层
最后,我们需要在三种情况中的两种中,嵌入控制巡线小车移动的模块,就算完成了。当然,这里需要注意的是,我们控制小车向左前方和右前方前进的两个模块,需要分别嵌入到“黑线”对应的情况和“地面”对应的情况之中的,至于哪种转向嵌入到哪种颜色之中,都可以!至于说为什么,请容许我在这里卖一个关子。然后,默认情况“无颜色”,就让它空着吧。(PS:在这里,需要阐述本人的一个观点,个人认为在此处使用的模块最佳选择是“移动转向”。为什么呢?因为移动转型模块中会有一个小箭头,来描述小车的前进方向。既然是作为初学者接触的第一个巡线程序,那么肯定是越简单越好。)

到这里,我们的巡线小车其实就已经完成了,但是我们对它的学习却才刚刚开始。每一个巡线程序,我们都需要搞懂一件事情,它的程序逻辑究竟是什么样的?在帖子的最开始,我讲过,所有的巡线程序都遵循同一个逻辑:“首先,通过颜色传感器来判断巡线小车与黑线的位置关系;然后,按照巡线小车与黑线的位置关系来决定小车的行进轨迹。”我们套用一下,看是否合适。

当颜色传感器测量到黑色时,我们发现小车在黑线上,然后尴尬的事情发生了,这个时候,小车是需要向哪个方向前进呢?答案是,两边都可以!

为什么会出现这样的情况呢?这是因为我们的单光电巡线小车,虽然在视觉上是沿着黑线在走,但是它实际上是在沿着黑线与白色底面的交界处在行走,而我们都知道,黑线与白色底面的黑白交界处,是有两个的。所以,如果我们要沿着黑线的右边界行进,那我们就需要在小车遇到黑色时向右前方前进,在小车遇到白色时向左前方前进,反之,如果我们需要沿着黑线的左边界行进,那我们就需要在小车遇到黑色时向左前方前进,在小车遇到白色时向右前方前进。

1.png                       2.png                  

这里分享一个关于单光电巡线的小技巧给大家,我们在使用单光电巡线小车时,最好将小车放置于黑线上再运行程序,至于为什么,请自行尝试。

以上。


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2020-6-15 21:26:28 | 显示全部楼层
冀·闲庭信步 发表于 2020-6-3 09:59
PID循线当各参数调校好了效果确实非常好,然调校过程确十分的令人头大。

可以看看我的帖子:超简洁且效 ...

王老师亲自去调过了么,这个过程是很有趣的。小学生的确不太好学习。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2020-6-15 21:31:30 | 显示全部楼层
txwxjhipda 发表于 2020-6-15 21:26
王老师亲自去调过了么,这个过程是很有趣的。小学生的确不太好学习。

我调试过,漫长而有趣吧。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2020-7-30 19:22:08 | 显示全部楼层
顶顶顶!前来学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|中文乐高 ( 桂ICP备11003955号-1 )

GMT+8, 2021-3-5 08:27 , Processed in 0.039014 second(s), 24 queries .

快速回复 返回顶部 返回列表