第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 を説明する。