Udacity机器人软件工程师课程笔记(十五)-运动学-正向运动学和反向运动学(其二)-DH参数等
正向運動學和反向運動學
目錄
- 2D中的旋轉矩陣
- sympy包
- 旋轉的合成
- 旋轉矩陣中的歐拉角
- 平移
- 齊次變換及其逆變換
- 齊次變換的合成
- Denavit-Hartenberg 參數(shù)
- DH參數(shù)分配算法
- 正向運動學
- 反向運動學
- 反向運動學舉例
7.齊次變換的合成
齊次變換的合成與旋轉的合成遵循著相同的邏輯。
假設從坐標系C到坐標系B的變換是已知的,從坐標系B到坐標系a的變換也是已知的。
CrP/Co^C\bold{r}P/CoCrP/Co關于坐標系_AAA首先將它轉化為坐標系BBB,
(6-1)
然后通過變換到A坐標系,
(6-2)
(6-1)(6-2)式可以組合為:
為了完整起見,把A和C之間的變換展開成已知的分量,
(6-3)
(6-4)
式(6-4)中的左上3x3子矩陣看起來應該很熟悉;它是a和C之間旋轉的組合。
BARBrCo/Bo^A_B R^BrCo/BoBA?RBrCo/Bo是向量從BoB_oBo?到CoCoCo在_A坐標系中的表示。另一項,ArBo/Ao^A\bold{r}_{Bo/Ao}ArBo/Ao?是向量從AoA_oAo?到BoB_oBo?在_A坐標系中的表示。
為了幫助鞏固變換、逆變換和變換組合的概念,再考慮一個例子。這里是坐標系A到E。
假設我們想要創(chuàng)建坐標系A和E之間的變換;顯然,有兩條路。一條路徑有變換,
(6-5)
第二個是:
(6-6)
兩者的結果相同
(6-7)
下面程序是證明(7)式,經(jīng)過兩種途徑, 實現(xiàn)坐標系從A到E的變換
從A系到B系到E系:
坐標系A:位于[0,0,0]
坐標系B:將坐標系A旋轉大約a_y -90度。翻譯A by [- 2,2,4]
坐標系E:將坐標系B旋轉約b_x 90度。將B平移[0,2,0]
從A系到C系到D系到E系:
坐標系C:平移A到[4,4,0]
坐標系D:圍繞c_x旋轉坐標系C 90度。翻譯C by [- 3,3, 2]
坐標系E:圍繞d_Z旋轉坐標系D 90度。將D平移[- 3,2,3]
from sympy import symbols, cos, sin, pi, sqrt, simplify
from sympy.matrices import Matrix# 為聯(lián)合變量創(chuàng)建符號
# 數(shù)字1到4按指定的順序對應于每個旋轉。
q1, q2, q3, q4 = symbols('q1:5')# 定義關于給定特定角度的x、y和z的旋轉矩陣的函數(shù)。def rot_x(q):R_x = Matrix([[1, 0, 0],[0, cos(q), -sin(q)],[0, sin(q), cos(q)]])return R_xdef rot_y(q):R_y = Matrix([[cos(q), 0, sin(q)],[0, 1, 0],[-sin(q), 0, cos(q)]])return R_ydef rot_z(q):R_z = Matrix([[cos(q), -sin(q), 0],[sin(q), cos(q), 0],[0, 0, 1]])return R_z# 定義坐標系之間的旋轉# 坐標系A的初始旋轉矩陣
Ra = Matrix([[1, 0, 0],[0, 1, 0],[0, 0, 1]])# 在A->B->E坐標系上進行旋轉
Rb_a = rot_y(q1)
Re_b = rot_x(q2)# 在A->C->D->E坐標系上進行旋轉
Rc_a = Ra
Rd_c = rot_x(q3)
Re_d = rot_z(q4)# 定義坐標系之間的轉換tb_a = Matrix([[-2], [2], [4]])
te_b = Matrix([[0], [2], [0]])
tc_a = Matrix([[4], [4], [0]])
td_c = Matrix([[-3], [3], [2]])
te_d = Matrix([[-3], [2], [3]])# 定義齊次變換矩陣
Ta = Ra.row_join(Matrix([[0], [0], [0]]))
Ta = Ta.col_join(Matrix([[0, 0, 0, 1]]))Tb_a = Rb_a.row_join(tb_a)
Tb_a = Tb_a.col_join(Matrix([[0, 0, 0, 1]]))Te_b = Re_b.row_join(te_b)
Te_b = Te_b.col_join(Matrix([[0, 0, 0, 1]]))Tc_a = Rc_a.row_join(tc_a)
Tc_a = Tc_a.col_join(Matrix([[0, 0, 0, 1]]))Td_c = Rd_c.row_join(td_c)
Td_c = Td_c.col_join(Matrix([[0, 0, 0, 1]]))Te_d = Re_d.row_join(te_d)
Te_d = Te_d.col_join(Matrix([[0, 0, 0, 1]]))# 化簡公式
Te_a_1 = simplify(Ta * Tb_a * Te_b)Te_a_2 = simplify(Ta * Tc_a * Td_c * Te_d)# 計算E的方向和位置
E_1 = Te_a_1.evalf(subs={q1: -pi / 2, q2: pi / 2}, chop=True)E_2 = Te_a_2.evalf(subs={q3: pi / 2, q4: pi / 2}, chop=True)print('E_1 :',E_1)
print('E_2 :',E_2)
有關更多sympy表達式化簡的在這里。
輸出如下:
E_1 : Matrix([[0, -1.00000000000000, 0, -2.00000000000000], [0, 0, -1.00000000000000, 4.00000000000000], [1.00000000000000, 0, 0, 4.00000000000000], [0, 0, 0, 1.00000000000000]])
E_2 : Matrix([[0, -1.00000000000000, 0, -2.00000000000000], [0, 0, -1.00000000000000, 4.00000000000000], [1.00000000000000, 0, 0, 4.00000000000000], [0, 0, 0, 1.00000000000000]])
由此看出,經(jīng)過兩個變換,兩者得出來的結果是相同的。
8.Denavit-Hartenberg 參數(shù)
在前面的課程中,介紹了旋轉、平移和齊次變換的概念。所有這些概念對于理解機械手正運動學問題都是必不可少的,即給定關節(jié)變量,計算末端執(zhí)行器的位置。求解過程包括在機械手的每個連桿上附加一個參照系,并寫出從固定基座連桿到連桿1、從連桿1到連桿2的齊次變換,一直到末端執(zhí)行器。
(7-1)
通常,每個變換需要6個獨立的參數(shù)來描述相對于坐標系i?1i-1i?1的坐標系iii, 3個參數(shù)表示位置,3個參數(shù)表示方向。
1955年,雅克·德納維特(Jacques Denavit)和理查德·哈滕伯格(Richard Hartenberg)提出了一種將參照系附加到機械手連桿上的系統(tǒng)方法,簡化了齊次變換。他們的方法只需要四個參數(shù)來描述相鄰參考系的位置和方向。在機器人技術的早期,更緊湊的正運動學方程提供了巨大的好處,因為計算通常是人工或在處理能力有限的計算機上進行的。因此,用于描述機械手運動學的Denavit-Hartenberg (DH)方法現(xiàn)在是普遍存在的。
自最初的描述以來,DH方法已經(jīng)做了一些修改,主要是關于每個參考系原點的編號和位置,所以在比較來自不同來源的工作時,必須小心確定使用的是哪種約定。以下是五個最常見的來源,
-
Waldron, KJ. A study of overconstrained linkage geometry by solution of closure equations, Part I: A method of study (1973). Mech. Mach. Theory 8(1):95-104.
-
Paul, R. (1982). Robot Manipulators: Mathematics, Programming and Control (MIT Press, Cambridge, MA)
-
Craig, JJ. (2005). Introduction to Robotics: Mechanics and Control, 3rd Ed (Pearson Education, Inc., NJ)(機器人學概論:機械與控制,第三版)
-
Khalil, W and Dombre, E. (2002). Modeling, Identification and Control of Robots (Taylor Francis, NY)
-
M. Spong and M. Vidyasagar, Robot Modeling and Control, Wiley, 2005
這里使用John J Craig書中描述的約定。
這些慣例上的差異使得比較結果更加困難。重要的是始終檢查齊次變換序列是如何執(zhí)行的,以關聯(lián)相鄰的連接。下面描述的約定與Craig(2005)一致。涉及的參數(shù) α,a,d和θ。
參數(shù)名稱和定義總結如下:
- αi?1α_{i?1}αi?1?(扭轉角) = 沿X^i?1\hat{X}_{i-1}X^i?1?以右手法則觀測的 Z^i?1\hat{Z}_{i-1}Z^i?1?和Z^i\hat{Z}_{i}Z^i?之間的夾角。
- ai?1a_{i?1}ai?1? (連桿長度) = 沿X^i?1\hat{X}_{i-1}X^i?1?測量的從Z^i?1\hat{Z}_{i-1}Z^i?1?到Z^i\hat{Z}_{i}Z^i?的距離,且X^i?1\hat{X}_{i-1}X^i?1?是垂直于 Z^i?1\hat{Z}_{i-1}Z^i?1?和Z^i\hat{Z}_{i}Z^i?的。
- did_{i}di?(連接偏移) = 沿Z^i\hat{Z}_{i}Z^i?觀測的X^i?1\hat{X}_{i-1}X^i?1?和X^i\hat{X}_{i}X^i?之間的有符號距離。注意,這個量在棱柱連接(移動副)的情況下是一個變量。
- θi\theta_{i}θi? (關節(jié)角度) = 沿著Z^i\hat{Z}_{i}Z^i?以右手法則觀測的X^i?1\hat{X}_{i-1}X^i?1?和X^i\hat{X}_{i}X^i?之間的夾角。注意,對于轉動連接(轉動副),這個量是一個變量。
關于連接方式,參考這里。
對于一個n自由度的機械手,將有n個關節(jié){1,2,…,n},由于每個關節(jié)連接兩個連桿,所以有n+1個連桿{0,1,…,n}。按照慣例,固定的基本鏈接為鏈接0,索引iii朝著末端執(zhí)行器順序增加。注意,如上面的圖所示,并不要求坐標系的原點在連接點上,只是要求它與連接點一起嚴格移動。坐標系的z軸,在轉動連接的情況下,與關節(jié)的旋轉軸對齊。因此,相對于連接i?1i-1i?1,連接iii繞Z^i\hat{Z}_{i}Z^i?旋轉。對于棱形聯(lián)接,z軸與其運動方向一致。
一個與兩個向量相互垂直的單位向量定義為,
(7-2)
即,向量的叉乘除以向量叉乘的模。只有在傾斜軸的情況下,X^i?1\hat{X}_{i-1}X^i?1?是唯一的。對于相交軸,符號的選擇是任意的。通常的做法是選擇X^i?1\hat{X}_{i-1}X^i?1?的方向,使連接iii的正向旋轉到合適的位置。
對于平行的軸,有無限多種可能。在這種情況下,應該尋找機會將參考系的原點放在它可以使其他一些參數(shù)等于零的位置。
最后,選擇y軸來完成一個右手坐標系。
從坐標系i?1i-1i?1到坐標系iii的齊次變換是由四個基本變換、兩個旋轉和兩個平移組成的矩陣,如下所示
(7-3)
(7-4)
方程(7-1)和(7-3)的理解非常重要。當
學習為一個新的機械手編寫DH參數(shù)時,經(jīng)常會糾結于在哪里放置參考幀,如何定位它們,以及跟蹤索引。我們應該經(jīng)常問自己的一個問題是:“變換是否移動了連接i?1{i-1}i?1中的參考系,使其與連接iii中的參考系完全一致?”如果答案是肯定的,這是一個好的跡象。
同樣重要的是,在式(7-3)中,只有一個參數(shù)是可變的 (θi\theta_iθi?或did_idi?) ,連桿長度和扭轉角是常數(shù)。因此,對于從基礎連接到末端執(zhí)行器n0T^0_n Tn0?T的整個變換,只有n個變量。
9.DH參數(shù)分配算法
上一課試圖解釋DH參數(shù)背后的理論和動機。現(xiàn)在的重點是如何在算法上為操縱器的鏈接分配參考坐標系。請記住,坐標系i?1i-1i?1牢固地連接到坐標系iii。為了方便起見,接著用上面的圖
具有n個自由度的運動鏈(即關節(jié))的參數(shù)分配過程總結為:
-
標記{1,2,…,n }中的所有關節(jié)。
-
將{0,1,…,n}中的所有鏈接標記為固定的基本鏈接為0。
-
在所有關節(jié)上畫線,定義關節(jié)軸。
-
分配每個框架的Z軸指向其關節(jié)軸。
-
在Z^i?1\hat{Z}_{i-1}Z^i?1?和 Z^i\hat{Z}_{i}Z^i?之間識別每個坐標系的共同法線 。
-
“中間鏈接”(即,不是基礎鏈接或末端執(zhí)行器。)的端點與兩個關節(jié)軸i{i}i和i+1{i + 1}i+1相關聯(lián)。對于從1到n-1的iii,將X^i\hat{X} _{i}X^i?賦值為:
-
對于傾斜軸,沿法線之間 Z^i\hat{Z}_{i}Z^i? 和Z^i+1\hat{Z} _{i + 1}Z^i+1?,并從i{i}i指向i+1{i + 1}i+1。
-
對于相交軸,垂直于包含 Z^i\hat{Z}_{i}Z^i? 和 Z^i+1\hat{Z}_{i + 1}Z^i+1?。
-
對于平行軸或重合軸,分配是任意的;尋找使其他DH參數(shù)等于零的方法。
-
-
對于基本鏈接,當?shù)谝粋€關節(jié)變量(θ1\theta_1θ1?或者d1d_1d1?)為0時,總是選擇坐標系0{0}0與坐標系1{1}1重合。這將保證 α0{\alpha}_{0}α0? = 0。注意,如果關節(jié)1是轉動的,則 連接偏移d1ze8trgl8bvbq_{1}d1? =0。如果關節(jié)1是棱柱形的,則 轉動角度θ1=0{\theta}_{1} = 0θ1?=0。
-
對于末端執(zhí)行器坐標系,如果關節(jié)n是轉動關節(jié)。 當θn{\theta}_{n}θn? = 0和坐標系n的原點即 dnze8trgl8bvbq_{n}dn? = 0,選擇 Xn{X}_{n}Xn?朝向 Xn?1{X}_{n-1}Xn?1?。
進行坐標系分配后,DH參數(shù)通常以表格形式顯示(如下)。表中的每一行都對應于從坐標系i{ i }i到坐標系i+1{ i + 1 }i+1的轉換。
這是一些DH參數(shù)簡化,以便在選擇框架任務時尋找。
- 涉及到坐標軸Z^i?1\hat{Z}_{i-1}Z^i?1?到坐標軸Z^i\hat{Z}_{i}Z^i?的特殊情況:
- 共線:α=0\alpha = 0α=0 and a = 0
- 平行:α=0\alpha = 0α=0 and a ≠\neq?= 0
- 相交:α≠0\alpha \neq 0α?=0 and a = 0
- 如果公共法線在坐標系i的原點與Z^i\hat{Z}_iZ^i?相交,那么did_idi? = 0
不同的作者提出了多種分配DH參數(shù)的約定。即使兩個分析人員使用相同的約定,也無法保證將導致相同的坐標系分配給鏈接。但是,如果選擇相同的基本框架和相同的點作為框架n的原點,則無論使用哪種約定,從0到n的整體轉換都將是相同的。
10.正向運動學
正向運動學問題歸結為齊次變換的合成。我們從基礎鏈接開始,然后逐個鏈接移動到末端執(zhí)行器。并且使用DH參數(shù)來構建每個單獨的變換。
相鄰連接的總變換實際上由四個單獨的轉換組成,2個旋轉和2個平移。以SCARA為例,
按照介紹的DH參數(shù)的8步分布過程,我們可以得到右面這個表格。注意每一行只有一個變量(θ1\theta_1θ1?或者d1d_1d1?)。
程序如下:
首先從SymPy導入幾個組件。
from sympy import symbols, cos, sin, pi, simplify
from sympy.matrices import Matrix
接下來,我們定義將在變換方程中使用的符號。在這里,我用q表示廣義坐標;d,a和alpha是其他DH參數(shù)。
### Create symbols for joint variables
q1, q2, q3, q4 = symbols('q1:5')
d1, d2, d3, d4 = symbols('d1:5')
a0, a1, a2, a3 = symbols('a0:4')
alpha0, alpha1, alpha2, alpha3 = symbols('alpha0:4')
對于非零常數(shù)DH參數(shù),使用數(shù)值進行表達。
a12 = 0.4500 # meters
a23 = 0.3000 # meters
在這里,建立了一個字典,將數(shù)字值綁定到那些常量的DH參數(shù)上。
# DH Parameters
s = {alpha0: 0, a0: 0, d1: 0, alpha1: 0, a1: a12, d2: 0, alpha2: 0, a2: a23, q3: 0,alpha3: 0, a3: 0, d4: 0}
然后,定義相鄰鏈接之間的齊次變換,并使用subs方法將已知的常數(shù)值替換為表達式。
# 齊次變換
T0_1 = Matrix([[ cos(q1), -sin(q1), 0, a0],[ sin(q1)*cos(alpha0), cos(q1)*cos(alpha0), -sin(alpha0), -sin(alpha0)*d1],[ sin(q1)*sin(alpha0), cos(q1)*sin(alpha0), cos(alpha0), cos(alpha0)*d1],[ 0, 0, 0, 1]])
T0_1 = T0_1.subs(s)T1_2 = Matrix([[ cos(q2), -sin(q2), 0, a1],[ sin(q2)*cos(alpha1), cos(q2)*cos(alpha1), -sin(alpha1), -sin(alpha1)*d2],[ sin(q2)*sin(alpha1), cos(q2)*sin(alpha1), cos(alpha1), cos(alpha1)*d2],[ 0, 0, 0, 1]])
T1_2 = T1_2.subs(s)T2_3 = Matrix([[ cos(q3), -sin(q3), 0, a2],[ sin(q3)*cos(alpha2), cos(q3)*cos(alpha2), -sin(alpha2), -sin(alpha2)*d3],[ sin(q3)*sin(alpha2), cos(q3)*sin(alpha2), cos(alpha2), cos(alpha2)*d3],[ 0, 0, 0, 1]])
T2_3 = T2_3.subs(s)T3_4 = Matrix([[ cos(q4), -sin(q4), 0, a3],[ sin(q4)*cos(alpha3), cos(q4)*cos(alpha3), -sin(alpha3), -sin(alpha3)*d4],[ sin(q4)*sin(alpha3), cos(q4)*sin(alpha3), cos(alpha3), cos(alpha3)*d4],[ 0, 0, 0, 1]])
T3_4 = T3_4.subs(s)
最后,通過組合各個鏈接變換來創(chuàng)建基礎框架和末端執(zhí)行器之間的整體變換。
# Transform from base link to end effector
T0_4 = simplify(T0_1 * T1_2 * T2_3 * T3_4)
print命令顯示整體變換。
print(T0_4)
對符號表達式進行數(shù)值計算的方法有很多,一種簡單的方法是使用evalf方法并傳入字典。
print(T0_4.evalf(subs={q1: 0, q2: 0, d3: 0, q4: 0}))
輸出如下:
Matrix([[cos(q1 + q2 + q4), -sin(q1 + q2 + q4), 0, 0.45*cos(q1) + 0.3*cos(q1 + q2)], [sin(q1 + q2 + q4), cos(q1 + q2 + q4), 0, 0.45*sin(q1) + 0.3*sin(q1 + q2)], [0, 0, 1, d3], [0, 0, 0, 1]])
Matrix([[1.00000000000000, 0, 0, 0.750000000000000], [0, 1.00000000000000, 0, 0], [0, 0, 1.00000000000000, 0], [0, 0, 0, 1.00000000000000]])
11.反向運動學
反向運動學(IK)本質上與正向運動學相反。在這種情況下,末端執(zhí)行器的姿勢(即位置和方向)是已知的,目標是計算操縱器的關節(jié)角度。但是,IK問題更具挑戰(zhàn)性。正如我們在DH參數(shù)課程中所看到的,相鄰鏈接之間的均勻變換為:
因此,對于具有n個關節(jié)的操縱器,基礎執(zhí)行器和末端執(zhí)行器之間的整體轉換涉及方程式(1)的n倍。顯然,這會導致復雜的,高度非線性的方程,這些方程通常具有零個或多個解。此外,這些數(shù)學解實際上可能違反了現(xiàn)實世界的聯(lián)合限制,因此在數(shù)學上可能的解中進行選擇時需要格外小心。讓我們暫停片刻,思考一下這些不同解決方案的物理含義。
考慮“擬人”(RRR)機械手的情況。名稱來自以下事實:關節(jié)1類似于人的髖關節(jié)(想象在腰部繞垂直軸扭曲),關節(jié)2是“肩膀”,關節(jié)3是“肘”。如果我們只關心末端執(zhí)行器的位置,則有四種可能的方法可以到達操縱器工作空間中的3D點。注意每個旋轉關節(jié)上的陰影。第一行對應于“彎頭”解決方案。第1列對應髖關節(jié)=θ的解,第2列對應髖關節(jié)=θ+π的解。
有兩種不同的解決方法可以解決IK問題。第一種是純數(shù)值方法。本質上,此方法是猜測式的,并且會反復進行,直到錯誤足夠小或花了很長時間使放棄為止。Newton-Raphson算法是一種常見選擇,因為它在概念上很簡單,并且如果初始猜測“足夠接近”該解,則收斂速度為二次方。但是,不能保證算法會收斂或快速收斂到足以滿足應用程序要求的程度,并且只能返回一種解決方案。為了生成各種可能姿勢的解決方案,必須使用不同的初始條件。數(shù)值方法的優(yōu)點在于,相同的算法適用于所有串行操縱器。
另一種且更優(yōu)選的方法是已知的“分析”或“封閉形式”。封閉形式的解決方案是不需要迭代即可求解的特定代數(shù)方程式,它具有兩個主要優(yōu)點:通常,它們比數(shù)值方法求解速度快得多,并且更容易為相應的可能解決方案制定規(guī)則。一。但是,只有某些類型的操縱器可以閉合形式求解。顯而易見的問題是,那么哪種類型的操縱器具有封閉形式的解決方案?研究表明,如果滿足以下兩個條件之一,則串行機械手可以閉合形式求解。
- 三個相鄰的關節(jié)軸在單個點處相交,或者
- 三個相鄰的關節(jié)軸是平行的(從技術上講,這是1的特例,因為平行線在無限遠處相交)
幸運的是,目前工業(yè)上使用的六種DoF串行操縱器中的大多數(shù)將滿足上述條件之一。
機械手中的最后三個關節(jié)通常是滿足條件1的旋轉關節(jié)。這種設計稱為球形腕,而相交的公共點稱為腕中心。這種設計的優(yōu)點在于,它在運動學上解耦了末端執(zhí)行器的位置和方向。從數(shù)學上講,這意味著可以解決十二個問題非線性方程(同時在整個齊次變換矩陣的前三行中為每個項建立一個方程),現(xiàn)在可以獨立解決兩個簡單的問題:首先是腕部中心的笛卡爾坐標,然后是調整末端執(zhí)行器的方向。從物理上講,具有球形腕部的六自由度串行機械手將使用前三個關節(jié)來控制腕部中心的位置,而最后三個關節(jié)將根據(jù)需要對末端執(zhí)行器進行定向。
現(xiàn)在,我們將正式確定帶球形腕的串行機械手的解決方法。考慮此處所示的六自由度機械手,其中關節(jié)4、5和6包括球形手腕。腕部中心(WC)和末端執(zhí)行器(EE)相對于底架“ 0”的位置由下式給出:
0rWC/0^ 0 \bold{r}_{WC / 0}0rWC/0?和0rEE/0^0 \bold{r}_{EE / 0}0rEE/0?。
EE相對于WC的位置由下式給出:0rWC/EE^ 0 \bold{r}_{WC / EE}0rWC/EE? 。
注意,所有三個向量均以基礎坐標系表示,如前導上標“ 0”所示。
步驟1: 完成機械手的DH參數(shù)表。提示:將第4、5和6幀的原點與WC重合。
步驟2: 查找WC相對于基礎框架的位置。回想一下,基礎執(zhí)行器和末端執(zhí)行器之間的整體同類轉換具有以下形式,
例如,如果選擇z4平行于z6,并且從WC指向EE,那么這個位移就是沿著z6的簡單平移。這個位移的大小,記為d,取決于機械手的尺寸,在URDF文件中定義。此外,由于r13、r23和r33定義了EE相對于基坐標系的z軸,WC的笛卡爾坐標為,
步驟3: 求出關節(jié)變量q1 q2 q3,使得WC的坐標為式(3),這一步比較難。解決這一問題的一種方法是反復將連桿投影到平面上,并用三角函數(shù)求解關節(jié)角。不幸的是,沒有一種通用的配方適用于所有的操作器,所以必須進行試驗。
步驟4: 已知前三個關節(jié)變量后,計算03R_{0}^{3}R03?R通過應用齊次變換得到WC。
步驟5: 找到一組與旋轉矩陣對應的歐拉角,
步驟6 **:從一組可能的解決方案中選擇正確的解決方案
12.反向運動學舉例
點zcz_czc?可以認為是球形手腕的手腕中心。假設zcz_czc?的笛卡爾坐標已經(jīng)計算出來。要找到θ1\theta_1θ1?,我們需要將zcz_czc?投影到地平面上。這是一個很簡單的任務,只需要將z坐標設置為0。
從而,
θ1=atan2(yc,xc)\mathbf{\theta_{1} = atan2(y_{c},x_{c})}θ1?=atan2(yc?,xc?)
r2=xc2+yc2\mathbf{r^{2} = x_{c}^{2} + y_{c}^{2}}r2=xc2?+yc2?
s=zc?d1\mathbf{s = z_{c} - d_{1}}s=zc??d1?
最后一個關節(jié)變量d3表示移動關節(jié)的長度。從圖中可以看出,d3是一個直角三角形的斜邊,邊為r和s。解d3,
d3=r2+s2=xc2+yc2+(zc?d1)2\mathbf{d_{3} = \sqrt{r^{2}+s^{2}} =\sqrt{x_{c}^{2}+y_{c}^{2} + (z_{c}-d_{1})^{2}}}d3?=r2+s2?=xc2?+yc2?+(zc??d1?)2?
前三個聯(lián)合變量現(xiàn)在以封閉的形式顯式地描述。
總結
以上是生活随笔為你收集整理的Udacity机器人软件工程师课程笔记(十五)-运动学-正向运动学和反向运动学(其二)-DH参数等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Udacity机器人软件工程师课程笔记(
- 下一篇: Udacity机器人软件工程师课程笔记(