能否通俗易懂地解釋一下機械手移動的演算法?

一般生產流水線上的機械手是如何計算運動路徑的?從機械角度需要考慮哪些因素?如果有感測器的反饋信號,又是怎樣來修正路徑的?


-----------------------------------------------------------

這裡是我2016年3月18日寫下的。

額,是的,確實寫了一些廢話。

而且嚴重的是,我以上的回答是不對的。或者說站在我今天修改的時間點上的我認識是不對的。

本打算刪除我的這個回答,但是我想保留下來算是對我的一個教訓吧。凡是沒有認真研究透徹做匆匆做出的回答都是會出問題的。

感謝看過的,贊通過的和評論過的各位。在這裡向各位道歉。

------------------------------------------------------------

以下是原來的回答:

不知道如何要做到通俗,太易懂了會不會說我在抖機靈?

基本上我們可以認為在流水線上得機械手在仿生學意義上是對應著我們人類得手。

喂,後面那個同學你不想聽就先走吧。

首先說說驅動,相當於肌肉之類吧。接著是控制,相當於神經之類吧,那麼還有那幾根鐵杆子,相當於骨頭。

所以我們可以看到機械手可以和我們人類差不多靈活。

那個坐在後面的女生你不要這麼笑,好吧。

這裡有兩個細節就是自由度和感測器,它們分別與物理結構和控制系統緊密相關,相當於硬體本體的設計指標吧。

如果加上一個可靠的中央處理器和周邊電路構成一個可靠地處理演算法的核心部件來驅動機械臂那麼就可以讓這個機械手去幹活了。

在流水線上,機械手是沒有你想像地那麼智能地,因為這位同學你說的是那些一般的機械手,不是發射到火星地那個機械手。它們是在

固定地執行(SOP){
action:one by one

從生產地角度來看,最重要地是質量控制(5s),對誤差的精確控制,沒有人願意把成本交給一個動態地玩意去控制,所以機械臂setup那是非常地消耗精力地。

某種意義上說數字機床也是一種機械臂,目前大多數(絕對)也是對既定程序地執行。

那麼這位同學你說的狀況有沒有呢?當然有啊,只是不用在工廠的生產線這種苦逼地地方。當然是用在那些連setup的工程師也到不了的地方。

那麼我們來假設一下,如果這條生產線是在我們人類工程師無法現場到達setup地情況下需要機械臂通過感測器來完成動態地路徑規劃並能順利地完成生產任務(假設我們對生產線的細節是非常清楚地):

首先我們要搞清楚狀況,那麼我們需要一些演算法來搞定視覺和距離感測器,那麼這裡有一些機器視覺演算法你先看看了解一下,機器視覺演算法與應用 ,這些演算法簡單講呢就是計算光線感測器里那些點啊點啊點點啊的位置關係,最後模模糊糊的搞清楚機械手哪裡不能去,哪裡應該去,找到移動地終點。

那麼從起點到終點怎麼才能到達呢?為了通俗易懂的解釋這裡的幾個演算法,請來這裡先看看 PathFinding.js 。 通俗地講就是規划出一條從起點到終點地路線。 ATTENTION! 這裡只是二維,機械手臂需要在一個三維空間里移動,但是原理和這個是差不多的。

可是,機械手臂不是四輪車,對,我們要根據路徑來轉化機械手臂地移動,那麼現在就要把機械手臂的設計圖紙拿出來看看了,我們就巴拉巴拉根據機械手臂的構造來把存在在三維空間地路徑轉化為電機驅動信號,不過這個不要擔心演算法,基本上這些都是苦逼工程師乾的活,和今天講的原理關係不大。

那麼修正路徑就是在機械手臂的移動中利用感測器驗證實際的移動和計算的移動路徑之間的誤差來修正驅動信號,這裡要討論演算法的話就有點複雜,有點超出我的知識範圍,也超出了通俗易懂的範圍,這個部分的演算法你可以理解為某些人模模糊糊地就能把公式推導出來那種能力吧。反正這個部分地演算法對我而言比較複雜,詳細地課後閱讀就這裡隨便看看吧。Fuzzy Control

如果搞定到這一步,那麼下面只需要搞定機械手臂能通過這條生產線生產機械手臂並給它們裝上一個可以移動地底座了,能像人一樣直立行走地就更牛B了。

不知道我的解釋是否足夠通俗易懂?


機械手臂的控制基本都是控制各個關節的角度來達到所需要的XYZ位置與NOA姿態。

通過角度值計算出位姿我們稱之為運動學正解,但是最需要用到的是運動學逆解。

舉個栗子,你現在要拿桌子上的東西,你在乎你的肘關節要運動幾度,肩關節要運動幾度,腕關節要運動幾度嘛?!當然不在乎。這個東西就在那個位置,我伸手向前去拿就好了。這個時候大腦已經幫我們做好運動學逆解了。你幾乎不需要思考就能拿到東西。但是機器人不行,運動學逆解是一個冗餘運算。機器人沒有人的那套進化過來的系統。所以需要進行數學建模,最常見有D-H演算法,使用每個軸之間的關係4個參數進行數學建模,然後通過矩陣運算出結果,這個可是有很多個結果哦,所以我們還要選擇最優解,也就是動作最小的那個。最後執行各個關節的角度來達到指定位姿。這麼說應該挺直白。

如果做直線運動,要把整條直線拆成很多個點。全部進行逆運算。然後逐個執行。還要根據馬達的加減速情況來拆解這些點。我不曉得別人咋做的,我是這麼做的。 如需要了解更深層的東西,推薦閱讀《機器人導論》這本書。

感測器反饋信號需要看你反饋的是什麼信號了。如果是圖像,那就要視覺處理並定位。如果只是簡單的開關量。到那個位置就行了。或者在機械手表面的壓力感測器。撞到東西會自己急停。或者等等等等。。


我來冒昧的簡單回答一下

機械手的演算法基本上就是幾個矩陣 把需要的XYZ坐標帶入矩陣 就能把平面空間中的移動編程機械臂的角度運動 具體的矩陣我忘記了 這幾天我也在研究這個

感測器反饋回來的信號 經過演算法處理後 比如說手臂遇到了一個障礙物 就重新設置終點XYZ 得到新的XYZ 坐標後帶入矩陣計算出角度 就能規避某些障礙之類的

修正路徑這個就看程序設計了


推薦閱讀:

moley廚房機器人的實際能力和效率?
學機械的做什麼行業三五年內可以變月入萬元,聽說這是個吃不飽,餓不死的行業?

TAG:機械 | 機械製造 | 演算法分析 | 機電一體化 |