找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 8767|回复: 14

从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 | 显示全部楼层
本帖最后由 蝠王非王 于 2022-9-14 17:40 编辑

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                  

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

以上。


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 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 | 显示全部楼层
顶顶顶!前来学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2021-4-28 14:12:19 | 显示全部楼层
进来膜拜大神,哈哈哈~~~
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2021-5-9 16:05:37 来自手机 | 显示全部楼层
只有单光感吗
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2021-8-19 16:37:05 | 显示全部楼层
感谢!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2022-9-14 17:27:14 | 显示全部楼层
本帖最后由 蝠王非王 于 2022-9-14 18:02 编辑

1.2  单光电反射光强度巡线

PS:你没看错,我诈尸了!

在N年前的时候,我更新的EV3巡线的基础版本:单光电颜色巡线,并称之为巡线的最基本逻辑框架。因为,后续所有的巡线进阶方案,都是在其基础上,不断丰满出来的。(尤其是各类单光电巡线)


我们在使用颜色传感器的过程中会发现,EV3的颜色传感器在测量颜色上,并不是非常灵敏。尤其是两种相近的颜色,经常会分辨不出来。而通过使用反射光强度,就能相对有效的避免这种情况。(为什么会说是相对呢?因为总有一些颜色,它的反射光强度是几乎一致的)

这里科普一下颜色传感器的反射光强度模式。

颜色传感器打开之后,会默认处于测量反射光强度模式,由发光二极管发出红光,照射在物体上,并由光敏传感器接收并测量反射光强度。反射光强度跟被测物体的材料、颜色以及传感器与被测物体之间的距离、环境光相关。当然,最恶心的是,不同颜色传感器在同种环境下测量到的反射光强度竟然会有差异。(请移步至程序设计艺术一书翻阅颜色传感器反射光强度一致化算法,而不是通过传感器模块中的反射光强度校准去调整)


也就是说,通过反射光强度,我们可以将两种不同的颜色区分出来。当然,这里需要引入一个词汇“阈值”,也就是分界值。因为颜色传感器只能单纯的测量出反射光强度,而不会自动区分不同颜色的反射光强度具体为何。这个时候,就需要你聪明的大脑对它进行补救。阈值的测量、计算方法多红多样,这里就不再一一赘述。总之,我们要知道,我们通过反射光强度,更清晰的判断出了黑线与白底,而不是通过颜色传感器直接对颜色进行简单的测量。


这个时候,我们找出之前的程序,将切换-颜色传感器-测量颜色改为切换-颜色传感器-比较-反射光强度。填写阈值、移动转向。我们就能得到一个基础版本的单光电反射光强度巡线。







单光电反射光强度巡线1.0.png
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2022-9-14 18:24:18 | 显示全部楼层
本帖最后由 蝠王非王 于 2022-9-14 18:35 编辑

2.1   双光电颜色巡线


双光电颜色巡线,顾名思义,就是通过两个颜色传感器同时测量颜色,来判断小车与黑线的位置关系,再分类讨论小车的前进方向,从而进行巡线。


前言(一楼)中我有提到过,通过增加传感器可以有效地对巡线进行升华。论坛的某王大佬(闲庭信步)就形象的将颜色传感器称作“眼”。(其实也真的差不多,毕竟传感器之于机器人就相当于感觉器官之于生物)


更多的传感器,可以帮助机器人更好地分析其所处环境。在单光电巡线中,我们一般会将小车与直线的位置关系描述为在线上和在线外(后续更新的3.1部分会对其进行补充)。而对于双光电巡线来说,我们可以很轻易的将之分为左黑右白、左白右黑、左白右白、左黑右黑四种。分别对应了车在线右、车在线左、车在线上、双黑线四种小车与黑线的位置关系。也对应了左拐、右拐、直行、停车四种前进方向(这里多提一嘴双黑这种情况,一般来说,遇到双黑线意味着到达任务区,所以在这里会说在小车遇到这个情况的时候需要停车)。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-4-27 04:06 , Processed in 0.217520 second(s), 24 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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