ロボットアームを使ってみよう3

ロボットアームを動かしてみます、xArmが提供しているSDKを使います。

ロボットの姿勢を指定するには、各ジョイントの回転量を指定する方法とTCP(Tool Center Point)の位置と向きを指定する方法があります。どちらを利用するにせよ、ロボットの座標系を把握しておく必要があります。

https://github.com/xArm-Developer/xarm_rosにロボットの座標系を表した図があります。

画像1
図1

この図の姿勢はxArmの初期位置になっていて、サンプルで提供されている0003-api_get.py を実行するとその情報を取得できます。

$ python xArm-Python-SDK\example\wrapper\common>python 0003-api_get.py

SDK_VERSION: 1.8.4
FIRMWARE_VERSION: v1.8.3, PROTOCOL: V1, DETAIL: 7,7,XS1200,XX0000,v1.8.3
==================================================
version: (0, '7,7,XS1200,XX0000,v1.8.3')
state: (0, 0)
cmdnum: (0, 0)
err_warn_code: (0, [0, 0])
position(°): (0, [206.0, -0.0, 120.5, 180.00002, -0.0, 0.0])
position(radian): (0, [206.0, -0.0, 120.5, 3.141593, -0.0, 0.0])
angles(°): (0, [0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0])
angles(radian): (0, [0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0])
angles(°)(servo_id=1): (0, 0.0)
angles(radian)(servo_id=1): (0, 0.0)

全ての関節の回転量は0、先端の位置は206.0, -0.0, 120.5, 180.00002, 0.0, -0.0となりました。これは図1のbase座標系で表されるxyz座標とroll pitch yawの値です。
この場合、前方向に206mm、上に120.5mmの所に真下を向いてTCPの中心がある事になります。

この値はTCPオフセットの値で変化します。この例ではロボットに何も持たせていない状態の値です。

今後グリッパーでオブジェクトをピックしていきたいので、xArmStudioで次のように変更します。

TCPOffsetをxArmGripper(Closed)に変更

TCP PayloadをxArmGripperに変更

ToolsをxArmGripperに変更すればOKです。

動きをプログラムします。
1.姿勢を初期位置に戻す
2.グリッパーの幅を80mm広げる
3.前に400mm、上方に200mmの位置にグリッパーの先端を動かす
4.そのまま0mmの位置にグリッパーの先端を下ろす
5.グリッパーの幅を0にする
この一連の流れをPytnonで書くとにするとこうなります。

from xarm.wrapper import XArmAPI

#初期設定
arm = XArmAPI('192.168.1.213')
arm.motion_enable(enable=True)
arm.set_gripper_enable(enable=True)
arm.set_mode(0)
arm.set_state(state=0)

#動きを指定
arm.reset(wait=True)
arm.set_gripper_position(800, wait=True)
arm.set_position(x=400, y=0, z=200, roll=180, pitch=0, yaw=0, speed=100, wait=True)
arm.set_position(x=400, y=0, z=0, roll=180, pitch=0, yaw=0, speed=100, wait=True)
arm.set_gripper_position(0, wait=True)

#切断
arm.disconnect()

これだけでいろいろな動きを指定する事が出来ます。
次回はインタラクティブに動きを指定出来るようにしてみます。