# 第10章 speedJ と speedL ## 本章について これまで説明した moveJ や moveL は、 「目標位置まで移動する」 命令であった。 一方、 speedJ speedL は 「一定速度で動かす」 ための命令である。 ジョイスティック操作やビジュアルサーボ、追従制御などで利用される。 --- # 10.1 Move命令との違い moveJ ``` 目標位置 ↓ Controllerが軌道生成 ↓ 停止 ``` speedJ ``` 目標速度 ↓ 速度維持 ↓ 停止命令まで動き続ける ``` ここが最も大きな違いである。 --- # 10.2 speedJとは speedJ は Joint Speed である。 6軸それぞれの 速度 を指定する。 例 ```python qd = [ 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, ] rtde_c.speedJ(qd, 1.0, 2.0) ``` --- # 10.3 引数 ```python speedJ( qd, acceleration, time ) ``` |引数|内容| |----|----------------| |qd|関節速度| |acceleration|加速度| |time|実行時間| --- # 10.4 qd Joint速度 ``` [ dq1, dq2, dq3, dq4, dq5, dq6 ] ``` 単位 ``` rad/s ``` である。 --- # 10.5 time ``` 2.0 ``` なら 2秒間 その速度を維持する。 0 を指定する実装例もあるが、 継続時間の扱いは ur_rtde のバージョンに依存するため、使用中のバージョンの API を確認すること。 --- # 10.6 speedL speedL は TCP速度 を指定する。 ```python [ vx, vy, vz, wx, wy, wz ] ``` 単位 ``` m/s rad/s ``` である。 --- # 10.7 speedL例 ```python speed = [ 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, ] rtde_c.speedL(speed,0.5,2.0) ``` TCPが X方向へ 0.1 m/s で移動する。 --- # 10.8 speedStop 速度制御は Move命令のように 自動停止しない。 終了時は ```python rtde_c.speedStop() ``` を呼ぶ。 または ```python stopJ() stopL() ``` を使用する。 --- # 10.9 速度制御の特徴 Move命令 ``` 位置制御 ``` Speed命令 ``` 速度制御 ``` である。 位置は保証されない。 --- # 10.10 利用例 ジョイスティック ``` Joystick ↓ 速度 ↓ speedJ ``` 画像追従 ``` Camera ↓ 速度計算 ↓ speedL ``` 力制御 ``` Force ↓ PID ↓ speedL ``` など。 --- # 10.11 Moveとの比較 |項目|moveJ|speedJ| |----|------|-------| |入力|位置|速度| |終了|自動|停止命令| |用途|教示|リアルタイム| |項目|moveL|speedL| |----|------|-------| |入力|Pose|TCP速度| |終了|自動|停止命令| |用途|加工|追従制御| --- # 10.12 よくある失敗 Move命令と同じ感覚で ```python speedJ(...) ``` だけ実行すると、 停止命令を送るまで動作を続ける場合がある。 リアルタイム制御では必ず停止シーケンスまで設計する。 --- # 10.13 ur_ctrl.pyでの設計 一般的なアプリケーションでは ```python speed_j() speed_l() stop_motion() ``` などの高レベルAPIとして公開すると扱いやすい。 速度指令と停止命令を対にして利用することを推奨する。 --- # まとめ speedJ と speedL は 「位置」 ではなく 「速度」 を制御するAPIである。 ジョイスティック操作やリアルタイム追従制御では move 系よりも重要になる。 一方、 通常のティーチングや自動運転では moveJ / moveL の方が利用頻度は高い。 次章では servoJ と servoL を説明する。