相信很多人都注意到了“機器人學家”兩天前推送的Boston Dynamics新機器人Spot-Mini。除了一如既往獨領風騷的步態控制外,這次BD還給機器人增加了一個機械臂。視頻中的一幕挺有趣,就是Spot-Mini全身都在擺動,但機械臂末端基本保持穩定。
matlab做的GIF好棒,都找不到循環點
使機器人消除底座運動影響,並保持機械臂末端相對於環境穩定(維持期望運動狀態),是移動機械臂領域的關鍵技術之一。那么BD是如何做到這一點的呢?
先把BD放一邊,在移動機器人領域,一般有兩種方法來保持機械臂末端穩定:基於誤差的控制、基於模型的控制(視頻在文末)。
其中,兩種方法都需要用到雅克比,或者叫做微分運動學(n為機械臂自由度):

利用雅克比矩陣,可以將每個關節的速度換算成機械臂末端速度(反之亦然)。
1. 基於誤差的控制
基於誤差的控制是將機械臂與移動底座分開考慮,只關注機械臂末端與預期運動狀態的誤差。通過傳感器(加速度計、視覺等)可以實時測量得到機械臂末端的誤差,之后利用雅克比(偽)逆轉換成機械臂各關節運動狀態,從而使得機械臂往誤差減小的方向運動(接近期望運動軌跡)。
由於手頭沒有合適的移動機械臂平台,這里我用上面這個平台代替:認為整個地球+Baxter左臂是移動機械臂,而小車是環境(world)。當小車被拉動時,從小車上看,可以認為是移動機械臂的底座發生了移動(等效於下面這個模型)。
在這里,我利用攝像機識別小車上二維碼的位置,並利用如下控制方法確保機械臂末端與二維碼相對位置不變,及機械臂在world坐標系下保持穩定。
演示視頻見最后(由於攝像機幀率為20Hz,所以控制效果可以看出較明顯延時)。
【note】歐拉角表示姿態時,角速度用如下公式計算:
這個方法的優點是不管什么樣的底座均可以使用相同的方法進行控制,而缺點就是對傳感器精度、實時性要求高,機械臂也容易出現奇異、超出工作空間等問題。
2. 基於模型的控制
基於模型的控制是通過建立整個移動機械臂模型,通過系統冗余性計算控制指令。
當機器人的自由度大於6的時候,便會呈現一定的冗余特性,換句話說,機器人末端的某一動作,可以通過無數種關節運動方式獲得。國內做控制的人喜歡將這個特性稱為機器人的自運動,但是我個人更喜歡用線性空間的概念(雅克比零空間)。簡而言之,如果知道機器人的完整模型,就能利用零空間實現所有關節都運動而末端不動。
后面的視頻中,我會用7自由度的Motoman SDA5F左臂來演示這個方法:假設第一個旋轉關節是移動底座,后面六個關節是固定在底座上的機械臂。當然,與我在視頻中使用的例子不同,移動底座的運動狀態往往與下發的控制指令有較大偏差(與地面打滑等),所以,必須增加底座運動狀態估計(卡爾曼濾波)模塊,利用估計的運動狀態作為整個機器人模型前幾個廣義坐標數值。這個方法的優點是擁有整個機器人的模型,可以實現一些二級任務(保證末端任務的前提下,完成其他優化任務),同時更容易避免機械臂超出工作空間等情況;但是缺點就是底座的運動狀態難以准備獲得。
3. BD是怎么做的
我沒找到他們的論文,所以只能靠猜了。通過仔細觀看高清視頻,SpotMini底部運動時,機械臂末端會發生(較高頻率)抖動,這種感覺非常類似於PID控制時P增益稍微太大的情況;另一方面,BD底座的控制應該是力矩控制,無法保證高精度的位置,采用基於誤差的控制可以大大降低建模和控制的復雜度。所以,我猜是采用基於誤差的控制方式。
4. 我的視頻
我的視頻在這里看: