當前位置: 華文問答 > 數碼

為什麽要做機器人動力學分析?請牛人詳細、易於理解的闡述一下

2016-02-04數碼

謝邀。

前面的答案從理論方面進行了解釋,我來舉幾個生活中的例子來類比一下,不是百分百對應,但本質一樣,需要多聯想,主要靠意會,意會。

如果以後想到更適合更貼切的例子,本回答將不定時更新。

我們經常在網絡/電視上看到軍事人員為了提高瞄準射擊的穩定性,會透過在槍械上掛載一定的額外重量(水壺、磚頭、沙袋)的方式來鍛煉手臂力量,提高穩定性,例如這樣:

ok,現在想象一下你在做同樣的事情,只不過我們換成單臂持手槍。

先來一個最簡單的動作,在槍上掛一個裝了1L(1kg)水的水壺,然後擡起手臂並保持穩定(1kg並不困難,一般的筆記本重量大約在1.5~2kg,試著感受一下),瞄準10米外的靶子。


很簡單吧,接下來我們增加一點點難度,假設掛著你手臂上的水壺會 不定時的隨機的 改變它的重量 ,可能會變輕,也可能會變重,這時會發生什麽情況?

對,你無法很好的一直瞄準目標了。

當水壺突然變輕時,由於你本來的用力大於實際所需,胳膊會往上擡,偏離目標;

當水壺突然變重時,由於你本來的用力小於於實際所需,胳膊會往下掉,同樣偏離目標;

但是不管哪一種情況,偏離目標後,你都可以透過觀察手臂朝向與靶標的差距,重新進行瞄準(當然前提是沙袋不要變得太重導致你舉不起來)。

////////////////在這裏需要插入一丟丟控制理論的知識///////////////////

你透過眼睛觀察到了偏差,大腦就會控制手臂移動去減小偏差,與此同時眼睛仍在觀察,直到最終瞄準目標,這種基於「偏差/誤差/error」進行控制的方法稱為反饋控制,PID控制器就是經典的反饋控制之一。

很顯然,如果你無法看到需要瞄準的目標,或者雖然你看到了目標但是無法判斷到底有多少偏差,那麽就無法進行瞄準。即,沒有偏差,就無法進行反饋控制。

偏差是反饋控制的基礎,也是這種控制策略一些缺點的主要原因。控制之前需要等待產生偏差,會導致控制系統響應變慢。

人透過眼睛來完成絕大部份任務的過程都可以看做是反饋控制,更具體的,由於視覺的存在,有一個專用名詞,即「視覺伺服 Visual Servo」。

很多人在研究如何給機器人加上一雙好用的眼睛,只不過距離人眼+人類大腦的水平還差的太遠。

在射擊運動中,你可以認為在人的大腦中產生了一個用於射擊的反饋控制器,用於控制人手精確的射擊目標。

只不過有的人大腦中的控制參數不行,給定一個目標後,瞄準時間長,射擊準確度差(初學射擊的人);

而有的人參數調的好,透過大量的練習/訓練(肉身完成一次訓練時間巨長的學習),可以達到快速瞄準,精準涉及的目的(射擊運動員);

///////////////////趕快回來繼續動力學//////////////////////////

為什麽會發生偏離目標的情況?

因為你不知道沙袋會在什麽時候改變重量,也不知道沙袋會變重還是變輕以及變化量是多少,所以在沙袋變化的瞬間你只能以一個舊的穩定狀態的出力來處理一個新的狀態,導致了控制效果變差。

因此 簡單的反饋控制無法快速處理這種時變非線性的情況

而現實的情況是,機器人上所使用的關節控制器/電機控制器絕大部份使用經典的PID演算法,因此在這種情況下也會面臨這樣的問題(絕大部份機器人內部都會配備兩種控制器,一種是用來控制電機的關節驅動器,裏面通常是傳統的PID控制,只能控制一個或者少數幾個電機/關節的轉動;另一種類似於人類的大腦,用來處理上層的感知,規劃,通訊以及協調各電機/關節控制器等任務)。

如何能改善這種情況呢?

一個自然而然的思路就是想辦法知道什麽時候水壺的重量會發生變化,以及變化到多重,提前告知你,你就可以在水壺重量變化的一瞬間加把勁或者略微放松一些來保持手臂的水平,繼續瞄準目標(當然這是理想情況,人類的精度控制水平是很模糊的,這裏需要意會,你懂的)。

這種 提前把那些會影響你動作的外界因素告知大腦以提高控制精度的方法,在控制理論中被稱為前饋控制

在這個例子中,有哪些外界因素需要提前告知呢?

水壺的質素以及變化的時間。

其中, 質素Mass 這個參數就屬於動力學的範疇(終於講到動力學了,呼~)。

在這裏我們把水壺當成了一個點來考慮,假設水壺換成了一個棍子橫在你的胳膊上,你就要考慮這個棍子的 重心Center of Mass 在什麽地方了,畢竟重心在不在胳膊的上變異數別很大。

重量變化這個假設對應到機器人上是很常見的,各關節在運動過程中相互位置發生變化,由於重力產生的力也隨之變化,例如手臂伸直和垂下兩種狀態,對肘關節的力量輸出要求是不一樣的。

質素和重心兩個參數與平動有關,涉及到 轉動 時就要換成另外一組動力學參數,即 慣量inertia 慣性主軸axes of moment ,就不再說具體例子了。

這是引入動力學的第一個好處, 可以顯著提高控制的準確性和響應速度


我們繼續,現在射擊任務要求有一些變化。

你需要射擊10次目標,每次射擊前都要求手臂先回到垂直向下狀態,然後擡起射擊,最終完成10次射擊的時間越短越好。

假設一開始水壺是空的,相當於沒有額外負載,你輕車熟路,每次都使勁全力快速舉槍、射擊、放下,20秒完成了10次射擊,成績優異。(20秒是我瞎掰的)

再來一次,不知道誰使壞給你掛上了一個裝滿水的純凈水桶,估摸有20來公斤吧,你渾然不知,仍然全力舉槍。

啊~!good bye,肱二頭肌。

舉槍時,手臂末端畫出了一個圓弧,我們稱這個圓弧為 路徑規劃Path Planning ,然後為了更快的完成任務,我們盡全力賦予了這個圓弧運動一個速度(按照之前的假設,2s一次射擊),整個過程我們稱之為 軌跡規劃Trajectory Planning

當槍的重量遠低於手臂力量時,你以多大速度舉槍不會有太大影響,因為這在你的肌肉承受範圍之內。但是如果你需要舉起的力量超出了合理範圍(例如前面所說單手橫舉滿的純凈水桶),你仍然要以2s的時間完成一次完整動作,就會造成肌肉拉傷,因為 不合理的速度/加速度要求超出了肌肉的物理限制

肌肉如此,機器人的電機也是如此,只不過人對於手臂的控制沒有那麽精確,而電機有精確的參數。

這裏用到的參數就是電機的 力矩/轉矩Torque ,由力矩和慣量就可以得到所允許的最大加速度。

因此動力學的第二個作用,是在規劃機器人的運動時,充分考慮機器人動力系統的限制,在不損壞電機的情況下,規劃出符合要求的軌跡(時間最短、功耗最優等)。

ok,槍打完了,我們換另一個的例子。

基本上每個人都有過細微調整某些重物位置的經歷,例如調整衣櫃位置,對準器材的螺絲孔等等,由於比較重,力氣小了推不動,稍微用點力,又推過了,神煩。

這是由於摩擦力是非線性的,靜摩擦很大,而動起來之後速度較低時的動摩擦又比較小,動靜之間切換時控制物件變化過快導致控制精度變差。

在電機低速控制中,有一種速度忽快忽慢的「蠕動」現象就是由於這個原因引起的。

因此,在高精度機器人控制中,也要考慮摩擦力的影響。

除此之外,由於參考系變化「產生」的科氏力,也在基本的動力學方程式中,感興趣的可以回去翻翻教科書。

摩擦力和科氏力同樣是動力學的範疇

暫時先這些,以後有時間繼續填坑。

其實最開始想到以射擊練習作為例子來解釋機械臂動力學時,腦子裏第一個反應是Howard。


本來後兩個例子應該放幾張圖,但是高鐵上實在不方便,見諒。


歡迎關註:

OnionBots - 知乎專欄