// Section 01

V5 GPS Sensor 📍

Absolute position from a fiducial-strip vision system. The right tool when you need to know where you are on the field, not just how far you've traveled. Read the Sensor Roadmap first to confirm GPS is the right next step.
🧰 LV03 — Build & Tune ⚡ LV04 — Iterate & Compete 🏆 Skills-run-grade
Read this first. The V5 GPS Sensor is not a beginner sensor. It costs about $270, requires a GPS Field Code installed on the perimeter walls, has a ~13.5″ deadzone where it cannot read, and adds a sensor-fusion layer to your auton that needs careful tuning. If you do not have IMU + tracking-wheel odometry working reliably first, GPS will not save you — it will give you a more confusing failure mode. See the Sensor Roadmap for tier order.

What the GPS Actually Is

The name is misleading. The V5 GPS Sensor is not satellite-based positioning. It's a small downward-facing camera with an integrated IMU, paired with a printed pattern on the field perimeter walls. The camera reads the printed pattern (called the "Field Code"), decodes its position from the pattern, and reports an (x, y, heading) in meters relative to the center of the field.

Think of it as a fiducial system, not a GNSS receiver. Closer in concept to AprilTags than to your phone's GPS. The advantage is that the pattern is continuous around the entire perimeter, so the sensor has something to read from anywhere on the field that has line-of-sight to a perimeter wall.

What It's Good At

What It's Bad At

What This Deep Dive Covers

  1. How It Works — field code strips, decoding, range & deadzone
  2. Mounting — height, orientation, occlusion, the offset-from-center calibration
  3. PROS API — constructors, position, status, error, the offset constructor
  4. Quality & Fusion — the get_error() RMS quality flag, how to fuse with IMU + odom
  5. Auton Reset Pattern — the highest-leverage practical use of GPS in skills runs
  6. Failures & Tuning — the five things that go wrong and what to change
  7. CAD & Verification — mounting bracket, line-of-sight CAD, verification checklist

Should You Buy a GPS Sensor for Override?

The right answer depends on what your team already has and what kind of positioning your auton actually needs. Three honest paths, each appropriate for a different team.

Path A: Working Tracking-Wheel Odometry Already

Free-spinning tracking wheels with rotation sensors give you high-fidelity relative tracking that drifts maybe an inch over a 15-second auton, two or three inches over a 60-second skills run. That's often within scoring tolerance, and teams that practice their routine extensively learn to compensate for the residual drift.

For these teams, GPS adds a periodic-reset advantage that shaves skills-run drift from ~2″ down to under 1″. Real benefit, but marginal. The $270 plus the integration work usually buys more on a different investment — a backup IMU, extra game elements for practice, mechanism iteration.

Recommendation: skip GPS unless skills-run drift is a known competitive bottleneck. Use the budget elsewhere.

Path B: Drive-Encoder Tracking Only (No Tracking Wheels)

Drive-wheel encoders measure wheel rotation, but drive wheels slip — especially on hot fields, during collisions, and during aggressive turning. Drift over a 15-second match auton can be 2–4 inches. Over a skills run, 6+ inches. Enough to consistently miss scoring positions.

This team has two paths to better positioning: build tracking-wheel odometry, or buy a GPS sensor. They are not the same investment:

Tracking WheelsGPS Sensor
Hardware cost~$50–80 in parts$270
Build time2–3 weekends for a team new to it~1 weekend (mount + calibrate)
Mechanical demandHigh — design pods, free-spin under load, consistent floor contactLow — mount sensor at 10.5″, point at wall
Code complexityOdometry math (or LemLib's integration layer)PROS API call, offset constant
Failure mode visibilitySubtle — bearing drag, slight non-perpendicular mount, sensor cable wearClear — deadzone, occlusion, wrong offset

Recommendation: GPS is the cheaper path here — not in dollars, but in time-to-working, mechanical engineering required, and failure-mode clarity. A team strong on programming but weak on mechanical will get GPS working faster than tracking wheels. A team strong on building can do tracking wheels and save the $270, but should expect 2–3 weekends of mounting and tuning.

Path C: Worlds-Grade Program (Both)

The most sophisticated V5RC programs run tracking-wheel odometry as the fast position layer and GPS (and/or AprilTags) as the absolute-correction layer. The fusion patterns in the next section apply.

This is multi-month work and not a goal for most teams. The marginal points from full fusion are usually fewer than the points from spending the same time on driver practice, mechanism reliability, or strategy development.

Recommendation: pursue this only if you've hit a positioning ceiling that simpler systems can't solve.

Override-Specific Wrinkle: GPS vs AprilTags

Override 2026-27 has AprilTags confirmed on the goal bases (per kickoff April 24). This means there's already a second absolute-position source available for this game — and it's complementary to GPS in an important way.

The two sources have inverse strengths:

GPS SensorAI Vision + AprilTags
Works best whenFar from walls (open field traverse)Close to a goal (scoring approach)
Fails whenWithin 13.5″ of a wall (deadzone)No tag in field of view
CoverageContinuous around perimeterDiscrete — only at tagged elements
Best use for Override"Where am I on the field?""How am I aligned to this goal?"
Cost$270 (sensor only; field code already on perimeter)$270 (sensor); tags already on goals

This matters because Override's scoring action happens at the goals — wall-adjacent or goal-adjacent positions where GPS is in its deadzone. If your auton's primary positioning need is precise goal alignment for cone-tower placement, AprilTags handle that better than GPS does. If your auton needs to navigate the open field and reset position drift between scoring sequences, GPS handles that better than AprilTags do.

Decision Tree for Override 2026-27

1. No absolute positioning, drive encoders only.
First choice: AI Vision Sensor for AprilTag-based goal alignment. Override's scoring is goal-centric; tags are on the goals; the sensor pays off directly during scoring approaches. Tracking wheels next, if you can build them. GPS last — its deadzone covers exactly the area where you'll be scoring.
2. Working tracking-wheel odometry.
Don't add GPS unless drift is a known bottleneck. Consider AI Vision Sensor for goal-aligned scoring instead — it complements your existing odometry stack better than GPS would, given Override's wall-adjacent scoring geometry.
3. You already own a GPS sensor.
Use it for the auton-reset pattern (next section) during open-field transit and skills runs. Don't expect it to help during goal-adjacent scoring — that's the deadzone. Pair with AprilTags if you want absolute positioning during scoring too.
4. Worlds-grade program.
Tracking wheels + GPS + AprilTags, fused. Use GPS for traverse, AprilTags for scoring approach, tracking wheels as the fast layer between corrections. See the multi-source fusion notes in section 5.

The previous bullet-list recommendation in this section — "GPS pays for itself if you don't have working odometry" — is a useful starting point, but Override's goal geometry adds a wrinkle. For this season specifically, AprilTags often compete with GPS rather than complement it. Pick based on whether your auton's primary positioning need is "where am I on the field" (GPS) or "how am I aligned to this goal" (AprilTags).

// Section 02

How It Works 🔬

The fiducial-strip vision system, the integrated IMU, and the deadzone math you have to plan around.

The Field Code Strip

The GPS Field Code (VEX 276-7823) is a printed pattern of black-and-white squares that mounts to the inside of the field perimeter walls with hook-and-loop adhesive. The pattern is not random — each segment of the strip encodes its own position relative to the field center, similar to how a 1D barcode encodes data in stripe widths.

The GPS Sensor's onboard camera looks at the strip, identifies the pattern of black/white boxes in view, finds intersections (the corners between squares), and decodes the position. The closer two corners are in the image plane, the closer the camera is to the wall — basic depth-from-disparity. Heading comes from how much the pattern is rotated in the image.

The Integrated IMU

The GPS Sensor contains its own IMU. When the camera can't read the strip (occlusion, deadzone, mid-bump), the internal IMU dead-reckons short-term to keep the heading estimate alive. Once the camera reacquires the strip, the IMU drift gets corrected against the visual ground truth.

This is why the GPS reports a heading even when nothing is in view — the heading is coming from the IMU portion. But the absolute (x, y) position requires camera-strip lock; the IMU alone can't produce absolute coordinates.

Range and Deadzone

~13.5″
Inner deadzone. Below this distance to the wall, the camera cannot resolve enough of the strip to decode position.
~20″
Reliable read distance. At ~20″ or more, the strip resolves cleanly and position estimates are accurate.
~10.5″
Recommended sensor mounting height above the floor — same vertical plane as the field strip.
3–5 sec
Heading convergence time after sustained motion (community-reported).

The 13.5″ deadzone is a hard mechanical limit, not a software one. Plan your robot's scoring positions so the GPS sensor does not need to read while the chassis is within 13.5″ of a wall. In practice that means: GPS reads happen during transit, not during scoring.

The deadzone is per-sensor, not per-robot. If your GPS sensor is mounted on the rear of the chassis facing rearward, the deadzone is between that sensor and the rear wall it's looking at — not between the robot front and the front wall. You can score at the front wall while the rear-facing GPS reads the rear wall just fine, as long as nothing blocks the rear view.

Coordinate System

The GPS reports position in meters, with origin at the center of the field. The 12′×12′ field becomes (-1.83, -1.83) to (+1.83, +1.83) meters. Heading is in degrees, [0, 360), with the convention that 0° faces one specific wall (typically positive Y).

If your auton code is written in inches (as most VEX autons are), you'll convert: meters = inches * 0.0254 or inches = meters / 0.0254. EZ-Template autons typically work in inches; LemLib supports both. Pick one unit system and stick with it — conversion errors in seed values are a common bug.

// Section 03

Mounting Geometry 🔧

Sensor height, orientation, and the offset-from-center calibration that determines whether your GPS reads make sense.

Height: 10.5 Inches Off the Floor

The field code strip is mounted at a fixed height range on the perimeter walls. The GPS sensor camera must be at the same vertical plane as the strip — per VEX's "Best Practices" KB article, that means roughly 10.5″ off the floor. Higher or lower than that, the camera looks above or below the strip and gets nothing.

This constrains your robot design: there must be a 10.5″-tall mounting location with a clear horizontal line-of-sight to one perimeter wall. For most chassis architectures this is fine; for very tall or very low-profile robots it can be a real constraint.

Orientation: Rear-Facing is Standard

VEX's recommended mounting is on the rear of the robot, sensor camera facing rearward (away from the direction of travel). Three reasons:

Some teams mount on the side rather than rear. That works for chassis with side-mounted scoring (where the rear is also occupied), but you need to verify the side wall is in view from your typical scoring positions. CAD it before you build.

The Offset From Center: Critical Calibration

This is where most teams get GPS wrong. The sensor reports its own (x, y) position. But what you actually want is the chassis center position — specifically, the center of rotation of your drivetrain. If the GPS is mounted 6 inches behind the chassis center and you query GPS position, the reported (x, y) is the GPS sensor's location, not the chassis's.

PROS handles this for you with the xOffset and yOffset constructor parameters — if you set them correctly, get_status() returns chassis-center position with the offset already applied.

Offset convention (PROS units: meters):
xOffset = sensor X position relative to chassis center of rotation
yOffset = sensor Y position relative to chassis center of rotation
Sign depends on your robot's coordinate convention. If your robot's "forward" is +X and the GPS is mounted 6″ behind center, xOffset = -0.1524 meters.

Measuring the Offset

  1. Identify your chassis center of rotation. For a standard tank/H-drive: midpoint between left and right wheel groups, midway between front and rear wheels. For a holonomic: geometric center of the wheel polygon.
  2. Measure from that center to the front lens of the GPS sensor (not the back of the housing). The lens is what reads the strip.
  3. Measure separately along the X (sideways) and Y (forward) axes of your chassis convention.
  4. Convert to meters: inches × 0.0254.
  5. Pass into the constructor.

Verifying the Offset Is Correct

Place the robot at a known field position (typically a corner). Read the GPS-reported position. If the offset is correct, the GPS reports the chassis-center coordinates, which should match the field corner's known coordinates. If it's off by exactly the offset distance, you have the offset sign reversed or you're measuring to the wrong sensor face.

Repeat for the opposite corner. Both should match. If one corner reads correct and the other doesn't, something is rotated — check that your robot's "forward" axis matches your offset sign convention.

Wrong offset is the #1 GPS bug. The robot reports a sensible-looking position that's consistently 6 inches off, autons land 6 inches short, and the team blames "GPS isn't accurate." It is accurate. The offset is wrong. Always verify offset against known field positions before debugging anything else.
// Section 04

PROS API 💻

The pros::Gps class, the constructors that matter, and the methods you'll actually call. (Verify against current PROS docs before copying patterns — the API surface evolves.)
EN4 reminder. The patterns below are for understanding. Do not paste them into your team's code or notebook verbatim. RECF EN4 requires students to write their own implementation in their own words. Use these as references for what the API exposes; rewrite from scratch.

The Four Constructors

PROS provides four pros::Gps constructors with progressive specificity:

ConstructorWhat It SetsWhen to Use
Gps(port) Port only. Offset and initial position are zero. Quick test. Don't use in real autons.
Gps(port, xOffset, yOffset) Port + sensor offset from chassis center. Use when you don't have a fixed starting position (rare).
Gps(port, xInitial, yInitial, headingInitial, xOffset, yOffset) Port + initial chassis-center position + heading + offset. The standard constructor for competition. Set initial position to your match starting location.
initialize_full(...) Same as above, but as a method (call after construction). When the starting position depends on auton selection (red-left vs blue-right, etc.).

The initial-position parameters give the GPS something to dead-reckon from while it's acquiring lock on the field strip. Without them, the first few seconds of position output may be wildly off as the sensor warms up. Always seed with the actual starting position.

Reading Position

Three position-read methods, each useful in different situations:

MethodReturnsUse For
get_x_position() X in meters (double) Single-axis check, lightweight
get_y_position() Y in meters (double) Single-axis check, lightweight
get_status() gps_status_s_t struct: x, y, pitch, roll, yaw Standard read. One call returns position + orientation atomically.
get_heading() Heading in [0, 360) degrees When you only need heading (faster than full status)

For most auton control loops, call get_status() once per loop iteration and pull what you need from the returned struct. Mixing single-axis calls in the same iteration risks reading a stale value as the sensor updates between calls.

The Quality Flag: get_error()

This is the single most underused GPS method. get_error() returns the sensor's self-reported RMS error in meters — the sensor's own confidence interval on its position estimate. Higher values mean lower confidence.

Always check get_error() before acting on a GPS read. A position-reset routine that ignores quality and resets your odometry against a 0.4-meter-error read is worse than not having GPS at all — you just teleported your robot 16 inches in the wrong direction.

Setting Position Mid-Match

set_position(xInitial, yInitial, headingInitial) rewrites what the GPS thinks the chassis-center position is. You don't typically need to call this during a match — the GPS reads its own position from the strip. It's used:

Data Rate

set_data_rate(milliseconds) only affects the IMU portion of the GPS, not the camera. Default is 10 ms (100 Hz IMU updates). Lower if you want fewer interrupts; higher only if you have a specific reason. The camera-based position estimate updates at its own internal rate, regardless.

// Section 05

Quality & Sensor Fusion 🔗

Why GPS is a correction layer, not a primary source — and how to fuse it with IMU + odometry without breaking either.

The Sensor Hierarchy

For a well-tuned auton, position information comes from three sources operating at different timescales:

SourceUpdate RateDrift BehaviorWhat It's For
IMU + encoders ~100 Hz Drifts slowly with time/distance Primary control loop feedback
Tracking wheels ~100 Hz Drifts less than encoders alone (no wheel slip) High-fidelity odometry
GPS ~1–5 Hz effective No drift — absolute reads Periodic ground truth correction
AprilTags (AI Vision) ~10–30 Hz when in view No drift — absolute reads Local correction near specific tagged elements

Each source has a job. IMU + encoders or tracking wheels provide the fast feedback your motion-control loop needs. GPS and AprilTags provide low-frequency absolute corrections that cancel accumulated drift.

The mistake is using GPS as your primary position source. The 3–5 second heading-convergence time and the deadzone make it unsuitable for closed-loop control. Use it where it shines: occasional ground-truth checkpoints.

The Fusion Pattern

The standard fusion pattern is: maintain a fast position estimate from IMU + encoders, periodically correct that estimate against GPS when GPS quality is high. Pseudocode:

FUSION LOOP (runs at ~100 Hz)

1. Update fast_position from IMU + encoder deltas
2. IF (loop iteration is divisible by 50, ~2 Hz):
    Read gps_status
    Read gps_error
    IF gps_error < QUALITY_THRESHOLD (e.g., 0.05 m):
        Compute delta = gps_positionfast_position
        IF delta.magnitude < SANITY_LIMIT (e.g., 0.3 m):
            Blend: fast_position += delta × BLEND_WEIGHT (0.3)
        ELSE: discard read — GPS or odom is wrong
3. Use fast_position for motion control

Key constants to tune:

Why Not Just Use GPS Directly?

Two reasons. First, GPS updates are slow — if your control loop runs at 100 Hz and GPS updates at 2 Hz, you have 50 control iterations between GPS reads. The robot needs feedback in those gaps; that's what odometry provides.

Second, GPS has occasional bad reads. A momentary occlusion, an error spike, a frame where the sensor sees the wrong part of the strip — all real failure modes. A pure-GPS controller will jerk the robot in response. The fusion blend smooths these out.

Fusion with Tracking Wheels

If you have tracking wheels (Tier 4 in the roadmap), the same pattern applies but with a higher-quality fast position. Tracking wheels resist wheel-slip drift better than drive-wheel encoders. Lower BLEND_WEIGHT (e.g., 0.15) since your fast position is already more trustworthy.

Fusion with AprilTags

If you have AI Vision Sensor + AprilTags (per AprilTags guide), and Override has goal-base tags, you have two independent absolute-position sources. They're complementary:

This kind of multi-source fusion is competition-grade engineering. If your team is at this stage, you're past the point where this guide is the right reference; you're writing your own.

// Section 06

The Auton Reset Pattern 🎯

The single highest-leverage way most V5RC teams use GPS. Simpler than continuous fusion, and applicable in skills runs and long autons.

The Idea

Continuous sensor fusion (previous section) is the mathematically clean approach but requires careful tuning. The pragmatic alternative: at known checkpoints during the auton, drive the robot to a position with clear GPS line-of-sight, read the GPS, and reset your odometry to match. The rest of the auton runs on odometry as usual.

This pattern is simpler to implement, easier to debug, and gives you most of the benefit of full fusion in skills runs — where drift is the dominant error source.

When to Reset

Pick checkpoints in your auton where:

For a typical 60-second skills run, 1–3 GPS resets at strategic checkpoints is enough. More than that, and you're spending time on resets that could be scoring.

The Reset Sequence

1
Drive to the checkpoint. Use odometry as usual. Position doesn't need to be perfect — it's about to be corrected.
2
Stop and pause. Brief pause (100–200 ms) lets the GPS converge a stable read. Skipping this step is the most common reason resets don't help.
3
Take 3 GPS reads. Average them, or take median. Filters momentary noise.
4
Check quality. Verify get_error() is below threshold (0.05 m suggested). If not, skip the reset and continue with current odometry — bad GPS data is worse than no reset.
5
Sanity check. Compare GPS read to expected position at this checkpoint. If they disagree by more than (say) 12 inches, something's wrong — skip the reset.
6
Apply the correction. Set your odometry estimator's position to the GPS read. For EZ-Template, this means resetting the chassis pose. For LemLib, call setPose().
7
Continue auton. Drive to the next target with corrected position. The drift accumulated up to this point is canceled.

EZ-Template Integration

EZ-Template uses an internal pose tracker driven by IMU + drive encoders. The reset pattern: read GPS, then call the chassis methods that reset the tracked pose. Specifically:

EZ-Template is heading-and-distance-centric, not pose-centric. GPS resets work best for heading correction in EZ-Template autons; for X/Y reset, consider a layered approach or move to LemLib.

LemLib Integration

LemLib has explicit pose handling. The reset pattern:

  1. Read GPS into lemlib::Pose new_pose.
  2. Call chassis.setPose(new_pose).
  3. Continue with subsequent moveToPoint() / moveToPose() calls.

LemLib was designed with this kind of correction in mind — the API is clean, no working around library assumptions. If your team plans heavy use of GPS resets, LemLib's integration is friendlier.

The Notebook Entry

Document each reset checkpoint: where it is on the field, why you chose it, what GPS quality you typically read there, and how much drift you observed before vs after adding the reset. This is high-quality judging-narrative material. See the Sensor Notebook Templates.

// Section 07

Failure Modes & Tuning ⚠

The five things that go wrong with GPS in V5RC, and what to change.
Wrong Offset
Reported position is consistently off by a few inches in a fixed direction. Autons land short or wide of targets by the same amount every time.
Fix: re-measure the GPS sensor lens position relative to chassis center of rotation. Check sign of offset values. Verify against two opposite field corners with known coordinates.
Deadzone Reads
Position reads as zero or jumps wildly when the robot is near a wall. Quality flag spikes high.
Fix: the sensor is in the ~13.5″ deadzone. Don't take GPS reads when the chassis is within 18″ of the wall the GPS faces. Reposition reset checkpoints farther from walls.
Heading Slow to Converge
After a turn, GPS heading takes 3–5 seconds to settle. Auton uses stale heading and turns to wrong direction.
Fix: use the IMU (not GPS) for heading in the control loop. GPS heading is for occasional resets only. If you need heading correction immediately after a turn, use the V5 IMU's heading directly.
Field Code Strip Damage
Position reads work in some areas of the field but not others. Quality drops when robot faces a specific wall.
Fix: inspect the field code strip on the affected wall. Strip damage (peeling, scuffs, marker stains) ruins the pattern decode. Replace damaged strip sections. Verify before each event.
Lighting / Glare
GPS works at one venue, fails at another. Quality consistently low.
Fix: direct overhead lights or window glare can wash out the strip pattern. Test at venue during practice. If glare is severe, consider a light shroud above the GPS lens, or repositioning the strip lighting if the venue allows.

Tuning Sequence at the Field

  1. Position-at-corners check. Place the robot at each of the four field corners. Read GPS position. Verify the read matches the known corner coordinates within ±2 inches. If any corner fails, mounting offset is wrong or the strip on that wall is damaged.
  2. Quality-vs-distance test. Drive the robot from a wall straight outward, recording get_error() every 6 inches. You should see the value drop sharply at ~13.5″ (deadzone exit) and stay low past ~20″. Establishes your venue's actual deadzone limits.
  3. Heading-after-turn test. Stop, turn 90 degrees, stop. Time how long until GPS heading matches IMU heading within ±2 degrees. Should be 3–5 seconds. Longer means strip damage or sensor degradation.
  4. Auton drift comparison. Run your skills auton without GPS resets. Measure final-position error. Then add 2 GPS resets at chosen checkpoints. Re-run. The difference quantifies what GPS is buying you. Document in your notebook.
Document everything. GPS tuning is venue-specific. Each event needs a re-verification. Use the Sensor Calibration Log template to record offset values, observed deadzone, quality thresholds, and reset checkpoint coordinates for each venue.
// Section 08

CAD & Verification 🖌

What to model in CAD before mounting, and the verification checklist before competition.

What to CAD Before Mounting

Reference CAD Resources

🖌 Mechanism Concept Sprint 💬 CAD-to-Code Workflow 📊 Sensor Onboarding Roadmap

Verification Checklist Before Competition

Hardware
[ ]GPS Sensor mounted at 10.5″ height (verified with ruler at chassis ride height).
[ ]Sensor faces a perimeter wall with no occlusion across full lift / intake / gripper range.
[ ]Smart Cable routed with strain relief; no pinch points; service loop at sensor.
[ ]Field Code strip on the venue's field is intact — no peeling, marker damage, or missing sections.
Calibration
[ ]xOffset and yOffset measured (lens to chassis center) and entered in code.
[ ]Offset verified against 2 opposite field corners — both read correct chassis-center coordinates within ±2″.
[ ]Initial position passed to constructor matches actual match starting location for each auton variant.
[ ]Quality threshold (typical: 0.05 m) calibrated for venue — observed at known good positions.
Code & Auton
[ ]GPS reads always check get_error() before being trusted.
[ ]Sanity-limit on position correction: don't apply if GPS and odom disagree by more than threshold.
[ ]GPS resets in skills auton placed at checkpoints where deadzone is not a concern.
[ ]Brain screen displays current GPS quality — the debug surface for at-event troubleshooting.
Notebook
[ ]Build entry: mounting decision, height, orientation, offset values logged.
[ ]Decision matrix: GPS vs tracking-wheel odometry vs both, with criteria and weighted scores.
[ ]Calibration log: per-venue offset re-verifications, quality observations, deadzone measurements.
[ ]Auton-drift comparison: with-GPS vs without-GPS final-position error documented.

Interview Talking Points

Why we use GPS: "We have a 60-second skills run, and our encoder odometry drifts about 2 inches by the end. Adding two GPS resets at known checkpoints in the middle of the routine cuts that drift to under half an inch. We use GPS as a periodic correction layer, not as our primary feedback — the IMU and encoders give us the fast updates we need for closed-loop control."

How we made it reliable: "Three things. First, we always check the sensor's self-reported error before trusting a read — if quality is below threshold, we skip the reset rather than apply bad data. Second, we sanity-limit corrections so a wildly-disagreeing GPS read can't teleport our position estimate. Third, we verify offset calibration at every venue against two field corners, because we've seen the offset drift after sensor remounting."

Tradeoffs we accepted: "The GPS has a 13.5-inch deadzone, so we cannot rely on it during scoring approaches near walls. We accept that and use it only during transit segments. We could add tracking-wheel odometry to handle wall-adjacent positioning, but the GPS-reset pattern alone gets us most of the way there for skills."

Check for Understanding

Your GPS-equipped auton works perfectly in skills runs but drifts unpredictably during matches. The sensor passes all corner-position checks, quality is good, mounting is correct. Most likely cause?
The GPS mounting offset has drifted
The field code strip is damaged
Other robots occlude line-of-sight to the perimeter wall during matches but not skills
The IMU drift rate is higher than expected

Why: The behavior "works in skills, fails in matches" is the giveaway. Skills runs have only one robot on the field; matches have four. Other robots, mobile goals, and game elements all block GPS line-of-sight at unpredictable times during a match. The fix: rely less on GPS during the match itself, do most resets at moments when the field is clearer (e.g., after match-load, before the final scoring sequence), and have a fallback to pure odometry when GPS quality drops.

Related Guides

← ALL GUIDES