第5章 RTDEReceiveInterface
本章について
RTDEControlInterface が「ロボットを動かす」クラスであるのに対し、RTDEReceiveInterface は「ロボットの状態を取得する」クラスである。
実際のアプリケーションでは、
・現在位置取得 ・動作完了判定 ・エラー監視 ・安全状態監視
など、Move命令と同じくらい利用頻度が高い。
本章では、SDU Robotics ur_rtde の RTDEReceiveInterface の主要 API と利用方法について説明する。
5.1 Receive Interfaceとは
RTDEReceiveInterface は SDU Robotics ur_rtde が提供する状態取得 I/F であり、Universal Robots 公式 RTDE の output data を利用して Controller の状態を取得する。
UR Controller
│
RTDE Output
│
RTDEReceiveInterface
│
Python
Move命令は一切持たない。
5.2 インスタンス生成
from rtde_receive import RTDEReceiveInterface
ROBOT_IP = "192.168.0.10"
rtde_r = RTDEReceiveInterface(ROBOT_IP)
通常は RTDEControlInterface と同時に生成する。
rtde_c = RTDEControlInterface(IP)
rtde_r = RTDEReceiveInterface(IP)
5.3 関節角度取得
最も利用するAPIである。
q = rtde_r.getActualQ()
戻り値
[
q1,
q2,
q3,
q4,
q5,
q6
]
単位
rad
Joint Degreeではない。
5.4 関節速度
dq = rtde_r.getActualQd()
単位
rad/s
停止判定にも利用できる。
5.5 TCP位置取得
pose = rtde_r.getActualTCPPose()
戻り値
[
x,
y,
z,
rx,
ry,
rz
]
単位
m
rad
である。
mmではない。
5.6 TCP速度
speed = rtde_r.getActualTCPSpeed()
TCP速度ベクトルを取得する。
停止判定に利用できる。
5.7 TCP Force
Force Sensor 搭載機では
force = rtde_r.getActualTCPForce()
を利用できる。
戻り値
Fx
Fy
Fz
Mx
My
Mz
Force Modeで頻繁に利用される。
5.8 Robot Mode
mode = rtde_r.getRobotMode()
Robot Controller の状態を取得する。
代表例
・Disconnected
・Booting
・Power Off
・Idle
・Running
など。
運転開始前の確認に利用する。
5.9 Safety Mode
mode = rtde_r.getSafetyMode()
安全状態を取得する。
例
・Normal
・Protective Stop
・Recovery
・Emergency Stop
など。
5.10 Runtime State
state = rtde_r.getRuntimeState()
現在のプログラム状態を取得する。
例えば
Stopped
Running
Paused
などを判定できる。
Dashboard と組み合わせることが多い。
5.11 Digital Input
rtde_r.getDigitalInState(pin)
入力状態を取得する。
戻り値
True
False
5.12 Digital Output
rtde_r.getDigitalOutState(pin)
出力状態を取得する。
実際にONになっているか確認できる。
5.13 Joint Temperature
temp = rtde_r.getJointTemperatures()
各関節温度を取得する。
長時間運転時の監視に利用される。
5.14 動作完了判定
Move命令だけでは
「到着したか」
は分からない。
例えば
target = [...]
while True:
q = rtde_r.getActualQ()
if max(abs(a-b) for a,b in zip(q,target)) < 1e-3:
break
time.sleep(0.01)
のように現在位置との差で判定する。
5.15 停止判定
速度でも判定できる。
dq = rtde_r.getActualQd()
すべての速度が十分小さくなれば停止していると判断できる。
5.16 wait_move() の考え方
ur_ctrl.py の
wait_move()
は内部で
現在位置
↓
目標位置との差
↓
許容誤差以内
↓
終了
または
速度
↓
ほぼ0
↓
終了
などを利用して判定する。
MoveJ の戻り値だけでは十分ではない。
5.17 監視ループ
典型例
while True:
pose = rtde_r.getActualTCPPose()
mode = rtde_r.getRobotMode()
safety = rtde_r.getSafetyMode()
print(pose)
if safety != NORMAL:
break
time.sleep(0.02)
約50Hz程度で十分なことが多い。
5.18 RTDEReceive の特徴
RTDEReceive は
・高速
・読み取り専用
・複数APIが豊富
という特徴を持つ。
一方、
Move命令は持たない。
Move命令は RTDEControl を使用する。
まとめ
RTDEReceiveInterface はロボット状態監視専用クラスである。
本ライブラリでは
・現在位置取得
・速度取得
・Robot Mode
・Safety Mode
・Runtime State
を利用して、
wait_move()
エラー監視
状態監視
を実装している。
次章では RTDEIOInterface を説明する。