第8章 moveJ
本章について
本章で扱う moveJ() は SDU Robotics RTDEControlInterface が提供する PC 側モーション API であり、robot 側では control URScript を介して URScript の movej に接続される。関節移動としては最も基本的なモーション API の一つである。
ティーチングポイント間の移動や待避位置への移動など、ほぼすべてのプログラムで使用される。
本章では
・moveJ のアルゴリズム ・パラメータ ・内部動作 ・速度 ・加速度 ・Blend ・戻り値 ・注意事項
について説明する。
8.1 moveJ とは
本章の moveJ() は SDU Robotics ur_rtde の API である。Universal Robots 公式 RTDE protocol に moveJ command が定義されているという意味ではない。
moveJ の J は
Joint
を意味する。
つまり
関節角度を目標値として移動する命令
である。
TCPの位置ではなく、
6軸それぞれの角度
q1
q2
q3
q4
q5
q6
を目標として動く。
8.2 動作イメージ
例えば
開始
Joint
0°
30°
10°
...
↓
終了
Joint
90°
10°
-30°
...
のように、
各軸が同時に動き、
最終的に目標角度へ到達する。
途中のTCP軌跡は保証されない。
8.3 TCPはどう動くか
TCPは
開始
○
↓
)
↓
○
終了
のような
曲線
になる。
したがって
加工
測定
レーザー
などには向かない。
8.4 利用用途
moveJ が向く用途
・ホームポジション
・退避
・教示点移動
・姿勢変更
・高速移動
・障害物の少ない空間
8.5 引数
代表的なAPI
moveJ(
q,
speed=1.05,
acceleration=1.4,
asynchronous=False
)
8.6 q
目標関節角度である。
例
q = [
0.0,
-1.57,
1.57,
0.0,
1.57,
0.0,
]
単位は
rad
Degreeではない。
8.7 speed
関節速度
単位
rad/s
である。
例
speed=0.5
安全速度ではなく
目標速度
である。
Controllerが制限する場合もある。
8.8 acceleration
加速度
単位
rad/s²
例
acceleration=1.2
加速度が大きすぎると
振動
衝撃
が増える。
8.9 asynchronous
False
↓
同期
True
↓
非同期
同期
moveJ()
↓
移動終了
↓
return
非同期
moveJ()
↓
return
↓
ロボット移動
8.10 戻り値
通常
True
成功
False
失敗
を返す。
ただし
通信断
Protective Stop
などでは
RuntimeError
になる場合がある。
8.11 Blend Radius
moveJでは
Blend Radius
を指定できる。
○
↓
停止
↓
○
ではなく
○
╲
╱
○
のように
滑らかにつなぐ。
停止時間が減る。
8.12 到達判定
moveJ終了は
APIが戻ったことではなく
現在位置との差
で判定する方が安全である。
例
現在角度
↓
目標角度との差
↓
1e-3 rad以下
↓
終了
8.13 Joint Limit
moveJは
Joint Limit
を超える姿勢へは移動できない。
Inverse Kinematics以前に
関節範囲
が確認される。
8.14 衝突判定
途中で
・Protective Stop
・Safety Stop
・Emergency Stop
が発生すると
moveJは正常終了しない。
そのため
try:
ok = rtde_c.moveJ(q)
except RuntimeError:
...
とする。
8.15 moveJの長所
・高速
・安定
・逆運動学不要
・CPU負荷が低い
・教示点に適する
8.16 moveJの短所
・TCP軌跡を保証しない
・加工には向かない
・障害物を避けない
・途中姿勢を指定できない
8.17 moveLとの比較
項目 |
moveJ |
moveL |
|---|---|---|
補間 |
Joint |
TCP |
速度 |
速い |
遅い |
TCP軌跡 |
保証しない |
直線 |
加工 |
× |
○ |
退避 |
○ |
△ |
ティーチング |
◎ |
○ |
8.18 推奨用途
基本的には
Home
↓
moveJ
↓
対象近く
↓
moveJ
↓
加工開始位置
↓
moveL
↓
加工
↓
moveL
↓
退避
↓
moveJ
という組み合わせになる。
多くの産業用ロボットプログラムもこの構成を採用している。
まとめ
moveJはURで最も基本となるモーション命令である。
関節空間を補間するため高速かつ安定であり、
退避や姿勢変更には最適である。
一方、
TCP軌跡は保証されないため、
加工や計測では moveL を使用する。
次章では moveL を詳しく説明する。