Enemy tracker design #7

Closed
opened 2026-08-15 22:05:35 +02:00 by SirStone · 1 comment
Owner

Question

How does the deterministic radar tracker work for 1v1?

In 1v1, a narrow radar lock can track the enemy nearly every tick. Strategy:

  • On scan: record enemy position, direction, speed
  • Between scans: dead-reckon (extrapolate using last known velocity)
  • Radar sweep: minimize radar movement to keep lock (turn radar toward predicted enemy position)

Sub-questions:

  • Does the radar turn get set by the tracker each tick (overriding RL), or does the RL agent get a "suggested radar turn" as part of the state?
  • How to handle initial scan (enemy not yet found)? Full 360° sweep until first contact?
  • What's the data structure? A simple object with (x, y, dir, speed, energy, ticksSinceLastScan)?
## Question How does the deterministic radar tracker work for 1v1? In 1v1, a narrow radar lock can track the enemy nearly every tick. Strategy: - On scan: record enemy position, direction, speed - Between scans: dead-reckon (extrapolate using last known velocity) - Radar sweep: minimize radar movement to keep lock (turn radar toward predicted enemy position) Sub-questions: - Does the radar turn get set by the tracker each tick (overriding RL), or does the RL agent get a "suggested radar turn" as part of the state? - How to handle initial scan (enemy not yet found)? Full 360° sweep until first contact? - What's the data structure? A simple object with (x, y, dir, speed, energy, ticksSinceLastScan)?
SirStone added the wayfinder:grilling label 2026-08-15 22:05:35 +02:00
Author
Owner

Resolution

Radar strategy (1v1)

  • Decoupled radar — tracker fully owns setRadarTurnRate, compensating for body/gun rotation.
  • Round start: full-speed sweep (45°/tick) until first onScannedBot.
  • After contact: lock with overshoot — turn radar past enemy bearing by a few extra degrees, reverse next tick. Narrow oscillation scans enemy nearly every tick.
  • Lock recovery: if no scan for 2+ ticks, widen oscillation or full sweep until reacquired.

Dead reckoning

  • On missed ticks, extrapolate: predicted_pos = last_pos + last_velocity × ticks_since_scan
  • Smooths the RL state vector input on rare missed scans.

EnemyState data structure

EnemyState = object
  x, y: float              # from scan, or dead-reckoned
  direction: float          # heading (degrees)
  speed: float              # scalar
  energy: float             # health (stale if predicted)
  ticksSinceLastScan: int   # 0 = fresh scan this tick
  hasFired: bool            # energy dropped [0.1, 3.0] since last scan
  lastFirePower: float      # inferred fire power from energy delta

Derived data available to RL

  • hasFired and lastFirePower inferred from energy delta between scans
  • Bullet speed derivable: 20 - 3 × firePower
  • Enemy firing detection enables dodge-learning
## Resolution ### Radar strategy (1v1) - **Decoupled radar** — tracker fully owns `setRadarTurnRate`, compensating for body/gun rotation. - **Round start:** full-speed sweep (45°/tick) until first `onScannedBot`. - **After contact:** lock with overshoot — turn radar past enemy bearing by a few extra degrees, reverse next tick. Narrow oscillation scans enemy nearly every tick. - **Lock recovery:** if no scan for 2+ ticks, widen oscillation or full sweep until reacquired. ### Dead reckoning - On missed ticks, extrapolate: `predicted_pos = last_pos + last_velocity × ticks_since_scan` - Smooths the RL state vector input on rare missed scans. ### EnemyState data structure ```nim EnemyState = object x, y: float # from scan, or dead-reckoned direction: float # heading (degrees) speed: float # scalar energy: float # health (stale if predicted) ticksSinceLastScan: int # 0 = fresh scan this tick hasFired: bool # energy dropped [0.1, 3.0] since last scan lastFirePower: float # inferred fire power from energy delta ``` ### Derived data available to RL - `hasFired` and `lastFirePower` inferred from energy delta between scans - Bullet speed derivable: `20 - 3 × firePower` - Enemy firing detection enables dodge-learning
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: SirStone/SirRoboGarage#7