Project robosnomo: Technical Overview
Project RoboSnomo represents a unique convergence of vintage mechanical engineering and modern autonomous vehicle technology. We are converting a 1976 Polaris Colt snowmobile into a fully autonomous vehicle using a Tesla-inspired three-layer architecture, implemented at a hobbyist-plus engineering level.
Architecture Philosophy
The system is designed around three distinct layers, each with specific responsibilities and communication protocols:
Layer 1: The Brain (AI & Perception)
Hardware: NVIDIA Jetson Orin Nano Super (67 TOPS AI performance)
Functions: Stereo vision processing, object detection (YOLOv8), semantic segmentation, path planning, sensor fusion, high-level decision making
AcquiredLayer 2: The Heart (Engine Control)
Hardware: Speeduino v0.4 ECM (STM32F407 preferred for dual CAN bus)
Functions: 2-stroke engine management, RPM monitoring, temperature sensing, fuel injection control, telemetry reporting to AI layer
SourcingLayer 3: The Muscle (Actuation)
Hardware: Industrial linear actuators (400-1000 lbs force), high-torque servos
Functions: Steering control (±30° range), hydraulic brake actuation, throttle cable control, position feedback
SourcingCommunication Backbone: CAN Bus
All layers communicate via a 500 kbps CAN 2.0B network, providing deterministic real-time performance with <2ms worst-case latency for critical commands. CAN bus offers proven automotive-grade reliability with built-in error detection, fault confinement, and priority-based arbitration.
Development Timeline
- Winter 2025: Hardware procurement, Jetson development environment setup, CAN bus bench testing
- Spring 2025: Core systems integration, Speeduino ECM installation, actuator mounting and testing
- Summer 2025: Vision system calibration, AI model training on winter dataset, sensor fusion implementation
- Fall 2025: Progressive field testing (tethered → low-speed → full autonomous), safety validation
Current Status
Complete 3-layer system design
Hardware acquired (1TB model)
ECM, actuators, vision sensors
Vision pipeline, control systems
Layer 1: The Brain - NVIDIA Jetson Orin Nano Super
Compute Specifications
Camera & Vision Interfaces
MIPI CSI-2 Connectors: 2x 22-pin connectors supporting up to 6 simultaneous camera streams
- CAM0: 1x 2-lane CSI interface
- CAM1: 1x 4-lane CSI interface (configurable as 2x 2-lane)
- Maximum Resolution: 4K @ 90 FPS with compatible sensors
- Image Signal Processor: ISP 6.x with hardware-accelerated debayering, HDR, noise reduction
I/O Capabilities
- USB: 1x USB-C 3.2 (10 Gbps) + 4x USB-A 3.2 ports
- Ethernet: 1x Gigabit Ethernet (10/100/1000 Mbps)
- GPIO: 40-pin expansion header (Raspberry Pi compatible layout) with I2C, SPI, UART, PWM
- PCIe: Gen 3 support (1x x4 + 1x x2 or 2x x1 lanes)
- DisplayPort: 1x DP 1.2 output (4K @ 30 Hz max)
CAN Bus Integration
Implementation: MCP2515 SPI-to-CAN controller + MCP2551 transceiver
Software Stack: SocketCAN Linux driver, python-can library for application layer
MCP2515 VCC → Pin 1 (3.3V)
MCP2515 GND → Pin 6 (Ground)
MCP2515 SCK → Pin 23 (SPI1_SCK)
MCP2515 MOSI → Pin 19 (SPI1_MOSI)
MCP2515 MISO → Pin 21 (SPI1_MISO)
MCP2515 CS → Pin 24 (SPI1_CS0)
MCP2515 INT → Pin 18 (GPIO for interrupts)
Environmental Specifications
- Operating Temperature: -25°C to +90°C (junction temperature)
- Recommended Range: 0°C to 50°C for standard applications
- Winter Operation: Suitable for snowmobile use with proper enclosure and thermal management
- Cooling: Active cooling (fan) required for sustained 25W MaxN mode
Software & AI Framework Support
- JetPack SDK: Version 6.2 (Ubuntu 22.04 L4T base)
- CUDA: Version 12.6 with cuDNN and cuBLAS libraries
- Deep Learning: TensorFlow 2.15, PyTorch 2.x, TensorRT optimization
- Computer Vision: OpenCV with CUDA acceleration, VisionWorks SDK, DeepStream
- ROS Support: ROS 2 Humble for robotics middleware (sensor fusion, path planning)
Layer 2: The Heart - Speeduino ECM
Hardware Platform
Recommended: STM32F407-based Speeduino (not Arduino Mega) for native dual CAN bus support
2-Stroke Engine Configuration
Challenge: Speeduino is optimized for 4-stroke engines. 2-stroke single-cylinder requires configuration workarounds.
Recommended Configuration
- Displacement: Enter half of actual engine displacement (e.g., 100cc for 200cc engine)
- Cylinders: Set to 2 (even though it's single-cylinder)
- Stroke: 2-stroke mode
- Injectors: 1 (single injector)
- Spark Mode: Single channel or wasted spark
- Load Algorithm: Alpha-N (TPS-based) recommended over Speed Density due to expansion chamber pressure pulses
Rationale: Most 2-stroke single-cylinder engines provide 1 trigger pulse per crankshaft revolution (360°). Speeduino's "Basic Distributor" mode expects 1 pulse per 720°, causing RPM to read at 2x actual speed. Configuring as a 2-cylinder engine compensates for this.
Sensor Inputs
| Sensor | Type | Voltage Range | Purpose |
|---|---|---|---|
| CLT (Coolant Temp) | NTC Thermistor | 0-5V analog | Engine protection, warmup enrichment |
| IAT (Intake Air Temp) | NTC Thermistor | 0-5V analog | Density compensation, fuel corrections |
| TPS (Throttle Position) | 3-wire Potentiometer | 0-5V analog | Alpha-N load source, acceleration detection |
| RPM/Crank Position | Hall Effect or VR | 0-5V or 0-12V digital | Engine speed, ignition timing reference |
| O2 Sensor (Optional) | Wideband Controller | 0-5V analog | Closed-loop fuel tuning, autotune |
Fuel & Ignition Management
Fuel Mapping
- VE Table Resolution: 16x16 grid (256 cells)
- Axes: RPM (X-axis) vs Load (Y-axis, TPS % for Alpha-N)
- Interpolation: 3D interpolation for smooth transitions between cells
- Corrections: Coolant temp, air temp, acceleration enrichment, cranking enrichment
Ignition Timing
- Advance Table: 16x16 grid matching fuel table axes
- Range: Typically -10° to +40° BTDC (user-configurable)
- Dwell Control: Variable dwell map with battery voltage compensation
- CDI Integration: Use 5V logic output to trigger stock CDI (maintains proven high-energy spark)
CAN Bus Communication
Protocol: OBD2 standard PIDs + custom message definitions
Telemetry to Jetson (100 Hz):
- Engine RPM (PID 0x0C)
- Coolant temperature (PID 0x05)
- Intake air temperature (PID 0x0F)
- Throttle position (PID 0x11)
- Battery voltage, error codes, injector duty cycle
Commands from Jetson:
- Throttle position setpoint (autonomous mode)
- Engine enable/disable (safety override)
TunerStudio Configuration
All ECM parameters are configured via TunerStudio MS software (Windows/Mac/Linux):
- Connection: Serial over USB (115200 baud)
- Real-Time Tuning: Modify fuel/ignition tables while engine running
- Autotune: Laptop-based algorithm automatically adjusts VE table using wideband O2 feedback
- Data Logging: 10-20 samples/second for post-analysis
Layer 3: The Muscle - Actuation Systems
Steering Actuation
Recommended: Progressive Automations PA-04-12-400
Professional Upgrade Option: LINAK LA77 or TiMOTION MA2 (6000-10000N force, IP69K rated, CAN bus interface, -40°C to +85°C, $600-1500)
Brake Actuation
Recommended: Progressive Automations PA-04-6-400
Force Calculation: Target brake pressure of 1200 PSI requires ~530 lbf (2360N). A 400 lb actuator is adequate for most scenarios; 800-1000 lb provides safety margin for emergency stops.
Safety Feature: Consider spring-applied hydraulic release (SAHR) brake system for true fail-safe operation—automatic braking on power loss.
Throttle Control
High-Performance: Dynamixel MX-106T
Budget Alternative: Hitec HS-7950TH RC servo (32 kg·cm torque, standard RC PWM, $100-120, weatherproof with enclosure)
Note: Dynamixel rated -5°C to +80°C; requires heated enclosure for extreme cold snowmobile operation.
Control Interfaces
| Interface | Best For | Advantages | Disadvantages |
|---|---|---|---|
| CAN Bus / CANopen | Professional multi-actuator system | Position control, diagnostics, standardized protocol | Requires CAN-enabled actuators (higher cost) |
| RS-485 | Dynamixel servo motors | Long-distance, robust, multiple devices on one bus | Requires Dynamixel protocol library |
| PWM | Budget RC servos, proof-of-concept | Simple, widely supported | No built-in feedback (requires separate sensors) |
| Analog (0-5V or 0-10V) | Industrial actuators without digital interface | Simple wiring, reliable | No protocol-based diagnostics |
Power Requirements
Peak Current Draw (All Systems):
- Steering actuator: 10-12A peak
- Brake actuator: 10-12A peak
- Throttle servo: 2-5A peak
- Jetson Orin Nano: 5A typical (25W MaxN mode @ 12V with DC-DC converter)
- Total System: ~37A peak draw
Battery Recommendation:
- Budget: 60Ah AGM battery (Optima YellowTop D31A, $250-300)
- Performance: 50Ah LiFePO4 with heating blanket ($600-800) for better cold-weather performance
- Cold Weather Adjustment: Battery capacity drops 20-40% at -20°C; size accordingly
Mounting & Mechanical Integration
- Linkage Type: Clevis (dual-pivot) mounting most common for linear actuators
- Rod Ends: Use quality spherical bearings (robosnomo COM-series, QA1 Precision) to minimize backlash
- Backlash Target: <5mm at ski for steering precision
- Mechanical Advantage: Optimize linkage geometry to reduce actuator force requirements
- Vibration Damping: Rubber bushings at pivot points, isolate electronics with Lord Micromounts
- Materials: Aluminum 6061-T6 (lightweight, corrosion-resistant), stainless steel for high-stress applications
CAN Bus Integration & Communication
Protocol Specifications
Physical Layer
Differential Signaling
- Recessive State (Logic 1): CAN-H = 2.5V, CAN-L = 2.5V, Differential = 0V
- Dominant State (Logic 0): CAN-H = 3.5V, CAN-L = 1.5V, Differential = 2.0V
- Principle: Dominant (0) overrides recessive (1), enabling priority-based arbitration
Wiring Requirements
- Cable Type: Shielded twisted pair, 120Ω characteristic impedance
- Twist Rate: Minimum 40 twists/meter (ideally 1 twist per 25mm)
- Wire Gauge: 20-24 AWG for automotive applications
- Recommended Cable: Belden 3084A, DeviceNet cable, or automotive-grade CAN cable
- Termination: 120Ω resistors at both ends of bus only (measure 60Ω total)
- Stub Length: Keep actuator/sensor connections under 30cm maximum
- Shielding: Ground shield at ONE point only to prevent ground loops
Network Topology
(120Ω) (120Ω)
│ │
├─── MCP2515 SPI-to-CAN │
│ │
[Vision/Radar] [Actuator Nodes]
│ ├─ Steering (0x200)
│ ├─ Brake (0x210)
│ └─ Throttle (0x220)
│
[GPS/IMU Module]
Message ID Architecture (Priority-Based)
| ID Range | Subsystem | Priority | Examples |
|---|---|---|---|
| 0x001-0x0FF | Safety & Emergency | Highest | Emergency stop (0x001), Kill switch (0x002) |
| 0x100-0x1FF | ECM Critical Data | High | Engine RPM (0x100), Coolant temp (0x110) |
| 0x200-0x2FF | Actuator Commands | High | Steering (0x200), Brake (0x210), Throttle (0x220) |
| 0x300-0x3FF | Vision/Sensor Data | Medium | Obstacle detection (0x300), GPS (0x310) |
| 0x400-0x4FF | Telemetry/Diagnostics | Low | Status messages (0x400), Logs (0x410) |
| 0x500-0x7FF | Future Expansion | Variable | System heartbeat (0x500), Reserved |
Note: Lower ID numbers have higher priority. During arbitration, ID 0x001 will always win over ID 0x100.
Message Timing & Frequency
| Message Type | ID | Frequency | Sender | Receivers |
|---|---|---|---|---|
| Emergency Stop | 0x001 | Event-driven | Any node | All |
| Engine RPM | 0x100 | 100 Hz (10ms) | Speeduino | Jetson, Android App |
| Steering Command | 0x200 | 50 Hz (20ms) | Jetson | Steering Actuator |
| Brake Command | 0x210 | 50 Hz (20ms) | Jetson | Brake Actuator |
| Obstacle Detected | 0x300 | Event-driven | Jetson | All |
| System Heartbeat | 0x500 | 10 Hz (100ms) | Jetson | All actuators |
Error Handling & Fault Confinement
CAN bus includes five built-in error detection mechanisms:
- Bit Error: Node detects mismatch between transmitted and received bit
- Stuff Error: More than 5 consecutive identical bits (violates bit stuffing rule)
- CRC Error: Cyclic redundancy check fails
- Form Error: Fixed-format fields contain illegal values
- Acknowledgment Error: No node acknowledges message reception
Three Error States
- Error Active: Normal operation (TEC < 128 && REC < 128), sends active error frames
- Error Passive: Degraded mode (128 ≤ TEC or REC < 256), sends passive error frames
- Bus-Off: Node disconnected (TEC ≥ 256), requires recovery sequence
Safety Feature: Faulty nodes automatically remove themselves from the bus before disrupting communication.
Safety Heartbeat Implementation
Concept: Jetson sends periodic "alive" message every 100ms. Actuators expect heartbeat; if missing >300ms, enter safe mode (stop movement, engage brake).
import can
bus = can.interface.Bus(channel='can0', bustype='socketcan')
msg = can.Message(arbitration_id=0x500, data=[0x01])
task = bus.send_periodic(msg, 0.1) # 100ms period, kernel-managed
Actuator Response: If heartbeat timeout exceeds 300ms, actuator controller immediately stops all motors, engages brake, and enters fail-safe mode until heartbeat resumes.
Vision System & AI Models
Stereo Camera System
Recommended: Arducam IMX477 Stereo Camera Kit
Vision Processing Pipeline
- Image Acquisition: Synchronized stereo frame capture at 60 FPS (720p for real-time performance)
- Rectification: Transform images to align epipolar lines (one-time calibration matrix applied)
- Stereo Matching: SGBM (Semi-Global Block Matching) algorithm generates disparity map
- Depth Estimation: Convert disparity to 3D point cloud (depth = baseline × focal_length / disparity)
- Object Detection: YOLOv8 identifies obstacles (trees, rocks, other vehicles)
- Semantic Segmentation: Classify terrain (snow, ice, trail, vegetation)
Performance: End-to-end latency of 44-78ms for full 1080p pipeline. Using 720p resolution achieves 60+ FPS for real-time autonomous control.
Object Detection Models
Recommended: YOLOv8n (Nano) with INT8 Quantization
Custom Training: Retrain on winter-specific dataset (15,000+ images of snow, trees, rocks, trails, other snowmobiles). Use RSOD (Remote Sensing Object Detection) dataset as starting point.
Semantic Segmentation
Recommended: MFA-DeepLabv3+ (Multi-Feature Aggregation)
- FPS on Jetson Orin Nano: 36.4 FPS (real-time capable)
- Purpose: Classify each pixel as snow, ice, rock, vegetation, trail, sky
- Integration: Combines with stereo depth for 3D terrain understanding
- Training: Use Cityscapes dataset augmented with winter off-road images
Path Planning Algorithms
Hybrid Approach (Recommended)
- Global Planner: A* algorithm on GPS waypoint map (runs at 1 Hz, generates optimal route)
- Local Planner: DWA (Dynamic Window Approach) for real-time obstacle avoidance (10-20 Hz)
- Rationale: A* provides optimal long-range path; DWA handles dynamic obstacles detected by vision
Alternative: RRT (Rapidly-exploring Random Tree)
- Speed: 0.23s planning time (very fast)
- Trade-off: Sub-optimal paths (longer routes)
- Use Case: Fallback when A* takes too long in complex environments
Sensor Fusion Architecture
Fusion Rate: 100 Hz using Extended Kalman Filter (EKF)
Sensors Integrated:
- Stereo Vision: 3D obstacle positions, terrain classification (20 Hz)
- 77GHz Radar: Long-range obstacle detection (200m range), penetrates snow/fog (10 Hz)
- IMU (BNO085): Acceleration, gyroscope, magnetometer (100 Hz)
- GPS (ZED-F9P RTK): High-precision positioning (10 Hz, <2cm accuracy with RTK correction)
Software: ROS 2 robot_localization package implements EKF fusion, outputs fused pose estimate at 100 Hz.
Radar Sensor (Recommended)
Budget Option: Texas Instruments AWR1843 (77 GHz)
- Frequency: 77 GHz (20x better range resolution than 24 GHz)
- Range: 200-300 meters
- Range Resolution: 4 cm (vs 75 cm for 24 GHz)
- Snow/Fog Performance: Radar >> LiDAR > Camera in adverse weather
- Interface: UART/SPI to Jetson
- Cost: ~$300 (development kit)
Edge AI Optimization
TensorRT Optimization Pipeline
- Train model in PyTorch/TensorFlow
- Export to ONNX format
- Convert to TensorRT engine with INT8 calibration
- Benchmark: Measure FPS and accuracy on Jetson
- Deploy: Load TensorRT engine in Python/C++ inference code
Performance Gains: 3-15x speedup depending on model and precision (FP32 → FP16 → INT8)
INT8 Quantization Benefits
- Speed: 2-4x faster inference vs FP32
- Power: 16% reduction in energy consumption
- Accuracy: Typically <3% mAP loss for well-calibrated models
- Memory: 4x smaller model size (fits in cache, reduces bandwidth)
Winter-Specific Challenges & Solutions
| Challenge | Impact | Solution |
|---|---|---|
| Low Contrast (White Snow) | Stereo matching struggles with textureless surfaces | Use HDR imaging (IMX477 supports 60 FPS HDR), radar fusion |
| Sun Reflections on Snow | Overexposure, false obstacle detection | HDR capture, polarizing filters, adaptive exposure control |
| Hidden Obstacles (Under Snow) | Vision cannot detect buried rocks/logs | Radar penetrates snow surface, combines with GPS trail map |
| Variable Lighting (Sunrise/Sunset) | Inconsistent detection performance | Train models on diverse lighting conditions, use normalized image preprocessing |
| Falling Snow/Fog | Obscures vision, false positives | Radar primary sensor in poor visibility, reduce speed in degraded mode |
Complete Bill of Materials
Layer 1: AI & Perception
| Component | Model / Specification | Quantity | Est. Cost | Status |
|---|---|---|---|---|
| Main Computer | NVIDIA Jetson Orin Nano Super (1TB) | 1 | $599 | Acquired |
| Stereo Cameras | Arducam IMX477 Stereo Kit (12.3MP, HDR) | 1 kit | $250 | Sourcing |
| Radar Sensor | Texas Instruments AWR1843 (77 GHz) | 1 | $300 | Planned |
| IMU | BNO085 9-DOF (100 Hz fusion) | 1 | $20 | Planned |
| GPS (RTK) | u-blox ZED-F9P (<2cm accuracy) | 1 | $200 | Planned |
| CAN Controller | MCP2515 SPI-to-CAN + MCP2551 Transceiver | 1-2 | $15 ea | Planned |
| Enclosure | Weatherproof IP65+ (Pelican or similar) | 1 | $60 | Planned |
Layer 2: Engine Control
| Component | Model / Specification | Quantity | Est. Cost | Status |
|---|---|---|---|---|
| ECM Board | Speeduino v0.4 (STM32F407-based preferred) | 1 | $150 | Sourcing |
| CAN Transceiver | MCP2551 or TJA1050 (if not on board) | 1 | $5 | Planned |
| Coolant Temp Sensor | NTC Thermistor (automotive-grade) | 1 | $15 | Planned |
| Intake Air Temp Sensor | NTC Thermistor | 1 | $15 | Planned |
| Throttle Position Sensor | 3-wire potentiometer (0-5V) | 1 | $20 | Planned |
| Wideband O2 Sensor | AEM 30-0300 X-Series + Controller | 1 | $200 | Planned |
| Fuel Injector | High-Z (12-14Ω), sized for engine displacement | 1 | $50 | Planned |
Layer 3: Actuation
| Component | Model / Specification | Quantity | Est. Cost | Status |
|---|---|---|---|---|
| Steering Actuator | Progressive Automations PA-04-12-400 (400 lbs, 12", IP66) | 1 | $450 | Sourcing |
| Brake Actuator | Progressive Automations PA-04-6-400 (400 lbs, 6") | 1 | $380 | Sourcing |
| Throttle Servo | Dynamixel MX-106T (84 kg·cm, RS-485) | 1 | $480 | Planned |
| Position Sensors | Redundant Hall effect + Potentiometer per actuator | 3 sets | $60 | Planned |
| Rod Ends / Clevis | robosnomo COM-series spherical bearings | 6 | $120 | Planned |
Communication & Wiring
| Component | Specification | Quantity | Est. Cost |
|---|---|---|---|
| CAN Bus Cable | Belden 3084A or DeviceNet, 120Ω shielded twisted pair | 10 meters | $50 |
| 120Ω Termination Resistors | 1/4W, 1% tolerance | 4 (2 spares) | $2 |
| Weatherproof Connectors | Deutsch DT or TE Superseal series | 10 | $50 |
| Wiring Harness Materials | 18-20 AWG wire, heat shrink, split loom | 1 set | $100 |
Power System
| Component | Specification | Quantity | Est. Cost |
|---|---|---|---|
| Battery | 60Ah AGM (Optima YellowTop D31A) or 50Ah LiFePO4 | 1 | $280 / $700 |
| DC-DC Converter (Jetson) | 12V to 19V, 5A+ rated (for Jetson power) | 1 | $40 |
| Fuses & Circuit Breakers | Automotive blade fuses, 15A-30A | 6 | $30 |
| Kill Switch (Hardware) | Emergency stop relay, latching | 1 | $40 |
Cost Summary
Note: Costs exclude vintage snowmobile chassis, mechanical fabrication materials, and tools. Budget assumes hobbyist-plus components; professional-grade system with LINAK actuators and LiFePO4 battery would be ~$5,500-6,000.
Safety Systems & Testing Protocols
Critical Safety Features
1. Hardware Emergency Stop (Kill Switch)
- Implementation: Latching relay wired directly to ignition circuit, independent of all software
- Activation: Physical button accessible to operator, wireless remote backup
- Response Time: Immediate ignition cut (<10ms electrical propagation)
- Failsafe: Power loss opens relay, killing engine (fail-safe state)
- Manual Override: Retained manual brake lever and throttle cable for human takeover
2. CAN Bus Watchdog & Heartbeat
- Jetson Heartbeat: Broadcast 0x500 message every 100ms (kernel-managed for reliability)
- Actuator Timeout: If no heartbeat received for >300ms, enter fail-safe mode
- Fail-Safe Actions: Stop all actuator movement, engage brake, center steering, throttle to idle
- Recovery: Once heartbeat resumes for >1 second, allow autonomous control to resume
3. Redundant Position Sensors
- Dual Sensors per Actuator: Hall effect encoder + analog potentiometer
- Cross-Check: If sensors disagree by >5%, flag fault and enter limp mode
- Rationale: Prevents runaway actuator due to single sensor failure
4. Vision System Failure Detection
- Frame Loss Monitor: If camera FPS drops below 20 for >2 seconds, declare vision failure
- Radar Fallback: Switch to radar-only navigation in degraded visual mode (reduced speed)
- GPS Trail Mode: Follow pre-mapped GPS waypoints if both vision and radar compromised
- Complete Failure: If all sensors fail, execute emergency stop sequence
5. Thermal & Power Monitoring
- Jetson Temperature: Monitor GPU/CPU temps; throttle AI workload if >80°C, shut down if >95°C
- Actuator Overcurrent: Monitor motor current; stop if >120% rated current for >5 seconds
- Battery Voltage: Alert at <11.5V, enter low-power mode at <11.0V, emergency stop at <10.5V
6. Geofencing (Software Boundaries)
- GPS Perimeter: Define allowed operating area as polygon on map
- Boundary Action: If GPS position exits perimeter, stop forward movement and alert operator
- Use Case: Prevent autonomous operation on roads, private property, or hazardous areas
Testing Protocols
Phase 1: Bench Testing (All Systems)
- Power-On Test: Verify all voltage rails, check for shorts, measure current draw
- CAN Bus Communication: Use candump/cansend to verify message transmission/reception
- Sensor Validation: Read all sensor values, verify ranges (CLT, IAT, TPS, position feedback)
- Actuator Stroke Test: Command full extension/retraction, verify position feedback accuracy
- Emergency Stop Test: Trigger kill switch, verify immediate ignition cut and actuator stop
- Jetson AI Performance: Run YOLOv8 inference, measure FPS and latency with test images
Success Criteria: All sensors reading within expected ranges, actuators respond to commands within 50ms, zero CAN bus errors over 1 hour operation, emergency stop <100ms response.
Phase 2: Static Engine Testing (Non-Moving)
- Speeduino Startup: Power on ECM, verify TunerStudio connection, check sensor readings
- Fuel System Priming: Test injector firing (engine not running), verify spray pattern
- Ignition Timing: Crank engine, use timing light to verify timing marks align with TunerStudio setting
- First Start: Use conservative fuel/timing maps, start engine, verify idle stability
- Sensor Validation: Rev engine, confirm RPM, CLT, TPS readings update correctly on CAN bus
- Autonomous Throttle Test: Command throttle position via CAN, verify servo response (engine running, stationary)
Success Criteria: Engine starts reliably, idles smoothly, all telemetry accurate, autonomous throttle control responsive without oscillation.
Phase 3: Tethered Testing (Limited Range)
- Steering Actuation: Test steering commands at standstill, verify ski movement matches command
- Brake Actuation: Test brake engagement, measure stopping force with scale
- Low-Speed Movement: Tether snowmobile to fixed point (10m rope), test forward/reverse/steering
- Vision Pipeline: Run stereo cameras + YOLO, verify object detection of obstacles in field of view
- Heartbeat Timeout Test: Disconnect Jetson CAN connection mid-operation, verify actuators enter fail-safe
Success Criteria: Actuators respond correctly to commands, vision system detects obstacles, fail-safe engages within 300ms of heartbeat loss.
Phase 4: Low-Speed Autonomous Testing
- Open Area Test: Flat snow field, no obstacles, clear weather
- Speed Limit: Maximum 5 mph (8 km/h) for initial tests
- Observer Present: Operator with kill switch remote walks alongside
- Waypoint Navigation: Follow simple GPS path (straight line, gentle turns)
- Obstacle Avoidance: Place cones in path, verify autonomous swerve or stop behavior
- Data Logging: Record all CAN messages, vision detections, GPS positions for post-analysis
Success Criteria: Completes waypoint path without human intervention, avoids all obstacles, stays within 2m of intended GPS path, zero safety system false triggers.
Phase 5: Progressive Speed Increases
- Incremental Speed: 5 mph → 10 mph → 15 mph → 20 mph over multiple test sessions
- Varied Terrain: Test on flat, gentle slopes, rough trails (progressively more challenging)
- Weather Conditions: Test in clear conditions first, then light snow, then poor visibility
- Emergency Stop Testing: Command emergency stop at each speed increment, measure stopping distance
- Sensor Fusion Validation: Verify radar and vision agree on obstacle positions
Success Criteria: Maintain stable control at each speed tier, obstacle detection reliable at increased speeds, stopping distance within safe limits for terrain.
Phase 6: Edge Case & Failure Mode Testing
- Single Sensor Failures: Disconnect camera, GPS, radar individually; verify graceful degradation
- Low Battery: Run until battery voltage triggers low-power mode, verify safe shutdown
- Extreme Cold: Test at -20°C to verify all components operational (actuators, battery, Jetson)
- Communication Loss: Simulate CAN bus wire disconnect, verify fail-safe engagement
- Mechanical Binding: Simulate actuator obstruction (steering blocked), verify overcurrent detection
Success Criteria: System enters safe mode for all single-point failures, no runaway behavior, operator alerted to fault via telemetry.
Safety Margins & Conservative Design
- Actuator Force: Size actuators for 2x calculated force requirement (safety margin for icy conditions)
- Speed Limits: Initial autonomous operation limited to 50% of maximum snowmobile speed
- Obstacle Detection Range: Maintain 3x stopping distance margin (e.g., at 20 mph with 10m stop, detect obstacles at 30m)
- Battery Capacity: Never discharge below 50% SoC to preserve battery life and maintain reserve
- CAN Bus Utilization: Target <50% bus load (far below 80% limit) for timing headroom
Regulatory & Insurance Considerations
- Off-Road Only: Not legal for on-road operation in most jurisdictions (no DOT approval)
- Private Property: Conduct all testing on private land with owner permission
- Liability Insurance: Consult with insurance provider; standard policies may not cover autonomous modifications
- Safety Signage: Clearly mark vehicle as "AUTONOMOUS - TESTING IN PROGRESS"
- Documentation: Maintain detailed logs of all tests, failures, and design changes for liability protection