JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

先从轮子说起:差速驱动与机器人的滚动方式

为什么大多数地面机器人都从轮子起步,以及让两个轮子以不同速度旋转如何使机器人直行、转弯或原地打转。

为什么在平地上轮子最划算

如果你想让机器人在平滑的地面上移动,最简单、最便宜、也最省能量的答案几乎总是轮子。这正是轮式移动的核心:机器人不必抬脚再落脚,而是滚动前进。滚动的轮子几乎不与重力较劲——一旦转起来,只需克服少量摩擦再加上电机的推动,就能持续前进。这就是为什么购物车、汽车和办公椅都靠滚动而不是走路。

对比一下腿。会走路的机器人必须不停地防止自己摔倒、把沉重的肢体向前摆动,还要单脚保持平衡。这一切都需要精巧的控制和大量的能量。腿在楼梯、碎石和崎岖野外才显出价值,但在仓库地面上就是大材小用。初学者制作第一台机器人时几乎总是从轮子起步,因为一个下午就能让它动起来。

差速驱动:两个轮子加一个小窍门

小型机器人最常见的布局是差速驱动。设想左右两侧各装一个轮子,每个由各自的电机驱动,再加上一个可自由滚动的脚轮(像购物车上那种万向轮),只是为了防止机器人倾倒。整个结构没有任何方向盘。你完全靠决定每个驱动轮转多快来转向。

机器人的全部行为都源自一个简单的想法:比较两个轮子的速度。如果两个轮子以相同速度向前转,机器人就直线行驶。如果右轮转得比左轮快,机器人就向左弯,划出一道柔和的弧线。而真正的妙处在于——如果让左轮倒转、右轮以相同速率正转,机器人就原地转向,绕着自己的中心打转而不挪动位置。这种原地旋转的能力是普通汽车做不到的。

  1. 两轮等速、同向 → 直线前进。
  2. 两轮不同速、同向 → 沿弧线转弯(较慢的轮子在转弯的内侧)。
  3. 两轮等速、反向 → 绕中心原地旋转。

靠数圈数来推测自己在哪

机器人一旦能动,下一个问题就是:它现在在哪?最便宜的答案正是复用那些让它移动的轮子。每个轮轴上都装有一个旋转编码器,这是一个小型传感器,用来计量轮子转了多远——通常每转一圈就有数百乃至上千个脉冲。只要知道轮子的周长,数脉冲就能告诉你那个轮子滚了多远。

把左右两侧的距离和上一节的几何关系结合起来,你就能不断更新对机器人位置和朝向的估计。这种由轮子运动累加而成的实时估计称为里程计——字面意思就是测量道路。它是一种航位推算:通过把自某个已知起点以来的每一个微小移动累加起来,从而判断自己身在何处,就像水手当年靠航速和经过的时间来追踪船只一样。

left_dist  = ticks_left  / ticks_per_rev * wheel_circumference
right_dist = ticks_right / ticks_per_rev * wheel_circumference
forward    = (left_dist + right_dist) / 2          # how far the center moved
turn       = (right_dist - left_dist) / wheel_base # how much the heading changed
轮式里程计的核心:两轮取平均得到前进量,相减得到转向量。

简单两轮机器人的长处与极限

差速驱动随处可见,正因为它既便宜又能干。扫地机器人用它在椅子腿之间穿行、在狭窄角落里原地转身。科研和教学实验室钟爱小型两轮平台,因为其运动易于建模和编程,使它们成为学习导航的绝佳试验场。许多在仓库里搬运货盘的机器人,也在更大尺度上采用同样的方案。

但同样的简单也设下了极限。机器人无法横向移动,所以要挤进类似平行泊车的空隙,就得来回笨拙地挪动。在光滑地面或急转弯时轮子可能打滑,而打滑对编码器是不可见的,会悄悄污染里程计。当然,一旦地面变成楼梯或巨石,轮子就束手无策——而这恰恰是腿(后续指南的主题)接手之处。