天天看點

【現代機器人學】基于指數積的機械臂正運動學

前言:對于一個開鍊機器人而言,末端執行器的位置和姿态可以通過關節角唯一确定出來。正運動學的問題就是當給定各關節位置,求出附着在末端執行器上的物體坐标系的位姿。

描述正運動學的方法主要是DH參數法,它是在每個關節上建立坐标系,通過坐标系的平移旋轉,即矩陣的乘積來求得相對于基坐标系的末端位姿。

指數積(Product of Exponential,POE)的方法近些年才開始流行,成為新穎的模組化方法。POE公式直接來自剛體運動的指數坐标表示,它無須建立連杆坐标系,隻有基坐标系和末端坐标系是必需的,且它們可以任意選擇。

注:以下專業名詞的含義及相關公式可參考我的另一篇部落格:

現代機器人學名詞概念

一.指數積公式

1.1 第一種表達形式:相對基坐标系的螺旋軸

空間剛體位移Chasles-Mozzi定理:任何剛體運動都可通過繞空間某一固定螺旋軸 S S S的運動來實作。

隐藏在POE公式背後的關鍵是:将每個關節的螺旋運動施加給後面的杆。為應用POE公式,首先需選擇基坐标系 { s } \left\{ s \right\} {s}和末端坐标系 { b } \left\{ b \right\} {b},并将機器人置于初始位置(或零位,即所有關節變量初值為0),每個關節正向位移的方向指定。令 M ∈ S E ( 3 ) M\in SE\left( 3 \right) M∈SE(3)表示末端坐标系相對于基坐标系的初始位形(機器人處于初始位置時)。

假定關節n對應的關節變量為 θ n \theta _n θn​,末端坐标系M的位移可寫成 T ( θ ) = e [ S n ] θ n M T\left( \theta \right) =e^{\left[ S_n \right] \theta _n}M T(θ)=e[Sn​]θn​M

式中, T ∈ S E ( 3 ) T\in SE\left( 3 \right) T∈SE(3)為末端的新位形, S n = ( ω n , ν n ) S_n=\left( \omega _n,\nu _n \right) Sn​=(ωn​,νn​)為表示在基坐标系中的關節n的旋量坐标, w n ∈ R 3 w_n\in R^3 wn​∈R3是沿關節軸正向的機關向量, v n = − w n × q n v_n=-w_n\times q_n vn​=−wn​×qn​, q n q_n qn​為關節軸上任一點,坐标值在基坐标系中進行度量。

若我們假設關節n-1也發生變化,則在以上的位移上再乘以矩陣指數 e [ S n − 1 ] θ n − 1 e^{\left[ S_{n-1} \right] \theta _{n-1}} e[Sn−1​]θn−1​,按此推理,當所有的關節變量 ( θ 1 , ⋯   , θ n ) \left( \theta _1,\cdots ,\theta _n \right) (θ1​,⋯,θn​)都發生變化時,應滿足

T ( θ ) = e [ S 1 ] θ 1 ⋯ e [ S n − 1 ] θ n − 1 e [ S n ] θ n M T\left( \theta \right) =e^{\left[ S_1 \right] \theta _1}\cdots e^{\left[ S_{n-1} \right] \theta _{n-1}}e^{\left[ S_n \right] \theta _n}M T(θ)=e[S1​]θ1​⋯e[Sn−1​]θn−1​e[Sn​]θn​M

上述方程就是對于n自由度開鍊機器人正向機器人正向運動學的指數積公式。其中的所有螺旋軸都是基于基坐标系的表示。

計算步驟:

一.當機器人處于初始位置時,末端位形 M ∈ S E ( 3 ) M\in SE\left( 3 \right) M∈SE(3);

二.當機器人處于初始位置時,相對基坐标系的螺旋軸 S 1 , ⋯ S n S_1,\cdots S_n S1​,⋯Sn​,對應各個關節的螺旋運動;

三.關節變量 ( θ 1 , ⋯   , θ n ) \left( \theta _1,\cdots ,\theta _n \right) (θ1​,⋯,θn​)。

1.2 第二種表達形式:相對末端坐标系的螺旋軸

T ( θ ) = M e [ β 1 ] θ 1 ⋯ e [ β n − 1 ] θ n − 1 e [ β n ] θ n T\left( \theta \right) =Me^{\left[ \beta _1 \right] \theta _1}\cdots e^{\left[ \beta _{n-1} \right] \theta _{n-1}}e^{\left[ \beta _n \right] \theta _n} T(θ)=Me[β1​]θ1​⋯e[βn−1​]θn−1​e[βn​]θn​

上式是指數積公式的另一種表達形式,其中的關節角表示成機器人處于零位時各螺旋軸相對于末端坐标系(物體坐标系)的旋量坐标 β i \beta _i βi​ ,它也被稱為指數積公式的物體坐标系表示形式。其中 [ β i ] = [ A d M − 1 ] S i , i = 1 , ⋯   , n \left[ \beta _i \right] =\left[ Ad_{M^{-1}} \right] S_i,i=1,\cdots ,n [βi​]=[AdM−1​]Si​,i=1,⋯,n

算例:對于6R開鍊機器人的正向運動學

【現代機器人學】基于指數積的機械臂正運動學

第一步:當機器人位于初始位形時,建立基坐标系 { s } \left\{ s \right\} {s}和末端坐标系 { b } \left\{ b \right\} {b},旋轉軸作為 z z z軸,坐标系的建立滿足右手定則,此時可以得到末端位姿矩陣 M = [ R P 0 1 ] ∈ S E ( 3 ) M=\left[ \begin{matrix} R& P\\ 0& 1\\ \end{matrix} \right] \in SE\left( 3 \right) M=[R0​P1​]∈SE(3)式中,R為末端坐标系相對于基坐标系的姿态變化,P為末端坐标系原點在基坐标系中的位移表示。

末端坐标系姿态任意選擇,這裡使末端坐标系姿态和 M M M相同,即 M = [ 1 0 0 − 0.0261 0 1 0 − 1.1863 0 0 1 − 0.6540 0 0 0 1 ] M=\left[ \begin{matrix} 1& 0& 0& -0.0261\\ 0& 1& 0& -1.1863\\ 0& 0& 1& -0.6540\\ 0& 0& 0& 1\\ \end{matrix} \right] M=⎣⎢⎢⎡​1000​0100​0010​−0.0261−1.1863−0.65401​⎦⎥⎥⎤​

第二步:建立每個關節的螺旋軸,同樣的,旋轉軸作為 z z z軸,此時可寫出每個螺旋軸相對于基坐标系的機關向量 w ^ \hat{w} w^。

這裡選擇 [ w 1 ⋯ w 6 ] = [ 0 0 0 0 − 1 − 1 1 0 0 − 1 0 0 0 1 0 0 0 1 ] \left[ w_1\cdots w_6 \right] =\left[ \begin{matrix} 0& 0& 0\\ 0& -1& -1\\ 1& 0& 0\\ \end{matrix}\begin{matrix} -1& 0& 0\\ 0& 1& 0\\ 0& 0& 1\\ \end{matrix} \right] [w1​⋯w6​]=⎣⎡​001​0−10​0−10​−100​010​001​⎦⎤​

第三步:選擇六個關節軸上的任一點 q 1 ⋯ q 6 q_1\cdots q_6 q1​⋯q6​,為友善計算,我們将這些點選為螺旋軸與連杆的重合點,即将六個關節上的點分别作為 q 1 ⋯ q 6 q_1\cdots q_6 q1​⋯q6​。

這裡選擇 [ q 1 ⋯ q 6 ] = [ 0 − 0.1573 − 0.2037 0 0.0653 − 0.5483 0 0 − 0.0165    − 0.1518 − 0.1081 − 0.0261 − 0.7154 − 0.6714 − 1.1863 − 0.3140 − 0.6685 − 0.6540 ] \left[ q_1\cdots q_6 \right] =\left[ \begin{matrix} 0& -0.1573& -0.2037\\ 0& 0.0653& -0.5483\\ 0& 0& -0.0165\\ \end{matrix}\,\, \begin{matrix} -0.1518& -0.1081& -0.0261\\ -0.7154& -0.6714& -1.1863\\ -0.3140& -0.6685& -0.6540\\ \end{matrix} \right] [q1​⋯q6​]=⎣⎡​000​−0.15730.06530​−0.2037−0.5483−0.0165​−0.1518−0.7154−0.3140​−0.1081−0.6714−0.6685​−0.0261−1.1863−0.6540​⎦⎤​

再根據公式 v n = − w n × q n v_n=-w_n\times q_n vn​=−wn​×qn​,即可計算得到六個線速度 v n v_n vn​。

第四步:有了以上的資料,再根據指數坐标公式運算得到矩陣指數 e [ S ] θ e^{\left[ S \right] \theta} e[S]θ,詳細公式可參考我的文前的連結文章。到此即可得到指數積公式 T ( θ ) = e [ S 1 ] θ 1 ⋯ e [ S n − 1 ] θ n − 1 e [ S n ] θ n M T\left( \theta \right) =e^{\left[ S_1 \right] \theta _1}\cdots e^{\left[ S_{n-1} \right] \theta _{n-1}}e^{\left[ S_n \right] \theta _n}M T(θ)=e[S1​]θ1​⋯e[Sn−1​]θn−1​e[Sn​]θn​M

【現代機器人學】基于指數積的機械臂正運動學

最後說明一點:這裡的關節角是指機器人從初始位置實際轉動的角度,而不是機器人此刻的角度,因為對于一些工業機器人而言有的初始關節角是90°。

個人對POE指數積模組化與DH參數法的了解:POE指數積模組化需要紮實的數學幾何知識,它的模組化過程相比DH參數法要簡單一些,因為它不必考慮首尾之間的坐标系應該怎麼建立,而是确定螺旋軸方向和确定螺旋軸上的一點位置即可。它們之間的聯系是指數積方法在确定螺旋軸方向的同時隐含了對連杆轉角的确定,确定螺旋軸上的一點時隐含了對連杆長度的确定,總的來說,大同小異,但指數積方法更新穎,更靈活。

繼續閱讀