第10章 speedJ と speedL

本章について

これまで説明した moveJ や moveL は、

「目標位置まで移動する」

命令であった。

一方、

speedJ

speedL

は

「一定速度で動かす」

ための命令である。

ジョイスティック操作やビジュアルサーボ、追従制御などで利用される。


10.1 Move命令との違い

moveJ

目標位置

↓

Controllerが軌道生成

↓

停止

speedJ

目標速度

↓

速度維持

↓

停止命令まで動き続ける

ここが最も大きな違いである。


10.2 speedJとは

speedJ は

Joint Speed

である。

6軸それぞれの

速度

を指定する。

例

qd = [
    0.1,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
]

rtde_c.speedJ(qd, 1.0, 2.0)

10.3 引数

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速度

を指定する。

[
vx,
vy,
vz,
wx,
wy,
wz
]

単位

m/s

rad/s

である。


10.7 speedL例

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命令のように

自動停止しない。

終了時は

rtde_c.speedStop()

を呼ぶ。

または

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命令と同じ感覚で

speedJ(...)

だけ実行すると、

停止命令を送るまで動作を続ける場合がある。

リアルタイム制御では必ず停止シーケンスまで設計する。


10.13 ur_ctrl.pyでの設計

一般的なアプリケーションでは

speed_j()

speed_l()

stop_motion()

などの高レベルAPIとして公開すると扱いやすい。

速度指令と停止命令を対にして利用することを推奨する。


まとめ

speedJ と speedL は

「位置」

ではなく

「速度」

を制御するAPIである。

ジョイスティック操作やリアルタイム追従制御では move 系よりも重要になる。

一方、

通常のティーチングや自動運転では moveJ / moveL の方が利用頻度は高い。

次章では servoJ と servoL を説明する。