背景
我們最近搞機械臂+機器視覺實現機械臂的引導、定位和抓取操作。
我們的機械臂是ABB的,ABB的機械臂默認采用四元數的方式表示空間坐標,但是這個東西非常不便於理解,其他廠家的機械臂一般使用歐拉角表示空間位置和姿態。
關於如何將四元數與歐拉角之間進行轉換,我們調研了很長時間,現在總結出一個方法,供大家參考。
歐拉角:
使用到的庫
https://github.com/cgohlke/transformations
使用方式
import transformations import numpy
def euler(roll, pitch, yaw, axes='rxyz'): yaw = float(yaw) / 180 * numpy.pi pitch = float(pitch) / 180 * numpy.pi roll = float(roll) / 180 * numpy.pi return list(transformations.quaternion_from_euler(roll, pitch, yaw, axes=axes))
roll = 180
pitch = 0
raw = 0
quaternion = euler(roll, pitch, raw)
重要說明:
axes表示機械臂運動時的繞軸順序,默認xyz沒有問題,最關鍵的在於前面的
r:表示基於夾爪(自身)的坐標系進行運動
s:表示基於機械臂的基坐標的坐標系進行運動。
絕大部分情況,推薦使用r模式,更容易讓人理解,是相對於夾爪的位置進行的運動。
另外,這個庫的quaternion_from_euler函數,傳入角度不是我們認知的0-360度,而是根據pi進行轉換,pi表示180度。