WEBVTT

00:00:00.000 --> 00:00:06.120
A vision processor gives the program
an observation, not a motor command.

00:00:06.120 --> 00:00:16.380
Make the decision after the observation explicit:
pass every gate, or return UNKNOWN with a reason and fallback.

00:00:16.440 --> 00:00:27.960
A region processor and an AprilTag processor do not expose
the same measurements or one universal confidence number.

00:00:27.960 --> 00:00:36.360
A region result can check its strongest score,
margin over the second-best score, and stability.

00:00:36.480 --> 00:00:51.420
An AprilTag result can check for a detection and metadata,
an allowed ID, reviewed range and bearing, and freshness.

00:00:51.420 --> 00:01:04.140
It can require the same ID for three accepted frames.
The range, bearing, age, and score limits are examples.

00:01:04.140 --> 00:01:17.280
The team must choose and validate its real policy
from labelled evidence such as tag size and reprojection error.

00:01:17.280 --> 00:01:28.080
Every gate should be visible,
and every failure should have a name.

00:01:28.080 --> 00:01:38.220
The Decision object keeps together the observed result,
the autonomous branch, and the acceptance or rejection reason.

00:01:38.220 --> 00:01:48.540
The region policy rejects a weak winner,
a low-margin winner, or an unstable result.

00:01:48.540 --> 00:01:59.280
The AprilTag policy rejects no detection, missing metadata,
or a disallowed tag ID before later gates can pass.

00:01:59.280 --> 00:02:10.920
After those checks pass, it counts consecutive frames.
The first two return UNSTABLE; the third may select a branch.

00:02:10.920 --> 00:02:23.400
Any failed gate or ID change resets the count.
The FTC API supplies detections and pose fields.

00:02:23.400 --> 00:02:33.720
Observation age and the limits shown here are team-defined
policy, not a universal SDK confidence field.

00:02:33.720 --> 00:02:44.520
Now switch back to the overall view
and name each possible outcome.

00:02:44.520 --> 00:02:55.200
A weak region becomes TOO_WEAK.
Two close regions become LOW_MARGIN.

00:02:55.200 --> 00:03:05.280
AprilTag failures include NO_DETECTION, MISSING_METADATA,
DISALLOWED_ID, OUT_OF_BOUNDS, and STALE.

00:03:05.280 --> 00:03:14.640
A candidate that has not survived enough frames is UNSTABLE.

00:03:14.760 --> 00:03:21.900
Only an observation that passes the whole policy
with no failed gates becomes ACCEPTED.

00:03:21.900 --> 00:03:35.880
Named reasons show which assumption failed and prevent an old
accepted branch from surviving after a new rejection.

00:03:36.540 --> 00:03:49.080
The branch table stays small. An accepted observation
selects left, center, or right.

00:03:49.080 --> 00:03:55.920
Anything rejected produces UNKNOWN
and selects CENTER_SAFE in this example.

00:03:55.920 --> 00:04:09.720
CENTER_SAFE is not proof that center is safe every season.
It only names the fallback in this example fixture.

00:04:09.720 --> 00:04:15.240
The team must choose its real fallback.

00:04:15.240 --> 00:04:21.960
Replay labelled observations
with robot outputs held at zero.

00:04:21.960 --> 00:04:38.280
Record the first failed gate, result, reason, selected branch,
and proof that rejected data never requests motion.

00:04:38.280 --> 00:04:48.780
Only after the policy passes should the actual camera
and robot be validated with proper precautions.

00:04:48.780 --> 00:05:06.360
Reliable vision requires many checks, testing, and tuning.
Try the policy against real evidence and keep improving it.
