陀螺仪直行与转弯
编码器管"走多远",陀螺仪管"朝哪走"。两个结合,机器人才能在 2 米多长的场地上精准跑位。
为什么直行会歪
两个马达标称一样,实际输出总有微小差异;轮子打滑、场地不平、出发手抖都会让"直行"越走越歪。走 1 米歪 2 度,末端偏差就是 3.5 cm——足够错过一个模型。
解法:用陀螺仪 yaw 实时纠偏,歪了立刻拉回来。
陀螺仪直行(P 控制)
原理和巡线的 P 控制一模一样,只是"偏差"从反射光变成了偏航角:
定义 陀螺直行 (距离cm)
重设偏航角 [0]
设置 [Kp] 为 [2]
马达 [A] 重设角度 [0] ← 用编码器测距离
重复执行直到 <(马达 [A] 角度) > ((距离cm) * [每cm度数])>
开始移动 [转向 ((0 - (偏航角)) * (Kp))]
停止移动- 目标 yaw 是 0,偏差 = 0 − 当前 yaw。机器人右歪(yaw 变正)→ 转向量为负 → 向左修。
每cm度数= 360 / 轮周长 cm,提前算好存变量。- Kp 从 2 开始调:蛇形抖动就减小,回正太慢就加大。
想直行到任意朝向?
把"重设偏航角 0"去掉,加一个 目标角 参数,偏差 = 目标角 − 当前 yaw。这样转弯后不用重设,直接沿新朝向直行,误差不会累积。
陀螺仪转弯
Hub 传感器一课给过基础版,这里是要点:
定义 转弯 (角度)
重设偏航角 [0]
如果 <(角度) > [0]> 那么
开始移动 [转向 100]
等待到 <偏航角 > ((角度) - [提前量])>
否则
开始移动 [转向 -100]
等待到 <偏航角 < ((角度) + [提前量])>
停止移动精度三招
- 提前量:停止后惯性会多转 1-3 度。实测:命令转 90,量实际转角,差多少提前多少。速度越快提前量越大。
- 降速转弯:转弯前
设置移动速度 [25] %,惯性小、重复性好。转完恢复速度。 - 两段式转弯(高精度需求):先全速转到差 15 度,再以 10% 速度慢慢逼近目标角。慢速段几乎无惯性,可以把提前量降到 0-1 度。
定义 精准右转 (角度)
重设偏航角 [0]
开始移动 [转向 100]
等待到 <偏航角 > ((角度) - [15])>
设置移动速度 [10] %
开始移动 [转向 100]
等待到 <偏航角 > ((角度) - [1])>
停止移动
设置移动速度 [50] %原地转 vs 单轮转
| 方式 | steering | 特点 |
|---|---|---|
| 原地转(spin) | ±100 | 转弯中心在两轮中点,占地小,最常用 |
| 单轮转(pivot) | ±50 | 绕一个轮子转,转弯半径 = 轮距,适合贴着模型绕过去 |
两种都可以做成带角度参数的 My Block。
漂移管理
陀螺仪会漂移(静止时读数缓慢变化),长程序里误差累积:
- 每次出发前,机器人在基地摆正后再启动程序(启动瞬间的朝向就是 0 度基准)。
- 程序中段利用靠墙动作(见 FLL 实战技巧)重设偏航角,把累积误差清零。
- hub 静止时开机/启动程序,运动中启动会让初始基准就是错的。
练习
- 实测你的机器人的转弯提前量:命令 90 度,重复 5 次,记录实际角度取平均。
- 做一个
陀螺直行 (距离cm) (目标角)双参数 My Block,走"直行 50 → 右转 90 → 直行 30"验证末端位置的重复性,和不用陀螺仪的版本对比。
下一课:FLL 实战技巧,把所有技术拼成拿分组合。