UR機器人之一:座標系及位姿表示方法

一、UR機器人座標系

默認情況下UR機器人的基座標系和TCP如下圖所示:
在這裏插入圖片描述
注意這裏的TCP位置和座標系都是在默認TCP配置的情況下,默認的TCP配置如下圖所示:
在這裏插入圖片描述
如果用戶想要自己設置TCP的位置和座標系就可以在這個基礎上進行配置,上圖中的X,Y,Z,RX,RY,RZ表示用戶自定義TCP與機器人默認TCP之間的關係(注意不是相對於基座標系的關係)。X,Y,Z表示位置關係,RX,RY,RZ是使用的旋轉矢量法表示的姿態關係,旋轉矢量法見下一節。
當UR機器人回零後,機器人默認的TCP相對於基座標系的位姿如下圖:
在這裏插入圖片描述
注意這裏是實際值,與理論值相比有一些誤差,比如理論值X=0,而實際可能不是0。這裏的姿態描述方式使用的是旋轉矢量法,見下一節。

二、UR機器人Pose的表示方式

UR機器人的Pose表示的是TCP座標系相對於基座標系的位置和姿態。一個座標系相對於另一個座標系的姿態的表示方法有很多種,比如:X-Y-Z固定角,Z-Y-X歐拉角,RPY角,四元數等。而UR機器人裏面使用的是旋轉矢量法。
在介紹旋轉矢量法之前先看一下等效軸角座標系表示法。在《機器人學導論》中對等效軸角法有詳細講解,如下圖所示,這種方法是用一個單位向量
K^=[kxkykz] \hat{K}=\begin{bmatrix} kx & ky & kz \end{bmatrix}
和一個轉動角度θ來表示兩個座標系之間的旋轉關係。具體介紹如下圖所示:
在這裏插入圖片描述
而旋轉矢量法用一個旋轉矢量:
R=[RxRyRz] R=\begin{bmatrix} Rx & Ry & Rz \end{bmatrix}
來表示兩個座標系之間的旋轉關係,其中旋轉矢量法與等效軸角座標系之間的關係是:Rx=θkx,Ry=θky,Rz=θkz。
由旋轉矢量求旋轉矩陣的方法可以按照如下公式:
在這裏插入圖片描述
使用上述公式之前需要先求出θ和kx,ky,kz,求法如下:
θ=Rx2+Ry2+Rz2 \theta =\sqrt{Rx^{2}+Ry^{2}+Rz^{2}}
kx=Rx/θ,ky=Ry/θ,kz=Rz/θ kx=Rx/\theta ,ky=Ry/\theta ,kz=Rz/\theta
可以看出如果θ=0°或180°時,旋轉軸根本無法確定,上式也將無解。這也是旋轉矢量法的一個明顯缺點。
反過來,如果已知旋轉矩陣,可以通過如下公式求解等效軸角表示法,進而求出旋轉矢量表示法:
在這裏插入圖片描述
注意2-82中的r33應改爲r23,這是書中的一處錯誤。
在這裏插入圖片描述
由以上敘述可以知道,對於同一姿態,旋轉矩陣的表示不唯一。所以在UR機器人中,通過面板觀察到的TCP Pose可能與通過腳本命令get_actual_tcp_pose()所得到的不一樣,這是正常現象。如果不相信可以將它們都轉換成RPY角就會發現,它們表示的是同一個姿態。特別是在零點位置時比較明顯,如下面兩個圖所示,可以看出在面板上看到的Rx,Ry,Rz與通過腳本函數get_actual_tcp_pose()獲得的TCP姿態不一樣,但其實它們表示的是同種TCP姿態。
在這裏插入圖片描述
在這裏插入圖片描述
另外,UR提供了一個腳本函數rotvec2rpy(rotation_vector),可以將旋轉矢量表示的姿態轉換成rpy角表示的姿態,但是這裏傳遞的參數是一個list:[Rx,Ry,Rz],而怎麼把pose裏的RX,RY,RZ分離出來傳遞個這個函數呢?很簡單:
UR裏面的pose是一種數據類型,假設pose=p[px,py,pz,Rx,Ry,Rz],那麼list=[pose[3],pose[4],pose[5]],這樣就可以把pose裏表示姿態的[Rx,Ry,Rz]提取出來給到一個list裏面。
還有一個pose_trans(p_from,p_from_to)函數,p_from表示座標系B相對於A的pose,p_from_to表示座標系C相對於B的pose,函數的返回值表示座標系C相對於A的pose。pose與變換矩陣有一一對應的關係,用矩陣的方式理解這個函數就是:
TCA=TBATCB T_{C}^{A}=T_{B}^{A}T_{C}^{B}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章