第4章 RTDEControlInterface

本章について

本章では、SDU Robotics ur_rtde の RTDEControlInterface が提供するモーション制御 API について説明する。

UR を Python から制御する場合、最も頻繁に利用するクラスである。

本章を読み終えると、

・moveJ ・moveL ・moveP ・speedJ ・speedL ・servoJ ・servoL ・停止命令

の違いを理解できる。


4.1 RTDEControlInterface とは

RTDEControlInterface は、SDU Robotics ur_rtde が提供する PC 側モーション制御 I/F である。Universal Robots 純正 RTDE protocol の motion API ではない。

例えば

rtde_c.moveJ(...)

を呼び出すと、PC 側 RTDEControlInterface は Universal Robots 公式 RTDE の register を利用して command と parameter を controller に渡す。Robot 側では SDU の control URScript がその値を読み取り、対応する movej などの URScript motion command を実行する。URControl がその command を実行して実際のロボット制御へ接続する。

したがって、RTDEControlInterface から Servo Controller を公式 RTDE で直接呼び出しているわけではない。

状態取得は RTDEReceiveInterface が担当する。


4.2 Move命令の分類

RTDEControl が提供する代表的な命令は次のように分類できる。

種類

API

用途

関節補間

moveJ

最も一般的

直線補間

moveL

加工・計測

円弧補間

moveC

円軌道

複合補間

moveP

Blendを利用した軌道

速度制御

speedJ

関節速度

速度制御

speedL

TCP速度

サーボ

servoJ

リアルタイム制御

サーボ

servoL

リアルタイム制御

まずは moveJ と moveL を理解することが重要である。


4.3 moveJ

moveJ は

Joint Move

である。

ロボットは

各関節角度

を目標として動く。

開始姿勢

↓

各関節が同時に回転

↓

目標姿勢

途中のTCP軌道は保証されない。


引数

moveJ(
    q,
    speed,
    acceleration,
    asynchronous
)

例

q = [
    0.0,
    -1.57,
    1.57,
    0.0,
    1.57,
    0.0,
]

rtde_c.moveJ(q)

利点

・高速

・逆運動学不要

・最も安定

・教示点移動向き


欠点

TCPは曲線軌道になる。

加工用途には向かない。


4.4 moveL

moveL は

Linear Move

である。

TCPが

一直線

に移動する。

A

────────────

B

TCP軌跡を保証する。


用途

・加工

・塗布

・レーザー

・測定

・ピックアンドプレース


引数

pose =

[x,y,z,rx,ry,rz]
rtde_c.moveL(pose)

姿勢は

Rodrigues Vector

で表現する。


4.5 moveJとmoveLの違い

moveJ

TCP

○

╲

╱

○


moveL

TCP

○────────○

moveJ は関節補間

moveL はTCP補間

である。


4.6 moveP

moveP は

Process Move

である。

複数点を

Blend

しながら滑らかに接続する。

○────○────○

↓

滑らかな軌道

停止時間を減らしたい場合に利用する。


4.7 加速度

moveJ

moveL

ともに

acceleration

を指定できる。

単位は

rad/s²

または

m/s²

APIによって異なる。


4.8 速度

speed

は

目標速度

である。

大きく設定しても

安全制限

Payload

Joint Limit

などにより自動で制限される。


4.9 非同期実行

moveJ(..., asynchronous=True)

とすると、

関数は

移動終了を待たず

すぐ戻る。

moveJ()

↓

すぐreturn

↓

ロボットは動き続ける

同期実行では

moveJ()

↓

移動終了

↓

return

となる。


4.10 停止命令

代表的な停止命令

stopJ()

関節停止

stopL()

TCP停止

急停止ではなく、

減速停止である。

Emergency Stopとは異なる。


4.11 戻り値

moveJ

moveL

などは

通常

True

または

False

を返す。

Falseは

・通信失敗

・制御失敗

などを意味する。

ただし

Protective Stop

などでは

例外が発生する場合もある。

そのため

戻り値だけではなく

例外処理も必要である。


4.12 推奨パターン

try:

    ok = rtde_c.moveJ(q)

    if not ok:
        print("Move failed")

except RuntimeError as e:

    print(e)

この形を推奨する。


4.13 ur_ctrl.pyでの利用

本ライブラリでは

move()

↓

moveJ()

または

moveL()

へ自動的に振り分ける。

利用者は

RTDEControlInterface を直接意識する必要はない。


まとめ

RTDEControlInterface は

ロボットへ動作命令を送るクラスである。

最も重要なのは

・moveJ

・moveL

であり、

まずこの二つを理解すれば、

ほとんどのアプリケーションを作成できる。

次章では RTDEReceiveInterface を説明する。