robot-notes — 機器人知識筆記 GitHub ↗
本章與本頁目次

形態

robot-notes /形態/足式的根本分岔

足式的根本分岔:基座浮起來了

輪式 AMR 的問題之所以乾淨,靠三個前提:支撐面固定、平面運動、接觸不切換。四足機器人把這三個前提同時打掉,而且不是「難一點」而是換了一類問題——連續可微的系統變成混合系統,直接可控的位姿變成間接可控。

這篇處理那個分岔本身。步態與致動器的取捨在步態與致動

前置:座標轉換與 TF手臂運動學(Jacobian 與 τ = JᵀF,足式的力控直接用這條)。


1. 沒有一顆馬達連到基座

先看一件小事:輪式車的 base_link 在哪裡?在兩驅動輪的軸心中點,而那兩顆輪子上各有一顆馬達。你下輪速指令,基座就照著動——馬達與基座之間是剛性連著的

四足不是這樣。翻遍一隻四足機器人,你找不到任何一顆馬達的輸出軸連到軀幹。所有馬達都在腿的關節上。

輪式的基座由輪馬達直接驅動;足式的基座沒有任何馬達直連,只能透過腳與地面的接觸力間接被推動

於是軀幹的 6 個自由度(3 位置 + 3 姿態)沒有任何直接的控制輸入。它怎麼動,是「腿推地、地反推腳、力沿腿傳到軀幹」的結果。這在控制理論裡有個名字:

這 6 個差額不會消失。它是所有足式控制方法都在繞的那件事:你想控制的東西(軀幹在哪、要往哪走)恰好是你不能直接控制的那 6 個。

手臂也有類似結構但沒這個問題——手臂的基座螺在地上,那 6 個自由度被機械式地固定住了,不需要控制。把手臂的基座鬆開讓它浮起來,手臂就變成了足式問題。


2. 接觸是離散事件,系統從連續變成混合

第二個分岔:腳會離地、會著地。

在任何一個瞬間,系統的動力學方程式取決於哪幾隻腳正踩在地上——這叫接觸集合(contact set)。四足有 4 隻腳,接觸集合有 2⁴ = 16 種可能。每一種對應一組不同的方程式:踩地的腳提供約束(腳底不能穿地、不能滑),擺動的腳不提供。(16 是組合上的上限——實際步態只會走訪其中一小部分,但控制器不能假設剩下的永遠不會發生:踩空、打滑、被絆到都會把系統丟進沒預期的那幾種。)

每個接觸集合對應一組連續動力學;著地與離地是離散事件,把系統變成連續動力學加離散切換的混合系統

這讓系統變成混合系統(hybrid system):連續動力學 + 離散切換。 而且切換時刻不是外部給的,是狀態自己觸發的(腳的高度降到 0 就著地)——切換條件內生於系統。

為什麼這件事這麼要緊:古典控制理論的整套工具(頻域分析、線性化、LQR(用二次代價函數解出最佳線性回授增益)、增益調校)都建在「系統連續可微」上。接觸切換是不可微的,而且著地那一瞬間速度會突變(碰撞)。你不能對這種系統直接套一組 PID 然後調參數——沒有一組固定增益能同時對 16 種動力學都好——而且正因為踩空與打滑會把系統丟進步態本來不會走訪的那幾種,控制器不能只顧預期中的那幾組。

這也是為什麼強化學習在足式上比在輪式上重要得多。輪式的控制問題可以寫成方程式解掉;足式的接觸切換寫不出封閉解,只能逼近或學。


3. 支撐多邊形不再固定,而靜態穩定判準本身就不夠用

移動操作那篇講過輪式的靜態穩定判準:重心投影落在支撐多邊形內。四足的支撐多邊形隨步態一直在變。

四足在慢走時三腳支撐形成三角形、對角小跑時只有兩腳形成一條線、跑步的飛行相完全沒有支撐面

三種情況一路把判準逼到失效:

支撐腳數 支撐多邊形 靜態穩定判準
3 隻(慢走) 一個三角形 成立,而且是設計目標——重心留在三角形內就不會倒
2 隻(對角小跑) 退化成一條線段 幾乎不可能滿足。重心要精確落在那條線上
0 隻(跑步的飛行相) 不存在 判準無法定義

這不是「難以滿足」,是判準本身沒有意義了。飛行相時沒有支撐面,任何「重心投影要落在裡面」的說法都無從談起。

所以足式的穩定不能定義成「不會倒」的靜態條件,只能定義成動態的。 這個轉向可以追到 Raibert 那本 Legged Robots That Balance(MIT Press, 1986)——它跟當時多數工作的差別,正是把重點從「維持靜態平衡」移到「用運動主動平衡」。一隻在跑的四足在每一個瞬間都是不穩定的,靠的是下一步踩對位置把它救回來。


4. 從 ZMP 到 capture point:兩個判準各保證什麼

既然靜態判準不夠,就要找動態的。這裡有兩個層次,常被混用但保證的東西不同。

4.1 ZMP:保證「腳不會繞邊緣翻轉」

ZMP(Zero Moment Point,零力矩點) 是地面上的一個點:把所有地面反作用力等效成作用在這一點上時,水平方向的合力矩為零。

ZMP 在支撐多邊形內時地面反作用力可以平衡;ZMP 跑到邊緣外時腳會繞著邊緣翻轉

判準:ZMP 落在支撐多邊形內 ⟺ 腳掌不會繞著自己的邊緣翻起來。

推導的直覺:地面只能推、不能拉。腳底各處的壓力都必須 ≥ 0。壓力分佈的合力作用點(也就是壓力中心)必然落在接觸面內部——這是物理上的限制,不是選擇。如果控制器算出來的等效作用點跑到接觸面之外,現實中的解決方式就是腳繞著邊緣抬起來,也就是翻轉。

ZMP 比靜態判準進步的地方是它把加速度算進去了。靜態判準只看重心投影;ZMP 看的是重力加上慣性力的合效果,所以動起來也適用。

但 ZMP 只保證這一件事。 它保證腳掌貼著地不翻,不保證機器人不會跌倒。

差別在哪裡:ZMP 是一個瞬時條件,只看「此刻壓力中心在不在接觸面內」。機器人可以整段時間都滿足它,卻一路把重心往前加速——每一瞬間腳都平貼在地、ZMP 完全合法,但速度越來越大,直到重心衝出腳掌能反應的範圍。而且飛行相沒有接觸面,ZMP 依然無從定義。

合法的是每一格,不合法的是整段軌跡。

這正是下一個判準要補的洞:ZMP 不看速度,而「會不會跌倒」本質上是速度的問題。

4.2 Capture point:保證「還停得下來」

第二個層次換了問法:如果我現在把下一步踩在某個位置,能不能就此停住?

capture point 是踩上去之後重心速度會漸近收斂到零的落腳點;它離支撐多邊形有多遠決定了還救不救得回來

capture point 就是那個位置。推導只需要一個模型,而這個模型只需要一個假設。

先把模型立起來:重心走水平線

把機器人簡化成一根倒單擺:全部質量集中在重心,底下用一根無質量的腿撐在地面的 p 點。再加一個假設——重心維持在固定高度 z₀

這個假設立刻決定了兩件事。第一,重心垂直方向不加速,所以地面反作用力的垂直分量必須恰好撐住重量,等於 mg。第二,腿是根桿子,力只能沿著 p 到重心的連線走。兩件事合起來,水平分量就被相似三角形定死了:

水平分量 / 垂直分量 = (x − p) / z₀
     水平分量 = mg · (x − p) / z₀

除以質量就得到水平方向的運動方程:

ẍ = (g / z₀)(x − p) = ω²(x − p)   ,   ω = √(g / z₀)

x 是重心的水平位置,p 是地面上的支點。(⚠ 這個 ω 是倒單擺的自然頻率,單位是 rad/s 沒錯,但它跟本筆記其他地方 (v, ω) 那個「車體轉彎角速度」不是同一個東西,只是撞名。)方程式對 x 是線性的——這就是 linear inverted pendulum(線性倒單擺)的 linear 所在。一般的倒單擺重心走圓弧,方程式裡會冒出 sin θ,而且動能與位能一路互換;定高這個假設把弧壓成直線,換來一條線性方程,代價是這個模型裡再也沒有位能可以交換。後面會用到這一點。

p 不是隨便一個點,它就是 §4.1 那個壓力中心——地面反作用力的等效作用點。而壓力中心只能落在支撐多邊形內(地面只能推不能拉)。這座橋等一下要用。

系統會怎麼跑:兩個模態

這條方程式的通解是兩個指數的疊加(令 u = x − p):

u(t) = A·e^{ωt} + B·e^{−ωt}

兩項各自叫一個模態——系統天生會有的兩種變化方式。B 那項隨時間衰減,無害;A 那項指數放大,它就是「會跌倒」的數學形式。所以問題可以改寫成:有沒有辦法把 A 弄成 0?

把初始條件代進去,u(0) = A + Bu̇(0) = ω(A − B),解出來:

A = ½ · [ u(0) + u̇(0)/ω ]  =  ½ · [ (x − p) + ẋ/ω ]

所以 x + ẋ/ω 不是湊出來的組合,它就是「你現在身上帶了多少發散成分」的度量——差一個常數與係數而已。給它一個名字:

ξ = x + ẋ/ω = x + ẋ·√(z₀ / g)

代回原方程可以驗證它自己滿足一條很乾淨的式子:

ξ̇ = ẋ + ẍ/ω = ẋ + ω(x − p) = ω(ξ − p)

ξ 只受一件事影響:它自己離支點多遠。

踩在 ξ 上會怎樣

把支點踩在 ξ 上,右邊變成 0,ξ 不再動。這時候 x + ẋ/ω = p,也就是

ẋ = −ω(x − p)     ⟹     x(t) = p + (x₀ − p)·e^{−ωt}

發散的那個模態係數歸零,只剩衰減項。重心指數收斂到落腳點,速度趨近零。

所以 capture point 就是 ξ:重心現在的水平位置,加上速度乘一個由重心高度決定的時間常數。

給這個時間常數一個尺度感:z₀ = 0.5 m√(z₀/g) ≈ 0.23 秒。所以重心以 1 m/s 往前走,capture point 大約在前方 23 公分——這也解釋了為什麼跑起來時腳要往前跨得那麼遠。

不要把它想成「動能被抬高重心的位能吃掉」。 這是很自然的直覺,因為「倒單擺」讓人想到撐竿跳那種動能位能互換的畫面。但定高假設已經把那條路砍掉了:重心高度全程不變,沒有位能可吃。真正發生的事是主動把發散模態消掉——踩對地方,A 歸零。這也解釋了為什麼收斂是漸近的(指數趨近,不是在某個時刻「剛好用完」),以及為什麼 ξ 只跟重心的位置、速度和 ω 有關,跟「腿還能伸多長」無關。

不過去翻 Pratt 的原文會看到滿篇能量,那不衝突。 他用的是 LIPM 的守恆量 orbital energy E = ½ẋ² − ½ω²x²,令 E = 0 得到的正是同一個 ẋ = −ωx。關鍵在那個負號:−½ω²x² 是重力對倒單擺產生的失穩力矩所對應的等效位能,離支點越遠越低——它是一道下坡,不是一堵擋住動能的牆。所以「不是位能吃掉動能」這句話針對的是重力位能,不是否認能量觀點本身。

為什麼「落在支撐多邊形內」就代表停得下來

現在那座橋派上用場了。p 就是壓力中心,而壓力中心只能在支撐多邊形內移動。所以:

發散模態指數放大、收斂模態指數衰減;踩在 capture point 上等於把發散模態的係數設成零,只剩衰減項

它的價值不在「精確算出一個點」,而在把穩定變成一個可量測的餘裕

一個誠實的但書:ξ = p 是個不穩定平衡。ξ̇ = ω(ξ − p) 看得出來——踩偏 ε,誤差就以 e^{ωt} 放大回來。所以現實中不是「踩對一次就沒事」,而是每個控制週期重算一次 ξ、持續修正落腳點。capture point 給的是目標,不是一勞永逸的解

這個「還剩幾步可以救」的觀點,比「現在穩不穩」有用得多——因為一隻在跑的機器人永遠不穩,真正要回答的問題從來是「還救得回來嗎」。

兩者的關係可以這樣記:ZMP 管的是腳與地面那個介面,而且只管此刻(壓力中心不能跑出接觸面);capture point 管的是重心的速度(這個速度還能不能被下一步收掉)。ZMP 由當下的位形與加速度決定,不告訴你下一刻會到哪;capture point 的式子裡速度是主角——這就是為什麼同一台機器可以 ZMP 全程合法但 capture point 已經飛出去:腳貼得好好的,人整個往前撲。


5. 狀態估計:沒有輪子可以數

輪式車的 odometry 來自輪子——編碼器數格數,乘上輪徑,積分成位移。四足沒有這個。

而且它要估的東西還更多:輪式車貼在地上,z、roll、pitch 幾乎是常數;四足的軀幹上下起伏、前後俯仰,那 6 個自由度全都要估,而且沒有一個是直接量得到的。

足式狀態估計:接觸偵測判斷哪隻腳踩地,腿部運動學把踩地腳當固定支點反推軀幹位移,再與 IMU 積分融合

標準做法是把三個來源融合起來,每一個都補另一個的洞:

來源 提供什麼 它的洞
接觸偵測 現在哪幾隻腳踩在地上 判錯就整條鏈都錯(見下)
腿部運動學 把踩地的腳當成暫時固定的支點,用關節角反推軀幹相對它移動了多少 只在腳真的沒滑動時成立;而且腳一離地這個參考就消失,得換到下一隻腳
IMU 高頻的加速度與角速度 積分會漂,而且位置是二次積分——漂得特別快

融合的邏輯跟輪式的 wheel + IMU EKF 同源:高頻但會漂的訊號(IMU)由低頻但不漂的訊號(腿部運動學)拉回來。差別在輪式的低頻來源一直都在(輪子一直轉),足式的低頻來源每一步都要換一次

但這套融合有一個結構性的上限,不是調參數能解決的:它能給出不漂的機身速度roll / pitch,而水平位置與 yaw 在數學上是不可觀測(unobservable)的。原因不難理解——腿部運動學只告訴你「相對剛才那隻腳移動了多少」,沒有任何一個來源告訴你「絕對在哪、絕對朝哪」。IMU 的重力向量把 roll / pitch 錨住了,但重力對 yaw 沒有資訊。

所以足式機器人要知道自己在地圖上哪裡,一定得再接一個外部參考(光達或視覺定位),跟輪式一樣——差別只在輪式的 odometry 漂得慢一點。另外一個已被反覆記載的實務問題:機身高度會隨著腿與地面接觸時的形變累積漂移,近年的做法是拿足端接觸點當世界座標的錨點來修正。

接觸偵測是這條鏈的單點失效。 判斷「這隻腳踩到了」有兩條路:裝足底力感測器(直接但多一個會壞的零件),或用關節力矩反推(不必加感測器——這正是 τ = JᵀF 那條式子的用途:量到關節力矩,反推腳底受了多大的力)。判錯的後果不對稱:把「還在空中」誤判成「踩到了」,估計器會拿一個正在移動的參考點當固定支點,位移會瞬間錯掉。


6. 收斂:三個前提被打掉,問題換了一類

輪式成立的前提 四足打掉它 後果
馬達與基座剛性相連 浮動基座,沒有馬達直連軀幹 欠致動:想控的 6 個自由度恰好不能直接控
接觸連續不切換 腳會離地著地,接觸集合有 16 種 混合系統,古典連續控制的工具整套不能直接套
支撐面固定 支撐多邊形隨步態退化成三角形 → 線段 → 消失 靜態穩定判準失效,穩定只能定義成動態的

三者不是各自獨立的困難,而是同一件事的三個面向:基座浮起來之後,唯一能影響它的通道是接觸,而接觸是斷續的。

從這裡出發,兩個判準各補一塊:ZMP 管腳與地的介面、capture point 管整台機器還剩多少救回來的餘裕。狀態估計則要靠接觸偵測把「哪隻腳現在可以當參考」找出來——同一個接觸,既是控制的通道,也是估計的錨點。

步態怎麼選、致動器為什麼不能沿用工業手臂那一套,見步態與致動


來源

待查證:ZMP 首次實機展示的年份與平台,可查到的說法都指向同一份文件,沒有獨立第二來源。「機身高度會漂」這個現象沒有公認的專有名詞——文獻都是描述性寫法,別把它講得像一個固定術語。