wildlife-drone-maneuver

🚁 Maneuver Decision Tree β€” formal specification

This document is both (a) the citable policy specification and (b) the exact logic that maneuver_labels.py executes deterministically over each clip’s labels.csv. Every maneuver is a small table β€” one row per branch: condition β†’ action β€” so any published label can be traced back to the rule that produced it.

Contents

The four maneuvers at a glance

# Maneuver One-line objective Key user params
1 APPROACH Begin the mission and position the drone without spooking wildlife launch_altitude, end_altitude, target_species
2 TRACK Keep the herd centroid centered at a desired apparent size desired_pixels, pixel_band, max_animals
3 BAF Detect disturbance and respond (override) theta_S, baf_response
4 SoI-aware Rotate to a desired viewpoint, then hold at a target size soi, desired_pixels

0 Β· Action space & output model

Nine actions: up, down, forward, back, left, right, yaw-left, yaw-right, hover.


1 Β· Per-frame features

Keep-in zone β€” the center 50% of the frame: trim ΒΌ off each edge β†’ x ∈ [0.25, 0.75], y ∈ [0.25, 0.75] (frame 3840Γ—2160). The herd is β€œcentered” when its centroid is inside this box; corrections fire when it leaves.

Per-track (from labels.csv)

field values (normalized)
species Giraffe, Plains Zebra, Grevys Zebra (collapse Grevy→Grevys Zebra)
behaviour Head Up, Walk (collapse Walking→Walk), Graze, Browsing, Running, Trotting, Auto-Groom
vigilant True if behaviour ∈ {Head Up, Running, Trotting}
pose front, front-left, front-right, left, right, back-left, back-right, back
bbox x_c, y_c, w, h, bbox_area_frac, bbox_size_class ∈ {far, medium, close}
telemetry latitude, longitude, altitude (used by APPROACH only)

Frame-level aggregates (derived)

n_tracks, centroid (mean x_c, y_c over the followed animals, normalized), mean_px (mean longest bbox side over followed animals), pct_vigilant, S_t (trailing 90-frame mean of pct_vigilant), majority_pose.

When n_tracks exceeds max_animals, only the max_animals largest bboxes are followed (this also subsumes herd fission/fusion: the larger subgroup wins).


2 Β· The four maneuvers

Maneuver 1 β€” APPROACH

Objective: begin the mission and position the drone without spooking wildlife. User params: launch_altitude (50 m), end_altitude (30 m), target_species.

# condition action note
1 target detected, centroid in keep-zone hover approach complete β†’ handoff
2 altitude < launch_altitude βˆ’ 1 up climb to launch altitude
3 altitude > end_altitude + 1 down descend toward end altitude
4 otherwise (target not yet detected) forward search forward

Maneuver 2 β€” TRACK

Objective: keep the majority of the herd centroid in the center-50% keep-zone, at a desired apparent size. Range control acts in the X–Z plane only (no vertical). User params: desired_pixels (30), pixel_band (Β±0.25), max_animals (5).

# condition action note
1 centroid.x right of keep-zone left recenter
2 centroid.x left of keep-zone right recenter
3 mean_px below desired_pixelsΒ·(1βˆ’band) forward too small β†’ close in
4 mean_px above desired_pixelsΒ·(1+band) back too large β†’ back off
– no detection hover Β 

Maneuver 3 β€” BEHAVIOR-ADAPTIVE FLIGHT (BAF)

Objective: detect and respond to disturbance. Evaluated as an override on the smoothed vigilance series S_t, with a hover hold after each trigger. User params: theta_S (0.5), baf_response ∈ {retreat, hover}.

# condition action note
1 S_t β‰₯ theta_S retreat = {back, up} (or {hover}) override active maneuver
2 a trigger fired within the last 150 frames (5 s) hover hysteresis hold
3 otherwise (no override; defer to active maneuver) calm

Maneuver 4 β€” SoI-AWARE

Objective: maneuver to capture the desired Surface of Interest (pose) of the majority of the herd, then hold at a target apparent size. Two stages. User params: soi (desired pose, default left), desired_pixels (per objective: track 30, behavior 100, re-ID 500).

The eight poses form a ring; one yaw-left step rotates apparent pose one position around it (front β†’ front-right β†’ right β†’ …). To reach the desired pose the drone yaws the short way; yaw-right rotates the opposite direction.

# stage condition action
1 rotate majority_pose β‰  soi yaw-left / yaw-right (short way around ring)
2 range majority_pose = soi, mean_px < target forward
3 range majority_pose = soi, mean_px > target back
4 hold majority_pose = soi, mean_px in band hover
– β€” no pose available hover

3 Β· Composition (mission)

A mission may run several maneuvers; the intended override priority is

BAF β†’ APPROACH (until handoff) β†’ TRACK β†’ SoI

This release generates labels per (clip Γ— maneuver Γ— param-set) independently; cross-maneuver composition is left to the consumer.


4 Β· Generator output

Per (clip Γ— maneuver Γ— param-set), long-format maneuver_labels.csv columns:

clip_id, frame_local, maneuver, action_set_raw, action_set_smoothed,
triggering_branch, S_t, pct_vigilant, n_tracks, centroid_x, centroid_y, mean_px

5 Β· Data hygiene