[P1] Piper TTS service node — shared text-to-speech for all nodes #421

Closed
opened 2026-03-04 23:29:39 -05:00 by sl-jetson · 0 comments
Collaborator

Goal

Central ROS2 TTS service using Piper (local, offline) on Orin. Multiple nodes need TTS (voice commands, encounters, greetings, status announcements) but each runs their own — consolidate into one service.

Requirements

  • ROS2 service node: accepts text string, returns audio or plays directly
  • Subscribe to /saltybot/tts_request (String) for fire-and-forget
  • Action server /saltybot/tts_speak for feedback (speaking, done)
  • Piper model: en_US medium quality (good balance of speed vs quality)
  • Output to Jabra SPEAK 810 via ALSA/PulseAudio
  • Queue management: queue multiple requests, cancel current on priority interrupt
  • Configurable voice, speed, pitch via ROS2 params
  • Publish /saltybot/tts_state (IDLE, SPEAKING, QUEUED)
  • Preload model on startup for instant first-word latency
## Goal Central ROS2 TTS service using Piper (local, offline) on Orin. Multiple nodes need TTS (voice commands, encounters, greetings, status announcements) but each runs their own — consolidate into one service. ## Requirements - ROS2 service node: accepts text string, returns audio or plays directly - Subscribe to /saltybot/tts_request (String) for fire-and-forget - Action server /saltybot/tts_speak for feedback (speaking, done) - Piper model: en_US medium quality (good balance of speed vs quality) - Output to Jabra SPEAK 810 via ALSA/PulseAudio - Queue management: queue multiple requests, cancel current on priority interrupt - Configurable voice, speed, pitch via ROS2 params - Publish /saltybot/tts_state (IDLE, SPEAKING, QUEUED) - Preload model on startup for instant first-word latency
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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