Skip to content

0425差分監視#1361

Draft
HansRobo wants to merge 73 commits into
developfrom
0425
Draft

0425差分監視#1361
HansRobo wants to merge 73 commits into
developfrom
0425

Conversation

@HansRobo

@HansRobo HansRobo commented May 1, 2026

Copy link
Copy Markdown
Member

No description provided.

ssaattww and others added 30 commits April 25, 2026 09:56
キックオフ時にチップキックで固定距離を蹴る実装から、GoalKickスキルを
活用した実装に変更する。

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

これにより、敵ロボット配置を考慮してゴール枠内の隙間を狙うストレート
キック(target_kick_speed=6.0)でシュートするようになる。
回り込み速度を低く設定(zonoh線ハーフタイム後有効化)
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線ハーフタイム後有効化)
# Conflicts:
#	crane_robot_skills/include/crane_robot_skills/simple_kickoff.hpp
JO2026 rion戦でコート外開始地点のボールプレイスメントが無限ループに
陥る問題に対処した。ドリブラーではない側面でボールを押し続けてball_sensor
が反応せずPULL_BACK_FROM_EDGE_TOUCHに16.8秒間張り付く現象が発生していた。

onPostUpdate()で毎フレーム更新する2つのグローバルタイマーを導入し、
しきい値(各10秒)を超えたらENTRY_POINTに戻して無限リトライさせる:

- outside_field_timeout: ロボットがコート外に連続滞在した時間
- approach_timeout: アプローチ系状態に連続滞在した時間

タイムアウト遷移はPULL_BACK_FROM_EDGE_PREPARE/TOUCH/PULL, GO_OVER_BALL,
PASS_TO_TARGET, CONTACT_BALL, MOVE_TO_TARGETの全アプローチ状態に追加。
リトライ上限は設けず、レフェリーの30秒タイムアウトに任せる。
THEIR_BALL_PLACEMENT中、カプセル形状回避の押し出し先が相手PA内に
なることがあり、プレイスメント終了→STOP遷移時に
「Attacker Too Close To Penalty Area」ファールが連発する問題を修正。

BallPlacementAvoidanceSessionの目標位置生成に敵PA回避を追加:
- 押し出し主候補の無効判定を「フィールド外 or 敵PA内」に拡張
- 垂直2候補・放射8候補の有効性チェックにも敵PAチェックを追加
- THEIR_BALL_PLACEMENT時のみenableGoalAreaAvoidance()でB層保険も有効化
  (OUR_BALL_PLACEMENTは従来通りdisableGoalAreaAvoidance())

PAオフセットはball_nearby_positioner.cppと同じ0.35mを踏襲。
autoBallPlacementEnabled・autoCenterAfterGoalEnabledをfalseに変更。
手動で制御する運用に合わせた設定。
ハーフコート練習で攻撃方向が反転する場合にも正しく動作させるため、
getTheir*Goal* 系を getAttack*Goal* 系に置き換え。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- engine.yaml: 全gameEventを BEHAVIOR_LOG 化(autorefの自動判定を抑制)、
  teams/activeTrackerSource を更新
- ssl-vision-client-config.json: 末尾改行を削除

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
YAMLの各セッションに fixed_robots: [id,...] を指定すると、
suitabilityスコアによる動的割当を無視してそのIDを優先取得する。
ハーフコート練習中にdefender/forward等のロールが入れ替わるのを防ぐ目的。

- SessionSlot/SessionRequirement に fixed_robots を追加
- ConfigurationManager で YAML をパース
- allocateRobotsGreedy で固定割当の分岐を追加(不在IDは warn してスキップ)
- HALF_FIELD_PRACTICE に仮IDを設定(実機構成に応じて要調整)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
HansRobo and others added 30 commits April 26, 2026 15:23
【根本原因1】getAttackSideSign()の符号定義が実態と逆だった
- world_model_wrapper.hpp: 通常モードでgetOurSideSign()を返しており
  「攻撃方向の符号」のはずが自陣側符号と同じ値+1を返していた
- FreeKicker内でこれを直接使用したため、fallbackターゲット計算
  (sign * field_half_x * 0.4)が敵陣-X方向でなく自陣+X方向を指し、
  パス評価の攻撃半面ボーナスも逆に自陣ロボへ×1.5、敵陣へ×0.1となっていた
- 修正: `getOurSideSign() : -getOurSideSign()` に反転(逆も然り)
- ForwardSessionはワークアラウンドとして-の否定を付けていたため合わせて除去

【根本原因2】KICKステートでキック電力設定をクロバーしていた
- setKickWithChipTargetDistance(2.5) でoverride=trueに設定した直後に
  kickWithChip(1.0) がoverride=falseに戻しフルパワーキックとなっていた
- 目標距離2.5mのチップが6m以上飛んで自陣に着弾していた
- kick_old.cpp/kick.cpp のif/else排他パターンに合わせて修正
  (setKickWith*は内部でchip_enableも自動セットするため二度呼び不要)

【根本原因3】チップ距離が固定2.5mだった
- chip_distance_メンバを追加し、パス選定時にrequired_chip_distance+0.2で動的計算
- fallbackターゲット時は実際のターゲット距離をclampして使用

【防御策】selectPassTarget()で自陣ロボを事前除外
- getOurSideSign()で半面判定し、pos.x()*our_sign>0の自陣ロボを候補から除外
- pass_target_metrics.cppと同じフィルタ条件(getOurSideSign直接使用)で統一
- getAttackSideSign()のセマンティクスに依存しない安全網として機能する
ボールプレイスメントで使われていたローテ+成功/失敗履歴の選定ロジックを
共通基底 (RotatingSingleSkillSession + rotation_suitability +
SkillAssignmentHistory) に切り出し、フリーキックにも適用。
履歴ファイルはスキルごとに別 (free_kicker_history.yaml)。

フリーキックの成否は以下の優先順で判定:
1. 試行中に発生した game_event に NO_PROGRESS_IN_GAME / 自チームの
   BOT_DRIBBLED_BALL_TOO_FAR / ATTACKER_DOUBLE_TOUCHED_BALL があれば失敗
2. FreeKicker が FINISH 到達 → kick_actually_launched をそのまま
   (KICK 状態のタイムアウト空振りは失敗扱い)
3. それ以外 (FINISH 未到達で割当解除) は失敗

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ALIGN状態の目標位置を press_point (ball - dir·0.12m) から
APPROACH最終地点と同じ ball - dir·approach_distance (0.25m) に変更し、
APPROACH→ALIGN遷移時の0.13mの目標ジャンプを排除した。

また、ALIGN進入時に目標位置を1回だけ計算してロック
(align_target_locked_) することで、ボール検出ジッタによる
目標振動も排除した。これにより、コーナー付近など
press_pointが物理的に到達不能だった状況でも
ロボットがALIGN開始位置でそのまま安定し、
KICKへの遷移が確実かつ迅速に行われるようになる。

パラメータ変更:
- align_distance パラメータを削除 (approach_distance で代替)
- align_position_tolerance: 0.05 → 0.07
- align_stable_frames: 5 → 3
位置・速度・角速度の安定判定(align_stable_frames等)を廃止し、
ALIGN進入から1秒経過したらKICKへ遷移するように変更した。
コーナーなど到達困難なpress_pointへの収束を待つ必要がなくなり、
ALIGN→KICKの遷移が確実かつ一定時間で行われる。

- FK_ALIGN_PHASE_TIMEOUT を FK_ALIGN_WAIT_SEC (1.0s) に置き換え
- align_position/speed/omega_tolerance、align_stable_frames パラメータを削除
- align_stable_count_ メンバを削除
位置・速度・角速度の安定判定(align_stable_frames等)を廃止し、
ALIGN進入から1秒経過したらKICKへ遷移するように変更した。
コーナーなど到達困難なpress_pointへの収束を待つ必要がなくなり、
ALIGN→KICKの遷移が確実かつ一定時間で行われる。

- FK_ALIGN_PHASE_TIMEOUT を FK_ALIGN_WAIT_SEC (1.0s) に置き換え
- align_position/speed/omega_tolerance、align_stable_frames パラメータを削除
- align_stable_count_ メンバを削除
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