停車的難題
想像你左邊正好有一個空車位,伸手就能搆到的距離。你看得見它,中間也沒有任何障礙。可你就是沒法讓車直接橫著滑進去。你得先往前開,猛打方向盤,斜著倒車,再回正,一點點蹭進去。明明走一步就能跨過的距離,為什麼要這麼大費周章?
答案是機器人學裡最優雅的思想之一:汽車能做的動作,比它能到達的位置要少。你的手握著方向盤、腳踩著踏板,能獨立操控的只有兩個量;而你想停進去的那個位置,卻要用三個數字來描述——往東多遠、往北多遠、車頭朝著哪個方向。你能直接下達的指令,和你最終想到達的狀態之間,存在著一道真實的鴻溝。要填平這道鴻溝,就得跳一段小小的舞。
約束:你做不到的事
約束,說白了就是一條禁止某些運動的規則。要把它說清楚,我們用位姿來描述機器人的狀態——也就是它的位置加上朝向。對於在平地上滾動的機器人,位姿由三個數字組成:x、y,以及它指向的角度 θ。所有可能位姿的集合,就是機器人的位形空間;我們說,一輛平地上的車,在最終能到達的狀態上擁有三個自由度。
關鍵的分野在這裡。完整(holonomic)機器人可以沿著其位姿的每一個方向自由運動:在任何一瞬間,它都能獨立地前進、橫移或原地旋轉。它能直接操控的量的數目,恰好等於位形空間的維數。而非完整(nonholonomic)機器人能操控的量比這要少。它的輪子強加了一條它無法違背的速度規則——這條規則正是完整與非完整約束這個術語所命名的,也正是它禁止了橫向滑動。
一輛普通汽車和一台差速驅動機器人(兩側各一個驅動輪,靠讓兩輪轉速不同來轉向)都是非完整的。它們都只能朝著——或背著——當前車頭所指的方向運動,同時轉彎。兩者都沒法瞬移到側面。這個約束並不是說目標到不了:只要空間夠大,兩者都能到達任意位姿。它約束的是路徑——你只能把那些被允許的動作一段段拼接起來,才能抵達。
為什麼這是速度規則,而非一堵牆
微妙之處在於:非完整約束限制的是你的速度,而不是你的位置。一扇鎖住的門是位置限制——有些房間你永遠進不去。汽車的規則卻不同:沒有哪個位姿是它到不了的,只有某些方向是它此刻動不了的。輪子樂意往前滾、樂意原地打轉,卻拒絕橫向打滑。這個拒絕,就是約束的全部。
我們可以把這個被禁止的方向,寫成簡潔的一行式子。設車頭朝向角度為 θ,那麼它的側向就垂直於這個朝向。規則說:沿這個側向的速度分量必須始終為零:
heading direction: ( cos θ , sin θ ) sideways direction: ( -sin θ , cos θ ) no-sideways-slip rule: x_dot * (-sin θ) + y_dot * (cos θ) = 0 ( x_dot, y_dot = the velocity components; the dot means rate of change )
讓這個約束成為非完整約束——而不是一個可以化簡掉的普通限制——的原因在於:你無法把它積分成一條純粹關於位置的規則。它背後並不藏著任何形如「f(x, y, θ) = 常數」的方程式。證明就是停車位本身:靠著前後挪動、一次也不橫滑,你最終卻能到達一個純粹橫向偏移的位姿。這些瞬時的禁令,加起來並不構成任何禁區。這正是一個真正非完整系統的標誌,也是完整與非完整運動的核心。
為什麼規劃器在意:挪騰還是滑行
這個區別絕非紙上談兵——它改變了機器人思考「如何從 A 到 B」的方式。完整機器人可以把自己當成一個自由漂浮的點來規劃:朝目標畫一條最短的無障礙直線,沿著它走,需要時隨手調整朝向就行。全向驅動機器人——它用特製的滾輪實現一次性朝任意方向移動——做的正是這件事:它能直接平移擠進一個狹窄的卡位,而那裡換作汽車則需要來回挪上好幾把。
非完整機器人沒法走這條捷徑。它的規劃器必須在路線上的每一點都遵守「不打滑」規則,因此只能給出輪子真正跟得動的路徑——平緩的圓弧、前後騰挪,而絕不會有突然的橫向跳躍。要到達一個僅僅偏在旁邊的位置,可能需要一連串遠比直線距離長得多的動作。
- 完整規劃:從機器人到目標拉一條直線段,確認不撞障礙,然後滑過去。朝向可以在途中獨立設定。
- 非完整規劃:在可行的圓弧與前進/倒車段中搜索,把它們拼接起來,使輪子始終不打滑——也就是規劃器算出來的那套側方停車舞步。
- 無論哪種,一條無碰撞的路徑最終都還得變成馬達能執行的、平滑且帶時序的軌跡——區別只在於:允許出現哪些路徑形狀。
給各種驅動方式歸類
有了這個概念,常見的輪式平台就能乾淨俐落地落到分野的兩側。非完整這一族包括普通汽車的阿克曼轉向(前輪轉動,就像真正的小汽車),以及像掃地機器人那樣的差速驅動機器人:兩者都靠改變朝向來轉向,都沒法橫移。
完整這一族就是各種全向驅動。借助全向輪或帶斜向滾子的麥克納姆輪,這類平台能朝任意方向平移、同時還能旋轉,從而把「去向」和「朝向」解耦開來。它們是倉庫和競賽機器人裡的寵兒——凡是地面空間緊張、完全的運動自由能派上用場的地方,都有它們的身影。
同一副眼鏡也能看到輪子之外。一台用離散落腳行走的足式機器人,表現得很像全向平台——它向旁邁步和向前邁步幾乎一樣輕鬆,所以在平地上,足式移動實際上是完整的。而一艘船或一架固定翼飛機,必須保持前進才能轉向,則穩穩地站在非完整的那一邊。這道分野與其說關乎輪子,不如說關乎一個簡單的問題:你能否瞬間朝位姿可以變化的每一個方向運動?