Skip to content

fix(world_model_publisher): Tracker欠落時の短期LOST判定を抑制#1355

Open
HansRobo wants to merge 12 commits into
developfrom
fix/world-model-vision-hold
Open

fix(world_model_publisher): Tracker欠落時の短期LOST判定を抑制#1355
HansRobo wants to merge 12 commits into
developfrom
fix/world-model-vision-hold

Conversation

@HansRobo

Copy link
Copy Markdown
Member

背景・問題

zunoh戦 後半rosbag解析で判明した事象:ibis(YELLOW)が ATTACKER_TOO_CLOSE_TO_DEFENSE_AREA を3回取られた(t=156.88, 157.18, 183.23、すべてbot=1 at (-6.00, 1.10))。

rosbag調査で、bot=1 は t=82.35付近で crane の WorldModel上で detected=Falseavailable_vision=false)になり、姿勢が (-0.505, 4.144) で凍結・制御不能状態になっていた。一方、autorefはraw SSL-Visionを直接見るため、bot=1 を実フィールド上で検出し続けてファールを発火していた。

根本原因

processTrackedFrame の現実装では毎フレーム冒頭で全ロボットの available_vision/available_tracker を一旦 false に落とし、今回 TrackerWrapperPacket フレームに含まれるロボットだけ true に戻す。そのため:

  • TrackerWrapperPacket(port 11010 の autoref Tracker output)からロボットが1フレームでも欠落すると即 detected=False
  • autoref の Tracker output は lossy で一時的に特定ロボットを欠落させることがある
  • crane には Kalman/再結合などの補正ロジックが無いため、欠落したフレームが積み重なるとロストしたまま

修正内容

robot_vision_hold_sec(デフォルト 0.15秒 = Tracker 60Hz で約9フレーム分)の保持タイムアウトを追加。

  • 直近 robot_vision_hold_sec 以内に検出されていたロボットはフレームから消えても available_vision を維持
  • 保持時間を超えた場合のみ false にリセット(長期lostは正しくlost扱い)
  • ROS パラメータで調整可能(robot_vision_hold_sec

変更ファイル

  • crane_world_model_publisher/src/world_model_data_provider.cppprocessTrackedFrame リセットロジック変更
  • crane_world_model_publisher/include/crane_world_model_publisher/world_model_data_provider.hpprobot_vision_hold_sec_ メンバ変数追加

テスト計画

  • ビルド確認: colcon build --packages-select crane_world_model_publisher → 成功済み
  • dev docker環境でのロボットトラッキング動作確認(一時的な検出欠落で available_vision が即 false にならないこと)
  • 長期欠落(0.15秒超)では正しく available_vision=false になること

スコープ外

  • tracker port(10010/11010)の変更: 別途検討
  • raw SSL-Vision でのロボット検出フォールバック: 別途検討
  • 長期間(秒オーダー)連続欠落のケース: 本修正では救えない(運用対応)

HansRobo and others added 12 commits April 25, 2026 12:44
TrackerWrapperPacketのフレームからロボットが1フレーム欠落するだけで
available_vision/available_trackerが即false(LOST扱い)になる問題を修正。

robot_vision_hold_sec(デフォルト0.15秒)以内に検出されていたロボットは
次フレームでTrackerに含まれなくても状態を維持する。保持時間を超えた
場合のみリセットする。

背景: zunoh戦後半でbot=1がautoref側では検出されているのにcraneの
WorldModelではdetected=Falseになり制御不能となり、autorefから
ATTACKER_TOO_CLOSE_TO_DEFENSE_AREAファールを取られた。これは
autoref TrackerのlosyなTrackerWrapperPacket出力を一時的に
補う短期保持で軽減できる。
キックオフ時にチップキックで固定距離を蹴る実装から、GoalKickスキルを
活用した実装に変更する。

変更内容:
- chip_kick=true / target_chip_distance=2.0 の設定を削除
- Kick スキルの代わりに GoalKick スキルを保持するよう変更
- ターゲットをゴールセンター固定から GoalKick が計算する最適角度に変更

これにより、敵ロボット配置を考慮してゴール枠内の隙間を狙うストレート
キック(target_kick_speed=6.0)でシュートするようになる。
回り込み速度を低く設定(zonoh線ハーフタイム後有効化)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants