制御ガイド
統合と開発
このページでは、Wuji Hand 2 を正しく安全に制御する方法として、単位の規約、MIT 制御モード、関節一覧表、パラメーターの安全上の上限、安全な制御ループについて説明します。インターフェースの定義と API の全容については、SDK リファレンスを参照してください。
単位と記号
| 物理量 | 単位 | 取得元と注記 |
|---|---|---|
position | rad(関節側) | joint_states ストリーム。関節角度の取得に推奨される唯一の経路です |
velocity | rad/s(関節側) | joint_states ストリーム |
effort | A(電流。N·m ではありません) | joint_states のフィードバックと joint_command のフィードフォワードは同じ単位です |
joint_diagnostics ストリームには関節角度は含まれません。関節角度は必ず joint_states から読み取ってください。
MIT 制御モード
デバイスはデフォルトで MIT 力・位置ハイブリッド制御で動作し、制御モードを Python API から切り替えることはできません。
τ = Kp · (q_d − q) + Kd · (dq_d − dq) + τ_ff q_d/dq_d/τ_ffはjoint_commandのposition/velocity/effortフィールドから取得され、1 回のパブリッシュにつきちょうど 20 個のJointCommandエントリーが含まれますKp/Kdはmit_paramsで、トルク上限はeffort_limitで読み書きします。書き込みでは、NaN、Inf、負の値、デバイスの上限を超える値は拒否されます。書き込みが拒否された場合、有効な値は変更されません
電源投入時、デバイスは kp、kd、effort_limit のデフォルト値を読み込みます。SDK から書き込んだ値は現在のセッションにのみ適用され、再起動するとそれぞれデフォルト値に戻ります。Wuji SDK は接続のたびに、デバイスで有効な kp と kd を読み戻して SDK ログに書き込みます。予期しない剛性や減衰など、関節の応答が想定と異なる場合は、まずこの記録を確認してください。MIT パラメーターを参照してください。制御パラメーターを設定する際は、推奨値について遠隔操作サンプル 1.teleop_real.py を参照してください。effort_limit のデバイスのハード上限は 2.0 A です。
関節一覧表
番号:親指 0〜3、人差し指 4〜7、中指 8〜11、薬指 12〜15、小指 16〜19。SDK ラベルは {finger}_S{1..4} の形式です。
| インデックス | SDK ラベル | 関節(S1 → S4) | 可動範囲 | モデルの関節名 | モデルのアクチュエーター名 |
|---|---|---|---|---|---|
| 0–3 | thumb_S1..S4 | 基部の内転・外転(cmc_flex)/ 基部の側方スイング(cmc_abd)/ MCP 屈曲・伸展(mcp)/ IP 屈曲・伸展(ip) | -68°~74° / -85°~40° / -60°~90° / -60°~90° | {l,r}_thumb_* | {l,r}_THJ{0-3} |
| 4–7 | index_S1..S4 | MCP 屈曲・伸展(mcp_flex)/ MCP 側方スイング(mcp_abd)/ PIP 屈曲・伸展(pip)/ DIP 屈曲・伸展(dip) | -60°~90° / -40°~40° / -60°~120° / -60°~90° | {l,r}_index_finger_* | {l,r}_FFJ{0-3} |
| 8–11 | middle_S1..S4 | 4 指共通 | 4 指共通 | {l,r}_middle_finger_* | {l,r}_MFJ{0-3} |
| 12–15 | ring_S1..S4 | 4 指共通 | 4 指共通 | {l,r}_ring_finger_* | {l,r}_RFJ{0-3} |
| 16–19 | pinky_S1..S4 | 4 指共通 | 4 指共通 | {l,r}_pinky_* | {l,r}_LFJ{0-3} |
可動範囲はモデルファイル(URDF / MJCF / USD)の関節リミットと一致しており、左右の手でミラーリングされています。モデルの関節とリンクは {l,r}_ のプレフィックスに指の名前を付けた形式で命名され、ルートリンクはアームフランジのマウント {l,r}_mount です。詳細については、モデルアセットと読み込みを参照してください。
SDK ラベル S1..S4 とモデルのアクチュエーター J0..J3 の軸順の対応関係はまだ提供されておらず、今後追加される予定です。
原点と動作方向
set_origin/clear_originは、現在の物理的な位置をユーザー原点としてキャリブレーションします。関節が動作中の場合、変更は次の IDLE まで保留されます。SDK リファレンスを参照してください
制御周期とコマンド周期
- デバイスの制御周期は 1000 Hz × 20 軸です。1 kHz はアップリンクおよびダウンリンクのメッセージ周期であり、1 つのメッセージに 20 軸すべての制御データと状態データが含まれます
joint_statesのネイティブ出力周期は 1000 Hz で、サブスクリプションハンドルによってプッシュ周期を下げることができます。SDK リファレンスを参照してください- GET クエリは 100 Hz 以下に抑えてください。PUB コマンドは最大 1 kHz の周期に対応しています
パラメーターの安全上の上限
高い kp でレート制限なしに大きな目標位置を送信すると、関節が最高速度で駆動され、挟み込みによるけがや衝突の危険があります。制御パラメーターを変更する前に、デバイスの近くに人がいないこと、および作業領域に障害物がないことを確認してください。
- 初めてデバッグを行う際は、低いトルク上限(例:
effort_limit().set(0.5)、単位は A)から始め、動作が想定どおりであることを確認してから引き上げてください - 穏やかな位置保持には、保守的なパラメーター例として
kp = 3.0、kd = 0.05、effort_limit = 1.5 Aを使用してください - 大きな位置変更は、1 回のステップ変化ではなく小さなステップに分割してください
- 把持タスクでは、まず低い上限で接触を確認し、必要に応じて上限を引き上げてください
安全な制御ループ
推奨される制御ループ:コマンドを送信 → 状態を読み取る → エラーコードを確認 → 故障時に停止。
- 状態は
joint_statesから読み取り、エラーコードはjoint_diagnosticsからdescribe_errorでデコードします - 故障時は
disable()を呼び出します。緊急時はemergency_stop()を呼び出します(手全体が直ちに停止し、マスクは指定できません) - 故障の重大度、停止時の動作、故障解除の手順については、トラブルシューティング、復旧、メンテナンスを参照してください
単一関節の小さな動作を行う初心者向けの完全なサンプルについては、クイックスタートを参照してください。その他のリファレンス実装については、examples/python/wuji_hand_2/ を参照してください。
スムーズな原点復帰や 2 つの動作サンプルなど、対応するサンプルの実測結果については、SDK 実践ガイドを参照してください。
ドキュメント