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