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.