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

有意識地向前傾倒:零力矩點、倒立擺模型與會飛或會潛的機器人

行走人形機器人背後的平衡數學——零力矩點與倒立擺技巧——以及對完全離開地面的機器人的一次巡禮。

行走是一場你不斷接住的跌倒

把你下一步的動作放慢來看。你抬起一隻腳,身體向前傾,有那麼一瞬間你是真的在跌倒——直到擺動的腳落地把你接住。然後你再來一次。這正是雙足行走裡藏著的祕密:它不是一連串穩定姿勢,而是一次次受控的跌倒,每次都恰好被地面接住。一個想在每一瞬間都安全的機器人,會讓質心始終壓在雙腳上方、緩緩挪動,就像幼兒扶著家具走路。那叫靜態穩定。而流暢、接近人類節奏的行走依靠的則是動態穩定——機器人有意地短暫失衡,再透過運動把自己救回來。

如果機器人一直處於半跌倒狀態,它的控制器怎麼知道下一步是會救它,還是會讓它摔個四腳朝天?它需要一個單一、可量測的量,告訴它「你還在安全範圍之內」。這個量就落在地面上、腳的下方——它正是本篇的核心。

零力矩點:地板上的一個點

想像一下所有壓在機器人腳上的力——它的重量、擺動肢體的推拉、身體的動量——然後問:地面上是否存在某一個點,讓所有想讓腳翻轉的傾覆力矩剛好彼此抵消?確實存在,它叫做零力矩點(ZMP)。在這個點上,地面只需要筆直向上托住,沒有多餘的、想把腳翻到邊緣上的扭矩。

整個判據用一句話就能說清:只要零力矩點保持在支撐多邊形之內——也就是腳底、或雙腳之間那塊地面——腳就會平貼地面,機器人不會傾倒。一旦零力矩點跑到腳的邊緣,腳就開始翻滾,跌倒隨之開始。於是行走控制器的任務變得近乎一目了然:調動腿和軀幹,讓零力矩點在每一刻都穩穩留在腳印之內。

在實際中,機器人不必去猜零力矩點在哪。腳掌裡的壓力感測器,或腳踝處的力/力矩感測器,直接量測地面反作用力,軀幹裡的慣性量測單元(IMU)則報告身體如何傾斜與加速。控制器據此每秒多次算出即時的零力矩點,並微調動作讓它保持居中。

倒立擺:把難的部分扔掉

知道零力矩點規則是一回事,規劃出一整段遵守這條規則的步態又是另一回事。人形機器人有幾十個關節,每個都有自己的質量和運動——要即時求解完整動力學非常殘酷。於是工程師用一個漂亮的簡化來「作弊」:假裝整個機器人就是一根無重量桿子頂端平衡著的一個重物,桿子底端釘在地面上。這就是倒立擺模型。想想在手掌上立一把掃帚:掃帚就是機器人的整個身體,你的手掌就是它的腳。

為什麼這是一筆划算的交換?因為這個擺抓住了平衡中唯一要緊的東西——質心如何在腳上方擺動——同時丟掉了每條肢體的繁瑣細節。常見的一種版本讓質心保持在恆定高度,這使方程式變成線性的,快到足以在機器人邁步途中就解出來。控制器規劃每一步落在哪裡、身體在步與步之間該如何擺動,從而讓零力矩點沿著腳印畫出一條安全的路徑。

stance foot pinned to ground
         o   <- center of mass (one lumped weight)
        /
       /     tip angle theta
      /
   __/__   <- foot; ZMP must stay within this patch

rule of thumb (linear inverted pendulum):
  accel_of_CoM  ~  (g / height) * horizontal_offset_of_CoM
  -> lean a little forward  -> you start to fall forward
  -> plant the next foot ahead -> you catch the fall
身體被簡化為腳上方一根桿子頂端的重物:前傾以跌倒,向前邁步以接住。

離開地面:會飛和會潛的機器人

並非每個機器人都是站在重力上與之對抗的。無人飛行器靠把空氣往下推來托住自己。最為人熟知的設計是四旋翼:四個固定的螺旋槳,沒有可傾轉的槳葉,沒有舵面。它完全靠改變每個旋翼的轉速來操縱。四個都轉快一點,它就爬升;讓一側的兩個轉慢,它就向那一側滾轉。偏航是巧妙之處:相鄰旋翼旋轉方向相反,它們的反扭矩平時相互抵消,於是讓朝一個方向旋轉的那一對加速、另一對減速,就留下一個淨反扭矩,把整架機器轉起來。和行走的人形機器人一樣,四旋翼本質上是不穩定的——放任不管它就會翻滾——所以靠一個慣性量測單元和快速的回饋控制每秒數百次地糾正它的姿態。

現在反過來——向下,進入水中。自主水下載具(AUV)面對的是同一個問題的顛倒版本。水會以浮力把它頂回去,因此 AUV 可以把自身配平、近乎失重地懸停,再用螺旋槳向前滑行,或用小推進器轉向。有些滑翔器幾乎完全不用馬達:它們略微改變浮力以下沉和上浮,再用機翼把這種豎直運動轉化為向前的行進,從而能在海洋裡漫遊數月之久。陸地上那套關於腳和支撐多邊形的規則,在這裡根本不適用。

每一種運動模式下的同一個問題

退一步看,整座運動方式的「動物園」就坍縮成一個問題:我該如何推擠這個世界,才能去到我想去的地方?輪子靠摩擦推擠路面。腿式運動中的腿以一次次離散的蹬地推擠地面,而零力矩點告訴它每一次蹬地能否讓它保持直立。旋翼推擠空氣。推進器推擠水。介質在變,安全穩定的判據也在變——這裡是支撐多邊形,那裡是姿態控制,水下則是浮力配平——但底層的交易始終如一:用力去換取運動。

這也正是為什麼同一套工具箱在本主線中反覆出現。估計你的狀態,決定支撐力該作用在何處,再命令致動器把它實現——無論這個「實現」指的是讓零力矩點保持在人形機器人腳下,還是讓四旋翼在陣風中保持水平。掌握了這個循環,你就能把任何機器人——行走的、飛行的還是潛水的——都讀作同一個優雅想法的變體。