sl-jetson fabb988e72
Some checks failed
social-bot integration tests / Lint (flake8 + pep257) (push) Failing after 4s
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 3s
social-bot integration tests / Core integration tests (mock sensors, no GPU) (pull_request) Has been skipped
social-bot integration tests / Latency profiling (GPU, Orin) (pull_request) Has been cancelled
social-bot integration tests / Latency profiling (GPU, Orin) (push) Has been cancelled
feat(social): voice command NLU — 30+ intents, confirmation flow (Issue #137)
## New files
- saltybot_social_msgs/msg/VoiceCommand.msg
    intent + entities[] + confidence + confirmation_token + requires_confirmation
- saltybot_social/voice_command_parser.py
    Pure-Python regex NLU, zero ROS2/ML deps, < 1 ms/call
    30+ named intents across nav.*, social.*, system.*, config.*, confirm.*
    Entity extraction: location, name, mode, level, route name
    Dangerous-command flag: system.shutdown, system.restart, social.forget_me
- saltybot_social/voice_command_node.py
    Subscribes /social/speech/transcript, publishes /social/voice_command
    Confirmation flow with UUID token + 10 s timeout
    Below-threshold → intent=fallback → LLM conversation engine
- saltybot_social/test/test_voice_command_parser.py
    191 unit tests (all pass), no ROS2 runtime required
- saltybot_social/config/voice_command_params.yaml
- saltybot_social/launch/voice_command.launch.py

## Intent taxonomy
nav:    go_to, go_home, follow_me, stop, wait, come_here, patrol,
        set_mode (shadow/lead/side/orbit/loose/tight),
        teach_route, stop_teaching, replay_route
social: remember_me, forget_me [CONFIRM], whats_my_name, tell_joke
system: battery_status, map_status, shutdown [CONFIRM], restart [CONFIRM],
        volume_up, volume_down, volume_set
config: personality, sass_level, follow_mode

## Updated
- saltybot_social_msgs/CMakeLists.txt: register VoiceCommand.msg
- saltybot_social/setup.py: add voice_command_node entry point

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 09:38:17 -05:00

26 lines
1.2 KiB
Plaintext

# VoiceCommand.msg — Parsed voice command with NLU intent, entities, and confidence.
# Published by voice_command_node on /social/voice_command (Issue #137).
#
# Intent namespace:
# nav.* — navigation commands
# social.* — social / enrollment commands
# system.* — robot system control
# config.* — behavior configuration
# confirm.* — confirmation flow responses (yes / no)
# fallback — unrecognized; route to LLM conversation engine
std_msgs/Header header
string intent # e.g. "nav.go_to", "social.remember_me", "fallback"
string raw_text # Normalized transcribed text (lowercased, punctuation stripped)
string speaker_id # Who issued the command (from SpeechTranscript.speaker_id)
float32 confidence # NLU match confidence 0..1
# Entities: key=value pairs, e.g. ["location=kitchen", "mode=shadow", "name=Alice"]
# Parse with: dict(e.split("=", 1) for e in entities)
string[] entities
# Confirmation flow (for dangerous commands: system.shutdown, system.restart, social.forget_me)
bool requires_confirmation # true = awaiting confirm.yes before execution
string confirmation_token # UUID matching this command to its confirmation response