引言:
在本文中,我們將深入探討機(jī)器人學(xué)的兩個(gè)核心概念:正運(yùn)動(dòng)學(xué)和逆運(yùn)動(dòng)學(xué)。這兩個(gè)概念是理解和控制機(jī)械臂運(yùn)動(dòng)的基礎(chǔ)。通過一個(gè)具體的7軸機(jī)械臂實(shí)例,我們將詳細(xì)介紹如何計(jì)算機(jī)械臂的正運(yùn)動(dòng)學(xué)和逆運(yùn)動(dòng)學(xué)。我們首先會(huì)解釋正運(yùn)動(dòng)學(xué)和逆運(yùn)動(dòng)學(xué)的基本概念和數(shù)學(xué)原理,然后我們將展示如何應(yīng)用這些原理來計(jì)算7軸機(jī)械臂的運(yùn)動(dòng)。我們的目標(biāo)是讓讀者對(duì)機(jī)械臂的運(yùn)動(dòng)控制有一個(gè)深入的理解,并了解如何在實(shí)踐中應(yīng)用這些知識(shí)。
myArm 300
我們先來簡要介紹我們待會(huì)會(huì)使用到的機(jī)械臂myArm 300.
myArm 300 Pi是一塊全新的7自由度的中心對(duì)稱構(gòu)型協(xié)作機(jī)械臂,myArm搭載著7個(gè)高精度的伺服電機(jī),使得最大工作半徑300mm,末端最大負(fù)載成都能夠達(dá)到200g,重復(fù)定位精度最高達(dá)到了±0.5mm。
myArm 300 Pi的控制主板采用了樹莓派4B 4G,這是一種廣受歡迎的微型計(jì)算機(jī),因其強(qiáng)大的性能和靈活的編程環(huán)境而備受贊譽(yù)。這意味著用戶可以使用多種編程語言來控制myArm 300 Pi,包括Python、C++、Java等,極大地提高了使用者的便利性和靈活性,它還支持ROS1/ROS2 在ROS操作系統(tǒng)中提供了許多功能,例如路徑規(guī)劃,避障,三維感知等。
基本概念
我們要想控制機(jī)械臂,就得有一套關(guān)于機(jī)械臂運(yùn)動(dòng)控制的算法。正逆運(yùn)動(dòng)學(xué)是其中的重要組成部分。在介紹正逆運(yùn)動(dòng)學(xué)之前,我們想先介紹DH模型,這個(gè)模型使得正逆運(yùn)動(dòng)學(xué)的計(jì)算變得更加直接和簡單。
DH模型
DH參數(shù)模型是機(jī)器人學(xué)中一種常用的描述機(jī)器人運(yùn)動(dòng)學(xué)的方法。它通過一組參數(shù)來描述機(jī)器人的關(guān)節(jié)連桿,從而方便地計(jì)算機(jī)器人末端執(zhí)行器地位置和姿態(tài)。
當(dāng)使用DH模型用來描述機(jī)械臂時(shí),我們將機(jī)械臂分解為一系列鏈接和關(guān)節(jié),每個(gè)鏈接和關(guān)節(jié)都與一個(gè)坐標(biāo)系相關(guān)聯(lián)。我們選擇一個(gè)基準(zhǔn)坐標(biāo)系,通常是機(jī)械臂的基座(底座)坐標(biāo)系,然后,為每個(gè)鏈接和關(guān)節(jié)定義一個(gè)坐標(biāo)系,我們定義兩個(gè)坐標(biāo)系:前一個(gè)鏈接的坐標(biāo)系和當(dāng)前鏈接的坐標(biāo)系。這兩個(gè)坐標(biāo)系之間的變換由四個(gè)參數(shù)描述:
連桿長度(a):它表示相鄰鏈接之間的距離,沿著前一個(gè)鏈接的法線測量。它通常指的是鏈接的長度或者鏈接軸線的長度。
連桿的旋轉(zhuǎn)角度(α):它表示相鄰鏈接之間的旋轉(zhuǎn)角度,圍繞前一個(gè)鏈接的法線旋轉(zhuǎn)。它通常指的是鏈接軸線之間的旋轉(zhuǎn)。
關(guān)節(jié)的長度(d):它表示鏈接的長度或者關(guān)節(jié)的長度,沿著當(dāng)前鏈接的法線測量。它通常指的是關(guān)節(jié)軸線的長度。
關(guān)節(jié)的旋轉(zhuǎn)角度(θ):它表示關(guān)節(jié)的旋轉(zhuǎn)角度,圍繞當(dāng)前鏈接的法線旋轉(zhuǎn)。它通常指的是關(guān)節(jié)的角度或者關(guān)節(jié)的轉(zhuǎn)動(dòng)。
通過組合這些參數(shù),可以構(gòu)建一個(gè)四維的變換矩陣,這個(gè)變換矩陣可以表示機(jī)械臂末端執(zhí)行器的位置和姿態(tài)。
以myArm為例子,下圖是myArm 300 的DH模型圖以及SDH參數(shù)表。當(dāng)我們有了一個(gè)機(jī)械臂的DH模型圖我們具體能干些什么呢:
正向運(yùn)動(dòng)學(xué):通過給定關(guān)節(jié)角度,可以使用DH模型圖計(jì)算機(jī)械臂末端執(zhí)行器的位置和姿態(tài),從而進(jìn)行路徑規(guī)劃和運(yùn)動(dòng)控制
逆向運(yùn)動(dòng)學(xué):反過來,也可以用DH模型圖來解決逆向運(yùn)動(dòng)學(xué)問題,即給定目位置和姿態(tài),計(jì)算出關(guān)節(jié)角度的變化,從而實(shí)現(xiàn)平滑的運(yùn)動(dòng)軌跡。
路徑規(guī)劃:給定一個(gè)開始位置和一個(gè)結(jié)束位置,可以使用DH模型來規(guī)劃機(jī)械臂的運(yùn)動(dòng)路徑。這可能涉及到解決一系列的逆運(yùn)動(dòng)學(xué)問題。
除此之外還有很多,比如說碰撞檢測和臂章,動(dòng)畫和可視化機(jī)械臂,仿真機(jī)械臂等等。
正運(yùn)動(dòng)學(xué)
正運(yùn)動(dòng)學(xué)是用來描述機(jī)械臂從基座到末端執(zhí)行器的位置和方向的計(jì)算方法。給定每個(gè)關(guān)節(jié)的角度,我們可以計(jì)算出機(jī)械臂末端的位置和方向。這是一個(gè)基于幾何和三角學(xué)的過程。
下面舉一個(gè)簡單的例子,在一個(gè)平面坐標(biāo)系當(dāng)中,已知連桿的感覺長度為l1和l2,并且已知兩個(gè)關(guān)節(jié)的轉(zhuǎn)動(dòng)角度分別為θ1和θ2,那么其末端執(zhí)行器的位置(x,y)可以根據(jù)三角函數(shù)求出。
x=l1cos(θ1)+l2cos(θ1+θ2)
y=l1sin(θ1)+l2sin(θ1+θ2)
就可以求出x,y的坐標(biāo)了。
在實(shí)際應(yīng)用中,我們通常會(huì)直接在三維空間中直接進(jìn)行計(jì)算,我們可以使用齊次坐標(biāo)來進(jìn)行轉(zhuǎn)換,在齊次坐標(biāo)中,一個(gè)二維點(diǎn)(x, y)可以表示為一個(gè)三維點(diǎn)(x, y, 1),一個(gè)三維點(diǎn)(x, y, z)可以表示為一個(gè)四維點(diǎn)(x, y, z, 1)。通過這種方式,我們可以使用相同的矩陣乘法操作來描述平移和旋轉(zhuǎn)。
例如,一個(gè)二維的平移變換可以表示為以下形式的3x3矩陣:
[[1, 0, dx], [0, 1, dy], [0, 0, 1]]
其中,dx和dy表示在x軸和y軸方向上的平移距離。同樣,一個(gè)二維的旋轉(zhuǎn)變換可以表示為以下形式的3x3矩陣:
[[cos(theta), -sin(theta), 0], [sin(theta), cos(theta), 0], [0, 0, 1]]
其中,theta表示旋轉(zhuǎn)角度,也就是DH參數(shù)中的θ。
通過將所有關(guān)節(jié)的變換矩陣相乘,我們就可以得到從機(jī)器人基座到末端執(zhí)行器的總變換。這就是正運(yùn)動(dòng)學(xué)的基本計(jì)算過程。這個(gè)過程可以用以下的數(shù)學(xué)形式來表示:
T = A1 * A2 * A3 * ... * An
其中 T 是總變換矩陣,Ai 是第 i 個(gè)關(guān)節(jié)的變換矩陣,n 是關(guān)節(jié)的數(shù)量。注意,矩陣乘法不滿足交換律,所以乘法的順序很重要。最終得到的T總變化矩陣算出來的結(jié)果就是機(jī)械臂末端相對(duì)于基座的坐標(biāo)。提前了解DH模型,對(duì)理解后面的矩陣變換很有幫助。
逆運(yùn)動(dòng)學(xué)
逆向運(yùn)動(dòng)學(xué)是指根據(jù)機(jī)械臂末端執(zhí)行器的位置和姿態(tài),計(jì)算機(jī)械臂各個(gè)關(guān)節(jié)的角度。剛好跟正運(yùn)動(dòng)學(xué)反過來,是求取各個(gè)關(guān)節(jié)的角度。逆運(yùn)動(dòng)學(xué)的計(jì)算通常要比正運(yùn)動(dòng)學(xué)復(fù)雜得多,這是一個(gè)從效果反推原因的過程,通常需要解決非線性方程組,而且解可能不唯一,或者根本不存在。我們還是舉例說明,以2自由度的平面機(jī)械臂來做一個(gè)了解。我們已知(x,y)的值,要求出θ1和θ2的角度。
首先我們可以x,y到原點(diǎn)的位置的距離d,這可以勾股定理得到(sqrt代表平方根)
d = sqrt(x^2 + y^2)
然后,我們可以使用余弦定理來求解第二個(gè)關(guān)節(jié)的角度θ2。余弦定理可以描述三個(gè)邊長已知的三角形中,任何一個(gè)角的余弦值。在這里,我們可以將d,L1和L2看作是三個(gè)邊長,然后求解θ2:
cos(theta2) = (L1^2 + L2^2 - d^2) / (2 * L1 * L2)
因?yàn)棣?可能有兩個(gè)解(順時(shí)針和逆時(shí)針),所以我們需要根據(jù)實(shí)際情況來選擇合適的解。
最后,我們可以使用正弦定理或余弦定理來求解第一個(gè)關(guān)節(jié)的角度θ1。正弦定理可以描述三個(gè)邊長和對(duì)應(yīng)的角的正弦值之間的關(guān)系。在這里,我們可以將d,L1和θ1看作是三個(gè)已知的值,然后求解θ1:
theta1 = atan2(y, x) - atan2(L2 * sin(theta2), L1 + L2 * cos(theta2))
求解完之后就可以得知各個(gè)關(guān)節(jié)的角度了,這是在二維的空間中的求解方法,在三維空間中的計(jì)算方法也是一樣的道理,在計(jì)算的時(shí)候得考慮機(jī)械臂關(guān)節(jié)的限制,以及其他的因素來決定最終的角度。
7軸機(jī)械臂實(shí)例
接下會(huì)用到python對(duì)myArm進(jìn)行編程,用到的是pymycobot庫。
正運(yùn)動(dòng)學(xué)關(guān)節(jié)控制
正運(yùn)動(dòng)學(xué)算法通常有一個(gè)確定的結(jié)果,正運(yùn)動(dòng)學(xué)的目標(biāo)是根據(jù)給定的關(guān)節(jié)角度,計(jì)算機(jī)械臂執(zhí)行器的位置和姿態(tài),只存在唯一的結(jié)果。下面是使用角度控制的代碼:
from pymycobot import Myarm import time # create myarm object ma = Myarm('/dev/ttyAMA0',115200) ma.send_angles([degree_list],speed) # send_angles function def send_angles(self, degrees, speed): """Send the degrees of all joints to robot arm. Args: degrees: a list of degree values(List[float]).n for mycobot: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0].n for mypalletizer: [0.0, 0.0, 0.0, 0.0] for mypalletizer 340: [0.0, 0.0, 0.0] for myArm: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0].n speed : (int) 1 ~ 100 """ # self.calibration_parameters(degrees=degrees, speed=speed) degrees = [self._angle2int(degree) for degree in degrees] return self._mesg(ProtocolCode.SEND_ANGLES, degrees, speed)
這就是最直觀的正運(yùn)動(dòng)學(xué)算法的控制,關(guān)節(jié)角度控制機(jī)械臂運(yùn)動(dòng)。
逆運(yùn)動(dòng)學(xué)算法控制,坐標(biāo)控制
前面也有提及到,你運(yùn)動(dòng)學(xué)算法相對(duì)來說復(fù)雜很多,可能存在多個(gè)解的情況,也可能存在無解的情況。逆運(yùn)動(dòng)學(xué)算法的控制是通過控制機(jī)械臂末端坐標(biāo)的變化,讓機(jī)械臂前往下一個(gè)坐標(biāo)位置。我們用python編寫控制坐標(biāo)運(yùn)動(dòng)的代碼:
from pymycobot import Myarm import time # create myarm object ma = Myarm('/dev/ttyAMA0',115200) ma.send_coords([coordinates_list],speed,mode) # mode: 0:linear motion,1:nonlinear motion def send_coords(self, coords, speed, mode=None): """Send all coords to robot arm. Args: coords: a list of coords value(List[float]). for mycobot :[x(mm), y, z, rx(angle), ry, rz]n for mypalletizer: [x, y, z, θ] for mypalletizer 340: [x, y, z] speed : (int) 0 ~ 100 mode : (int) 0 - angluar, 1 - linear (mypalletizer 340 does not require this parameter) """ # self.calibration_parameters(coords=coords, speed=speed) coord_list = [] for idx in range(3): coord_list.append(self._coord2int(coords[idx])) for angle in coords[3:]: coord_list.append(self._angle2int(angle)) # print(coord_list) if mode is not None: return self._mesg(ProtocolCode.SEND_COORDS, coord_list, speed, mode) else: return self._mesg(ProtocolCode.SEND_COORDS, coord_list, speed)
7軸機(jī)械臂又被稱之為冗余機(jī)器人,多的一個(gè)軸通常用于提供更多的靈活性和運(yùn)動(dòng)自由度,所以就出現(xiàn)了這么一個(gè)現(xiàn)象,機(jī)械臂的末端坐標(biāo)值保持不變的時(shí)候,會(huì)有許多不同的姿態(tài)。
這就是開頭說到的逆運(yùn)動(dòng)學(xué)的特點(diǎn),同一個(gè)坐標(biāo)下有許多不同的解。在坐標(biāo)控制中還有一個(gè)關(guān)鍵的信息就是線性運(yùn)動(dòng)和非線性運(yùn)動(dòng),主要是指機(jī)械臂末端的運(yùn)動(dòng)路徑的類型。
線性運(yùn)動(dòng):在這種模式下,機(jī)器人末端執(zhí)行器在兩個(gè)點(diǎn)之間直線移動(dòng)。這就意味著,無論機(jī)器人的關(guān)節(jié)如何移動(dòng),末端執(zhí)行器都會(huì)沿著直線路徑從一點(diǎn)移動(dòng)到另一點(diǎn)。這種類型的運(yùn)動(dòng)通常在需要精確位置控制的應(yīng)用中使用,例如在裝配線上的裝配任務(wù)。
非線性運(yùn)動(dòng):在這種模式下,機(jī)器人末端執(zhí)行器的路徑不是直線,而是一條曲線。這種類型的運(yùn)動(dòng)可以使機(jī)器人在復(fù)雜的環(huán)境中更靈活地移動(dòng),例如在需要避開障礙物或在特定的路徑上移動(dòng)的情況下。
總結(jié)
在我們探討了正逆運(yùn)動(dòng)學(xué)的基本概念以及數(shù)學(xué)原理后,我們可以看到這兩個(gè)概念在機(jī)械臂中的控制是特別重要的。然而,正運(yùn)動(dòng)學(xué)和逆運(yùn)動(dòng)學(xué)只是機(jī)械臂控制的一部分。在實(shí)際應(yīng)用中,我們還需要考慮到動(dòng)力學(xué)、控制理論、傳感器反饋、以及實(shí)際硬件的限制。
隨著技術(shù)的發(fā)展,機(jī)械臂將在很多領(lǐng)域發(fā)揮越來越大的作用,包括制造業(yè)、醫(yī)療保健、家庭服務(wù)、搜索和救援等。通過深入理解這些知識(shí),我們可以更加的了解什么是機(jī)械臂,讓它在各種應(yīng)用中發(fā)揮更大的作用。
如果你喜歡這篇文章的話歡迎在下方留言或者點(diǎn)贊,你的支持是我們更新的動(dòng)力!
審核編輯 黃宇
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
29730瀏覽量
212831 -
開源
+關(guān)注
關(guān)注
3文章
3680瀏覽量
43815 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86708 -
機(jī)械臂
+關(guān)注
關(guān)注
13文章
554瀏覽量
25377 -
大象機(jī)器人
+關(guān)注
關(guān)注
0文章
86瀏覽量
121
發(fā)布評(píng)論請(qǐng)先 登錄
極海G32R501工業(yè)六軸機(jī)械臂參考方案釋放工業(yè)4.0產(chǎn)業(yè)價(jià)值

大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開源六軸機(jī)械臂產(chǎn)品


PCIe EtherCAT實(shí)時(shí)運(yùn)動(dòng)控制卡PCIE464點(diǎn)膠工藝中的同步/提前/延時(shí)開關(guān)膠 #正運(yùn)動(dòng)技術(shù)
探秘XYZ三軸直線滑臺(tái)模組:高精度運(yùn)動(dòng)控制的核心力量

大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開源六軸機(jī)械臂產(chǎn)品
大象機(jī)器人×進(jìn)迭時(shí)空聯(lián)合發(fā)布全球首款RISC-V全棧開源小六軸機(jī)械臂

開源項(xiàng)目!教你如何制作一個(gè)開源教育機(jī)械臂
使用myCobot 280機(jī)械臂結(jié)合ROS2系統(tǒng)搭建機(jī)械分揀站

機(jī)械臂的高效運(yùn)作,連接器起關(guān)鍵作用
【原創(chuàng)】 drawbot 平面機(jī)械臂scara寫字畫畫機(jī)器人DIY教程貼
OrangePi AIpro應(yīng)用:機(jī)械臂應(yīng)用開發(fā)指南

工業(yè)機(jī)器人和機(jī)械臂的設(shè)計(jì)、功能和應(yīng)用有哪些區(qū)別?
開源六軸協(xié)作機(jī)器人myCobot 320結(jié)合人臉表情識(shí)別情緒!

評(píng)論