巡线 Line Following
让机器人沿着黑线走。FLL 场地上黑线连接着各个模型,巡线是最可靠的导航手段之一。本课从"能走"讲到"走得又快又稳",三个版本递进。
原理:巡的是"边",不是线
传感器在纯黑上读 ~10,纯白上读 ~85,骑在黑线边缘读中间值(~48)。巡线 = 控制机器人保持在读中间值的位置:
- 读值偏高(太白)→ 传感器滑向了白场一侧,往线的方向修
- 读值偏低(太黑)→ 传感器压进了线里,往白场一侧修
约定:传感器巡线的左边缘——边界左侧是白场、右侧是黑线("左白右黑")。此时偏白 = 机器人偏左了,要向右修(正转向);偏黑 = 偏右了,要向左修(负转向)。本页所有示例都用这个约定;巡右边缘则方向全部取反。
先完成阈值标定,拿到你的黑值、白值、中值。
版本 1:开关式(Zigzag)
当程序启动时
初始化
重复执行
如果 <颜色传感器 [C] 反射光 > [48]> 那么
开始移动 [转向 20] ← 偏白了(偏左),向右修回线
否则
开始移动 [转向 -20] ← 偏黑了(偏右),向左修回白机器人会左右扭着前进。能用,但慢,速度一高就甩出去。适合理解原理,不适合比赛。
版本 2:比例控制(P 控制)——FLL 主流
核心思想:偏差越大,修正越狠;偏差小,轻轻修。
当程序启动时
初始化
设置 [中值] 为 [48]
设置 [Kp] 为 [0.8]
重复执行
设置 [偏差] 为 ((颜色传感器 [C] 反射光) - (中值))
设置 [转向量] 为 ((偏差) * (Kp))
开始移动 [转向 (转向量)]偏差= 当前读值 − 中值。偏白读值高 → 偏差为正 → 转向量为正,向右修;偏黑 → 偏差为负,向左修。方向和版本 1 完全一致。Kp是比例系数,决定修正力度。实际装车后如果方向修反(传感器装反、巡的是右边缘),把 Kp 取负即可。
调 Kp 的方法
- 从 0.5 开始,速度设 30%。
- 机器人反应迟钝、转弯跟不上 → Kp 加 0.1-0.2。
- 机器人高频左右抖动 → Kp 减 0.1-0.2。
- 稳定后逐步提高速度,速度越高通常需要略小的 Kp。
调好的标志:直线段几乎不抖,弯道平滑跟随。
版本 3:双传感器巡线
两个传感器骑在线两侧,读值之差就是偏差,天然对称、抗光照变化:
重复执行
设置 [偏差] 为 ((颜色传感器 [C] 反射光) - (颜色传感器 [D] 反射光))
开始移动 [转向 ((偏差) * (Kp))]线在两传感器正中间时偏差为 0。机器人偏左时,线相对机身右移,是右传感器 [D] 压线变黑😄 的反射光下降,偏差 C − D 变正,转向为正、向右修回——正好把机器人拉回线上。偏右时对称。实际装车如果修反了(接线镜像),把 Kp 取负即可。这是硬件换软件复杂度的典型:多一个传感器,程序反而更简单更稳。
巡线怎么停:结合路口检测
无限巡线没有意义,要在正确的地方停下。常用停止条件:
重复执行直到 <颜色传感器 [E] 反射光 < [30]> ← 第三个传感器看见横向路口线
...巡线逻辑...
停止移动或者"巡线 + 编码器":巡线的同时数马达度数,走够距离就停——把巡线封装成 巡线 (距离cm) 的 My Block 最好用。
常见坑
- 速度和 Kp 是一对:换速度必须重调 Kp。
- 弯道内外侧:巡线的边缘选弯道外侧(线在传感器拐弯方向的另一侧),急弯更容易跟住。
- 起步姿态:巡线开始前机器人要大致骑在线边上,离线太远第一下会猛甩。
- 想更进一步(PID,加积分微分项)见 Python 进阶,Word Blocks 里做 PID 积木太多不划算。
下一课:陀螺仪直行与转弯。