Context
Upstream OpenMower LowLevel relies on a heartbeat from the high-level stack. If no heartbeat is received within 500 ms, firmware marks ROS as not running and latches emergency. This firmware has micro-ROS agent reconnect handling, but no high-level heartbeat/failsafe contract yet.
Upstream Reference Behavior
OpenMower LowLevel:
- Receives
ll_heartbeat packets from the high-level stack.
- Uses a 500 ms heartbeat timeout.
- Latches emergency when heartbeat is missing.
- Allows high-level code to request emergency latch.
- Allows high-level code to request emergency release.
- Tracks ROS-running state for LEDs, UI, sound, and safety behavior.
Acceptance Criteria
- Define ROS 2 API for firmware heartbeat from OpenMower ROS.
- Track last heartbeat timestamp independently from micro-ROS agent connection state.
- Latch emergency when heartbeat timeout expires.
- Publish firmware/high-level connection state.
- Support high-level emergency request.
- Support high-level emergency release request, coordinated with physical emergency inputs.
- Make timeout configurable or clearly document the default.
- Add LED/status indication for heartbeat timeout.
- Document the heartbeat contract so OpenMower ROS can implement the matching publisher/client.
Notes
This should complement micro-ROS agent reconnect. Agent connected does not necessarily mean the mower high-level controller is alive and safe.
Context
Upstream OpenMower LowLevel relies on a heartbeat from the high-level stack. If no heartbeat is received within 500 ms, firmware marks ROS as not running and latches emergency. This firmware has micro-ROS agent reconnect handling, but no high-level heartbeat/failsafe contract yet.
Upstream Reference Behavior
OpenMower LowLevel:
ll_heartbeatpackets from the high-level stack.Acceptance Criteria
Notes
This should complement micro-ROS agent reconnect. Agent connected does not necessarily mean the mower high-level controller is alive and safe.