You set every status yourself. Steps marked YOU WRITE get a brief and review questions only, never solution code.

Humanoid actuator diagnostics simulator

  • Step 1: python-can virtual bus, send and receive

    Two processes (or threads) on a virtual interface: one sends a frame, one receives and prints it.

  • Step 2: 8-byte packing (temp, current, position error, voltage) you write

    Idea: choose a scale and offset per field so it fits an integer width, pick byte order, document it in a table. Review your approach with the questions below.

    • What is your resolution per field, and is it good enough to see a 1°C trend?
    • What happens at the max and min values? Do you clamp or wrap?
    • Did you document byte order, and does the decoder agree?
  • Step 3: fault injection

    Inject overheat (slow temp ramp), gearbox wear (current creeping up for the same motion), sensor glitch (single impossible spikes), and dropout (missing frames).

  • Step 4: detection and fault codes you write

    Emphasize trend detection, not only thresholds: rate of change, moving averages, deviation from the joint's own baseline, missing-frame timeouts. Map each to a fault code.

    • Which faults does a pure threshold miss until it's too late?
    • How long a window do you need to call a trend, and what's the false-alarm cost?
    • How do you tell a sensor glitch from a real spike?
  • Step 5: live terminal status table

    A rich table: one row per joint, colored by health.

  • Step 6: FastAPI WebSocket stream

    Stream joint health and active faults as JSON.

  • Step 7: 3D robot visualization

    Original design, no third-party robot branding. Fallback: colored joint spheres on a stick figure.

  • Step 8: 60-second demo and README

    Show a fault being injected and caught before failure. README states clearly: simulation, not real hardware.

C++ milestone

  • Unpack a status frame, walk a buffer, fail safely you write

    Brief: read a byte buffer of N frames, unpack each with pointers, reject bad lengths and out-of-range values without crashing. Tests: empty buffer, length not a multiple of 8, max values, a truncated final frame. Review: where can you read out of bounds? What does your code do on bad input? Does it pass ASan?

Go milestone

  • Fleet telemetry ingest + fault summary service you write

    Brief: HTTP service ingests joint telemetry, keeps a short ring of history per robot+joint, returns a fault summary for the fleet. Acceptance: concurrent POSTs pass -race; history is bounded; malformed input returns 400 with a useful message; summary lists robot, joint, fault, since.

Robotics model lab (sim only)

  • Pick one: LeRobot imitation path or anomaly detector vs thresholds

    (a) Follow a beginner LeRobot imitation path on a public low-cost arm dataset in sim, or (b) train a simple anomaly detector on synthetic joint telemetry and compare with rule-based thresholds (precision, recall, detection lead time). No real robot, no production claims.