ProjectSalamander
箱への最終位置合わせだけ手動にする構成
salamander で pick→搬送→箱上空までを自動、箱に入れる直前の位置合わせだけ操作者がジョイスティックで行う構成。BT ノード ManualAdjust とパラメータ manual_place による on/off
要点: BT を place_above で止めて操作者の Twist を BT ノード内で積分し、確定ボタンで自動に戻す。arm の lease は BT が保持したまま (teleop へ渡さない)。on/off は behavior_server_node のパラメータ manual_place (既定 false)。
使い方
# 有効化 (behavior_server_node、既定 false)
ros2 param set /salamander/behavior_server_node manual_place true
# ゲームパッド (auto モード = DPAD_DOWN): R1 を押しながら左スティックで手先 XY、SQUARE で確定
# ゲームパッドなしの検証
ros2 topic pub -r 20 /salamander/operator/jog geometry_msgs/msg/Twist "{linear: {x: 0.02}}"
ros2 topic pub --once /salamander/operator/confirm std_msgs/msg/Bool "{data: true}"operator/jog: geometry_msgs/Twist、base_link 系 [m/s]、XY のみ (Z は portallow_z)。operator/confirm: std_msgs/Bool。true = 確定、false = 中止 (ノード FAILURE)。- 上限: 移動量 30 mm (XY 距離)、速度 50 mm/s、待ち 120 s。twist が 0.3 s 途絶えたら速度 0。
- ログ:
ManualAdjust[...]: confirmed, offset [x, y, z] mm after N s。
構成 (2026-09-03 実装)
| 段階 | 誰が | 部品 |
|---|---|---|
pick → 搬送 → place_above | BT pick_and_place.xml | 既存 |
| 停止して操作者を待つ、Twist を積分して target 再発行 | BT ノード ManualAdjust (salamander_behavior/plugin/manual_adjust.hpp) | ArmMotionCore::retarget() で mechanism/arm/target_position を差し替え。lease は heartbeat で保持 |
| スティック → Twist | controller_node の twist_publisher (auto モード、id place_jog) | 既存 plugin |
| 確定ボタン → Bool | salamander_teleop の RunPlugin publish_bool (新規) | SQUARE |
調整済み place_above から release_dz へ直線降下 → 離す → 上昇 | BT 既存 (place_release = place_above + (release_dz - place_dz)) | 既存 |
計画 (sequential-meandering-lake.md Phase 2) では twist の積分を arm_cartesian_motion_node に置く案だったが、BT ノード内で積分する方に変えた。理由: (1) lease を teleop に渡す状態遷移が要らない、(2) 上限 (30 mm) を「箱上の目標からの距離」で切れる、(3) 確定後の place_release が調整量を自動で引き継ぐ。
実装上の注意
- BT ノードの購読は volatile。
shared_state.hppは transient_local なので、controller の twist_publisher (volatile) と QoS が合わず届かない。ManualAdjust は独自の購読をプロセス生存レジストリに持つ。 - confirm はノード開始時刻より後の受信だけ見る (前の缶の確定が残っていても素通りしない)。
path="linear"、speed_scaleport 既定 0.5。
数字
- Cartesian 上限 (2026-09-03): 1.0 m/s、4.0 m/s²、40 m/s³ (
arm_control.launch.xml)。ジョグの 50 mm/s は BT 側で切る。 - 箱の側壁すき間 1.95 mm。降下は
path="linear"、place_speed 0.5。 - 「離す」後の settle 0.5 s + 0.7 s は PhysX の拘束解除遅れに対する値。実機では弁と真空抜けの応答で決め直す。
関連
- /docs/project/salamander/debug-loop-on-real-robot
- 計画:
~/.claude/plans/sequential-meandering-lake.md(Cartesian streaming motion)
最終更新: