ProjectSalamander
吸引ポンプ制御 (salamander)
suction_node と MD 基板による吸引ポンプ (M3508) の制御経路・2 段速度・弁・回転検知
要点
吸引ポンプ (M3508+C620、ee_md motor2) は速度制御。suction_node が VELOCITY 指令を送り、MD 基板が速度 PID を回す。on 中は一定速度 (on_velocity)。吸着センサは無い。
注意 (2026-09-10): 「on から一定時間で保持速度に落とす」時間ベース 2 段化は誤り。 suction on のタイミングは掴むタイミングではなく、吸着口がワークでシールされて初めて真空が 保持できる。シール前に減速すると真空が崩れて掴めない。減速するなら「シール/把持が確定した 条件」でトリガする必要がある (時間では不可)。要検討 (下記)。
指令経路
suction (std_srvs/SetBool) / suction/command (std_msgs/Bool)
→ suction_node
→ <prefix>/target (fibril_control_msgs/Target) prefix=/salamander/suction/pump/motor
→ MD 基板 (ee_md motor2, M3508+C620) が速度 PIDsuction_node の動作
- ON:
Target(VELOCITY)=on_velocityを送る (一定速度)。republish_hz(既定 10Hz) で送り続ける (ee_md respawn 後の指令復元)
- OFF:
Target(DUTY)=0を 1 回。 - 電磁弁:
valve_service(air0/set_state) を on/off で叩き、valve_reassert_secごと再送。suction/valve(latched Bool) = 指令状態を publish (HSM のsuction.valve観測)。 - 回転検知: feedback の
|velocity| >= running_thresholdでsuction/pump_running(latched)。feedback_timeout_sec途絶で false。 - arming 非依存:
motors/armゲートを通さない。明示 on 指令でしか回らない。
パラメータ
suction.param.yaml (/**/suction_node):
| param | 既定 | 意味 |
|---|---|---|
on_velocity | 20.0 | on の速度 [rad/s, 出力軸] |
republish_hz | 10.0 | on 中の Target 再送周期 |
running_threshold | 2.0 | pump_running 判定の速度しきい値 |
feedback_timeout_sec | 1.0 | feedback 途絶で pump_running=false |
valve_on_state | true | 吸着 on で弁へ送る state (配管 NC/NO で反転) |
valve_reassert_sec | 2.0 | on 中の弁再送周期 |
速度ループは MD 基板側 (md_motors.param.yaml motor2.velocity): kp 0.2, ki 0.002, kd 0,
max 0.5 (duty 上限), i_sat 0.3。速度制御のみ (位置 PID・reset_encoder は不使用)。
注意
- 吸着センサは無い。「掴めたか」は suction_node では判定できず、
field_state_nodeが pad TF / valve からgripper/holdingを導出する。 - sim では
suction_bridge_nodeが同じ外部 I/F (suction / suction/valve) を提供する。
保持中の省電力化 (要検討)
掴んだ後にポンプ出力を落として発熱/電流/騒音を下げたいが、トリガは時間でなく状態にする:
- 前提: 吸着口がワークでシールされ真空が保持できている状態でのみ減速可。良シール (低リーク) なら 低速でも真空維持できるが、リークが大きいと減速で崩れる。
- 候補トリガ:
- ポンプ電流でシール検出: 一定速度指令に対しシール時は負荷=電流が変化する。閾値超えが継続 したら減速、下がったら (リーク/脱落) 全開へ戻す。追加センサ不要だが電流シグネチャの実測が要る。
- 把持確定の明示信号: pick 完了 (ワーク把持・退避後) に BT/HSM が「hold へ」を指令。決定的だが BT 側の追加が要る。
- 減速しない (現状=常に on_velocity)。最も安全。
- 吸着圧センサは無いので、真空そのものは直接測れない。
関連
最終更新: