feat(safety): remote e-stop over 4G MQTT (Issue #63) #69
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-firmware/remote-estop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements remote e-stop over 4G cellular MQTT — closes Issue #63 (P0 safety-critical).
STM32 Firmware
safety.h/c:EstopSourceenum (ESTOP_CLEAR/TILT/RC_KILL/REMOTE/CELLULAR_TIMEOUT);safety_remote_estop(),safety_remote_estop_clear(),safety_get_estop(),safety_remote_estop_active()— latched until explicitZclear + robot DISARMEDusbd_cdc_if.c/h: CDC commandsE(ESTOP_REMOTE),F(ESTOP_CELLULAR_TIMEOUT),Z(clear latch)status.h/c:status_update()+remote_estopparam; both LEDs fast-blink 200ms (highest priority)main.c: Immediate motor cutoff onE/F(before RC handling); arming blocked whilesafety_remote_estop_active(); motor estop auto-clear gated;"es"field in JSON telemetry (0–4);status_update()updated to 5-arg signatureSafety Guarantees
motors.estop)Z+ robot must be DISARMEDJetson Bridge
remote_estop_node.py: paho-mqtt subscriber + pyserial writer; cellular watchdog firesF\nafter 5s MQTT drop in AUTO modeestop_params.yaml:mqtt_host,cellular_timeout_s,auto_estop_on_disconnectremote_estop.launch.py+setup.py+package.xmlupdatesdocker-compose.yml:remote-estopservice,depends_on: stm32-bridgetest_remote_estop.py: kill/clear/watchdog/latency unit testsTest Plan
E\nvia USB CDC → verify motors stop immediately, LED fast-blinks 200msZ\n→ verify estop cleared, robot re-armable via RC holdF\n→ same asE\nbut telemetry shows"es":4"es"field in JSON stream{"kill":true}→ verifyE\nreaches STM32 in <500msF\nafter 5spytest test/test_remote_estop.pyFixes #63
🤖 Generated with Claude Code
3a7576939etod41a9dfe10