# 第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 ```python moveJ( q, speed=1.05, acceleration=1.4, asynchronous=False ) ``` --- # 8.6 q 目標関節角度である。 例 ```python q = [ 0.0, -1.57, 1.57, 0.0, 1.57, 0.0, ] ``` 単位は ``` rad ``` Degreeではない。 --- # 8.7 speed 関節速度 単位 ``` rad/s ``` である。 例 ```python speed=0.5 ``` 安全速度ではなく **目標速度** である。 Controllerが制限する場合もある。 --- # 8.8 acceleration 加速度 単位 ``` rad/s² ``` 例 ```python 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は正常終了しない。 そのため ```python 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 を詳しく説明する。