feat(social): robot mesh comms — peer announce + person handoff (Issue #171) #202

Merged
sl-jetson merged 1 commits from sl-jetson/issue-171-mesh-comms into main 2026-03-02 11:17:03 -05:00
Collaborator

Summary

  • MeshPeer.msg — 1 Hz DDS heartbeat per robot: robot_id, social_state, active_person_ids, greeted_person_names, battery_pct
  • MeshHandoff.msg — person context transfer on STATE_LEAVING: identity, bearing/distance, conversation_summary, last_utterance/last_response, language
  • mesh_comms_node — subscribes /social/person_states + /social/orchestrator/state; publishes /social/mesh/announce (1 Hz BEST_EFFORT); triggers handoff when person transitions to LEAVING; tracks peers with configurable timeout; propagates mesh-wide greeting deduplication via /social/mesh/greeted

Topics

Topic Msg Dir Purpose
/social/mesh/announce MeshPeer pub+sub Peer heartbeat (BEST_EFFORT DDS multicast)
/social/mesh/handoff MeshHandoff pub+sub Person context on LEAVING
/social/mesh/peers String (JSON) pub Peer list for UI / diagnostics
/social/mesh/greeted String (JSON) pub Mesh-wide greeted names (dedup)

Test plan

  • 73/73 tests pass (test_mesh_comms.py)
  • MeshPeer.msg / MeshHandoff.msg fields verified
  • CMakeLists.txt updated with new messages
  • Peer tracking: add, update, stale cleanup
  • Greeting deduplication: merge from peers, expiry after greeted_memory_s
  • Handoff trigger: fires on LEAVING, no duplicate, cleared when person gone
  • Self-announce ignored (own robot_id filtered)
  • setup.py entry point, mesh_params.yaml + mesh.launch.py created

Closes #171

🤖 Generated with Claude Code

## Summary - **`MeshPeer.msg`** — 1 Hz DDS heartbeat per robot: `robot_id`, `social_state`, `active_person_ids`, `greeted_person_names`, `battery_pct` - **`MeshHandoff.msg`** — person context transfer on STATE_LEAVING: identity, bearing/distance, `conversation_summary`, `last_utterance`/`last_response`, `language` - **`mesh_comms_node`** — subscribes `/social/person_states` + `/social/orchestrator/state`; publishes `/social/mesh/announce` (1 Hz BEST_EFFORT); triggers handoff when person transitions to LEAVING; tracks peers with configurable timeout; propagates mesh-wide greeting deduplication via `/social/mesh/greeted` ## Topics | Topic | Msg | Dir | Purpose | |-------|-----|-----|---------| | `/social/mesh/announce` | `MeshPeer` | pub+sub | Peer heartbeat (BEST_EFFORT DDS multicast) | | `/social/mesh/handoff` | `MeshHandoff` | pub+sub | Person context on LEAVING | | `/social/mesh/peers` | `String` (JSON) | pub | Peer list for UI / diagnostics | | `/social/mesh/greeted` | `String` (JSON) | pub | Mesh-wide greeted names (dedup) | ## Test plan - [x] 73/73 tests pass (`test_mesh_comms.py`) - [x] `MeshPeer.msg` / `MeshHandoff.msg` fields verified - [x] CMakeLists.txt updated with new messages - [x] Peer tracking: add, update, stale cleanup - [x] Greeting deduplication: merge from peers, expiry after `greeted_memory_s` - [x] Handoff trigger: fires on LEAVING, no duplicate, cleared when person gone - [x] Self-announce ignored (own `robot_id` filtered) - [x] `setup.py` entry point, `mesh_params.yaml` + `mesh.launch.py` created Closes #171 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sl-webui added 1 commit 2026-03-02 11:14:32 -05:00
feat(social): robot mesh comms — peer announce + person handoff (Issue #171)
Some checks failed
social-bot integration tests / Lint (flake8 + pep257) (push) Failing after 9s
social-bot integration tests / Core integration tests (mock sensors, no GPU) (push) Has been skipped
social-bot integration tests / Lint (flake8 + pep257) (pull_request) Failing after 9s
social-bot integration tests / Core integration tests (mock sensors, no GPU) (pull_request) Has been skipped
social-bot integration tests / Latency profiling (GPU, Orin) (push) Has been cancelled
social-bot integration tests / Latency profiling (GPU, Orin) (pull_request) Has been cancelled
e5236f781b
New MeshPeer.msg (1 Hz DDS heartbeat: robot_id, social_state, active persons,
greeted names) and MeshHandoff.msg (person context transfer on STATE_LEAVING).
mesh_comms_node subscribes to person_states and orchestrator/state, publishes
announce heartbeat, triggers handoff on LEAVING, tracks peers with timeout
cleanup, and propagates mesh-wide greeting deduplication via /social/mesh/greeted.
73/73 tests passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit bfd58fc98c into main 2026-03-02 11:17:03 -05:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#202
No description provided.