第12章 Force Mode
本章について
通常のロボット制御は
位置
を制御する。
一方、Force Mode は
力
を制御する。
例えば
・一定荷重で押す
・部品を押し当てる
・面に沿って滑らせる
・バネのような動きをする
などを実現できる。
12.1 位置制御と力制御
通常の moveJ や moveL は
位置制御
である。
例えば
100 mm
まで移動しようとする。
途中に障害物があっても
可能な限り目標位置へ行こうとする。
Force Mode は
10 N
で押し続ける。
位置は保証されない。
代わりに
力
が一定になる。
12.2 Force Mode の用途
代表例
・コネクタ挿入
・部品組立
・研磨
・バリ取り
・ボタン押し
・ばね測定
・荷重試験
12.3 基本構成
Force Mode は
開始
↓
Force Mode
↓
一定周期で制御
↓
Force Mode終了
という流れになる。
moveJ のような
一回だけ送る命令
ではない。
12.4 基本API
例
rtde_c.forceMode(
task_frame,
selection_vector,
wrench,
force_type,
limits,
)
Force Mode 中は Controller が内部で力制御を行う。
12.5 task_frame
力制御を行う座標系である。
例えば
Base座標
Tool座標
Feature座標
などを指定できる。
通常は
TCP座標
を利用することが多い。
12.6 selection_vector
どの自由度を
力制御
するか指定する。
[
1,
1,
1,
0,
0,
0
]
なら
XYZ
のみ力制御する。
回転方向は位置制御になる。
例
[
0,
0,
1,
0,
0,
0
]
なら
Z方向だけ押し付ける。
12.7 wrench
目標荷重
[
Fx,
Fy,
Fz,
Mx,
My,
Mz
]
単位
N
Nm
である。
例えば
Fz=10 N
なら
下方向へ10 N
押し付ける。
12.8 force_type
Controller の制御方式を指定する。
通常は
標準設定
を利用すれば十分である。
特殊な用途以外で変更することは少ない。
12.9 limits
許容変位
である。
例えば
10 mm
まで押しても
10 N
にならなければ
それ以上は動かない。
安全機能でもある。
12.10 Force Mode 中の動作
Controller 内部では
現在荷重
↓
目標荷重との差
↓
PID
↓
Joint補正
↓
Motor
という制御が毎周期行われる。
利用者は
毎回荷重を計算する必要はない。
12.11 荷重取得
Force Mode と組み合わせるAPI
rtde_r.getActualTCPForce()
戻り値
Fx
Fy
Fz
Mx
My
Mz
現在荷重を確認できる。
12.12 終了
Force Mode は
forceModeStop()
で終了する。
終了後は
通常の
moveJ
moveL
へ戻る。
12.13 よくある用途
コネクタ挿入
moveJ
↓
moveL
↓
ForceMode
↓
10 N
↓
挿入
↓
終了
ボタン押し
moveL
↓
ForceMode
↓
5 N
↓
0.5秒保持
↓
終了
面追従
ForceMode
↓
一定荷重
↓
XY方向へMove
研磨などで利用される。
12.14 注意事項
Force Mode は
・TCP設定
・Payload設定
が正しくないと
期待した荷重にならない。
実機では
Payload のキャリブレーションが重要である。
12.15 moveJとの違い
moveJ
位置
↓
停止
Force Mode
荷重
↓
一定保持
目的が全く異なる。
12.16 ur_ctrl.pyでの設計
高レベルAPIでは
start_force_mode()
stop_force_mode()
のように
開始・終了を分けると扱いやすい。
また
get_tcp_force()
を組み合わせることで、
力監視を容易に実装できる。
まとめ
Force Mode は
位置ではなく
荷重
を制御するための機能である。
通常の Move 系 API とは目的が異なり、
組立
押し付け
研磨
接触作業
などで利用される。
Force Mode を利用する際は
・TCP設定
・Payload設定
・ForceModeStop()
を適切に設定することが重要である。
次章では Freedrive Mode を説明する。