Where It Can Run

This page defines both the intended operating environment and its exclusions. Everything here is scoped by what the hardware, the model, and the safety layer were actually built and tested for, not by what the car might survive.

The Intended Operating Domain

SidewalkPilot is a supervised sidewalk research platform. The domain it is built for is:

  • Paved pedestrian sidewalks with a recognizable corridor: a walkable strip bounded on both sides by an edge the vision stack can find (grass line, curb, fence, wall). The vision fallback in vision.py explicitly looks for a left and right corridor edge (left_edge_found / right_edge_found) and a corridor width; a scene with two findable edges is the intended case.
  • Selected controlled test sections where the operator can walk alongside the car with the Xbox controller and stop when the route is no longer clear.
  • Roughly flat, single-level ground. The chassis is a Yahboom Ackermann 520M with a fixed camera pitch; there is no ramp, stair, or slope handling in the code.
  • Operator-selected low speed. MAX_AUTONOMOUS_SPEED_MPH = 3.2 is declared but is not enforced as a closed-loop speed cap. The current LiDAR governor constrains a reference throttle command, not mph.
  • Routes that exist in the nav graph. GPS navigation (navigation.py) does A* over trossachs_nav_graph.json. The car can only self-navigate along segments that are actually in that graph; anywhere off-graph is manual-only driving.

Preconditions Before Any Autonomous Run

Autonomy is never the default state. Before the car moves under the model, all of the following must hold:

  • A human operator is present with the Xbox controller. Manual override is the top software decision layer: qualifying steering, throttle, or brake input cancels autonomy when processed by the Raspberry Pi 5 loop.
  • Autonomy is explicitly armed by the operator (AUTONOMY_TOGGLE_BUTTON = 0); it does not self-enable.
  • The camera stream is live. apply_autonomous_controls(...) hard-stops with model_unavailable or model_low_confidence if webcam_vision is missing, local analysis is older than 0.75 seconds, a matching Jetson Orin Nano result is unavailable or older than 0.25 seconds, or confidence is below LOW_CAMERA_CONFIDENCE (0.25). This verifies result freshness/availability; accepted neural confidence is not calibrated proof that the scene is understood.
  • The LiDAR safety layer is available for AEB. AEB is toggled by AEB_TOGGLE_BUTTON = 14 and defaults on (Metrics.aeb_enabled = True). LiDAR dropouts are tolerated (the reader auto-reconnects) but a run should not start in a place where obstacle detection is expected to be unusable.

Where It Runs Today Versus Planned

  • Runs today (tested): selected supervised sidewalk/driveway sections, primarily in daylight, with the operator in the loop. A separate v3.1b night test is historical evidence for a more difficult condition, not approval for ordinary night operation.
  • Planned / not-yet-authorized: unsupervised operation, public shared sidewalks with pedestrian traffic, or any route without the controller ready and an independent power-cut method available. None of that is claimed as tested, and it is outside the current operating domain.

Explicit Exclusions

Do not run autonomously on public roads, at unsupervised crossings, around uncontrolled pedestrian traffic, on stairs/steep ramps, in rain or wet electronics conditions, in snow/ice, outside the verified route geometry, or when camera/model/LiDAR/controller health is uncertain. Night and severe glare remain separate experimental conditions rather than ordinary operation.

Speed, Lighting, and Weather

The declared MAX_AUTONOMOUS_SPEED_MPH is not an enforced measured-speed cap. Actual motion depends on throttle mapping, battery, load, and surface. The operator therefore selects low test speed and verifies physical stopping behavior.

The camera model has bounded daylight/shadow field evidence, not all-lighting robustness. The chassis and exposed electronics are not weather-certified. Dry daylight on a selected, empty, supervised route is the default operating condition.