🚗

别把 PID 想得太复杂:看这篇交互演示,一秒看懂巡线小车的 P、I、D

摘要:巡线小车为什么总是摇头晃脑?P、I、D 这三个字母到底代表什么魔法?通过好玩的动态交互小游戏,带你直观感受如何驯服一台调皮的巡线小车。

大家在学机器人或者玩乐高 EV3 的时候,想必都遇到过「巡线小车」这个经典任务吧?小车车头装着颜色传感器(光电传感器),要沿着地上一条黑线跑,听起来很简单对不对?

但如果你只是写一个简单的程序:「看到白底就左转,看到黑线就右转」,你会发现小车就像喝醉了酒一样,在黑线上疯狂地「左拐右拐」,扭来扭去,根本跑不快。

这时候老师就会告诉你,要用 PID 算法 来控制转向模块。可是,到底什么是 P,什么是 I,什么是 D 呢?在 EV3 里这些参数该填多大?很多教程里都是一堆看不懂的公式,今天我们换个玩法。废话不多说,我们直接上「小游戏」,你自己动手调一调,一秒就能看懂。

P 的魔法:按比例来,不要太猛

P 代表「比例」。

想象一下,如果你蒙着眼睛,我让你沿着一条直线走。如果你发现自己往左偏了一点点,你会怎么做?你肯定会向右走一点点来纠正,对吧?

最笨的小车是没有「一点点」这个概念的。它只要发现自己偏了,就会把方向盘打死(猛拐)。这样一来,它马上就会偏向另一边,然后再猛拐回来,这就是小车疯狂摇头的原因。

有了 P 魔法,小车就聪明了:偏得多,就使劲拐;偏得少,就轻轻拐。 这就是「比例」的意思。

如果 P 太小,小车拐弯太慢,就会跑飞;如果 P 太大,小车就会用力过猛,不停地越过黑线左摇右晃。

🎬 只有 P 的小车
P 1.5 控制转向的猛烈程度

💡 提示

对于 EV3,P 值(也就是 Kp)通常在 0.5 到 2.0 之间。你可以把 P 值调到最大(5.0)试试,看看小车是不是抖得很厉害?这种现象在控制学里叫做「震荡」。

D 的魔法:预测未来,提前踩刹车

D 代表「微分」。

只靠 P,小车虽然能巡线,但总是免不了会有一点晃悠。为什么呢?因为小车是有惯性的。当小车拼命转回黑线上的时候,它转得太快了,等它发现「哦,我回到线上了」的时候,由于惯性,它已经冲过头了。

这时候,我们需要 D 魔法,也就是「预测未来」。D 魔法会一直盯着小车靠近黑线的速度:「哎呀哎呀,你靠近黑线的速度太快了,马上要冲过头了,赶紧反打方向盘刹车。」

有了 D 的阻尼作用,小车在快要回到黑线时就会温柔地减速,稳稳地贴上去。快在下面的演示里加上 D 试试吧,看小车是不是丝滑了很多?

🎬 加入 D,小车更丝滑
P 1.5 负责拐弯
D 1.0 负责提前刹车防抖动

I 的魔法:记仇的小本本,专治顽固偏差

I 代表「积分」。

P 和 D 配合,其实已经能解决 90% 的问题了。但生活总是充满意外,假如你的小车天生左轮比右轮大一点,或者刚好有一阵强侧风一直吹着它。这时候,小车就会发现:我怎么总是偏离黑线一点点呢?

因为只偏了一点点,P 魔法觉得「小事一桩」,只给了一点点力;D 魔法发现小车没有在晃,也就不管了。结果就是:小车一直平行着黑线跑,死活靠不上去,这就叫「稳态误差」。

这时候就轮到 I 魔法出场了。I 就像一个爱记仇的小本本。只要小车没有完全在黑线上,它就会把误差一点一点记下来(积分)。「一秒钟偏一点点我不管,十秒钟你还偏一点点,我积攒的力量就很大了,非把你拽回去不可。」

💡 EV3 调参秘籍(必看)

如果你把滑块乱拉一通,小车肯定会像发疯一样乱跑。记住 EV3 巡线的 调参核心要领
1. 先把 I 和 D 调到 0。慢慢调大 P(从 0.5 开始,每次加 0.1),直到小车能勉强跟着线走,但开始明显「左摇右晃」。
2. 保持 P 不变,慢慢调大 D。从 1.0 开始试,你会发现小车的摇晃被压制住了,变得越来越顺滑。
3. 一般不需要 I,除非你开启了侧风(发现小车总是偏离中心一点点),这时再加一点点 I(EV3 的 I 通常非常非常小,比如 0.01)把它拉回来。
4. 直线与弯道的参数权衡:在直线上小车应保持平稳,此时 P 和 D 值应尽量调小以避免「扭动画龙」或高频颤动;而在弯道上为了快速响应,P 和 D 值则需要适当调大以防脱线。如果为了在比赛中追求极致车速,可以使用「分段 PID」(不同路段切换参数)或「动态 PID」(让参数随误差大小自动改变)。

在下面这个完整的 PID 演示里,你可以勾选「一阵侧风」,看看 P 和 D 是怎么束手无策的,然后再把 I 值调大,看看小车是怎么顽强地被拉回黑线的。

🎬 终极形态:完整的 PID 小车
P 1.5 比例
D 1.0 刹车(微分)
I 0.05 记仇(积分)

动手前第一步:测光到底在测什么?

无论你是用单传感器还是双传感器,在写程序前,老师一定会让你「先去测一下场地的反射光线」。这是为什么呢?

其实,小车是没有「眼睛」的,它只能靠光电传感器感受到地面的反光亮度。比如你在自己家里测试,测出来全白区亮度是 33纯黑线亮度是 6。这组数据对单/双传感器都有巨大的意义:

⚠️ 比赛排雷指南

1. 现实世界的场地灯光、地图纸张材质都会影响反光。所以去参加比赛时,每次到了新场地,第一件事必须是把小车放地上,重新测一遍白区和黑区。只有误差和参数算准了,后面的 PID 魔法才能生效。

2. 别把「黑区值」设成了「中间值」:在双传感器校准公式中,我们需要将黑区映射为 0,白区映射为 100。因此公式中的最小值参数(如封装模块中的反射光参数)必须填黑区测得的原始值(如 6),千万不要误填成了中点值(如 19),否则校准计算会出错,导致误差范围失真、小车剧烈抖动。

实战演练:看看这串神秘的 EV3 代码

现在,我们来看看你一直在用的「双颜色传感器」在乐高 EV3 软件里到底长什么样。下面是一张真实的双传感器 PD 巡线代码截图:

别把 PID 想得太复杂:看这篇交互演示,一秒看懂巡线小车的 P、I、D - 配图1

别怕,我们把这串像「小火车」一样的积木拆开来看看,其实非常简单。这是一个只用了 P 和 D 魔法的程序(大多数比赛中大家只用 PD 就够了,因为 I 魔法有时比较难控制,干脆不用):

是不是一下子就看懂了?下次再看到复杂的机器人程序,只要认准真正算 P、I、D 魔法的那个积木,就不怕啦。

总结与实战调参口诀

现在大家应该对这三个字母有感觉了吧:

平时玩乐高 EV3 或者写代码时,遇到要调这三个参数,记住一个经典老口诀:「先算 P,再加 D,最后不行加点 I」。 算出起步值后稍微在场地里微调一下,小车就能跑得非常棒了。

希望这个小小的互动能帮到正在学编程的你,有问题可以随时在评论区找我。

💬 评论区 (0)

0/500

加载评论中……

© 2021-2026 小宝科技站 All Rights Reserved
本网站内容未经允许,不得转载。