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
輪式里程計的核心:兩輪取平均得到前進量,相減得到轉向量。

簡單兩輪機器人的長處與極限

差速驅動隨處可見,正因為它既便宜又能幹。掃地機器人用它在椅子腿之間穿行、在狹窄角落裡原地轉身。科研和教學實驗室鍾愛小型兩輪平台,因為其運動易於建模和程式設計,使它們成為學習導航的絕佳試驗場。許多在倉庫裡搬運貨盤的機器人,也在更大尺度上採用同樣的方案。

但同樣的簡單也設下了極限。機器人無法橫向移動,所以要擠進類似平行泊車的空隙,就得來回笨拙地挪動。在光滑地面或急轉彎時輪子可能打滑,而打滑對編碼器是不可見的,會悄悄污染里程計。當然,一旦地面變成樓梯或巨石,輪子就束手無策——而這恰恰是腿(後續指南的主題)接手之處。