sl-jetson e8b787a987
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 8s
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
feat(social): speech volume auto-adjuster — Issue #289
Adds volume_adjust_node to saltybot_social:
- Subscribes /social/speech/energy (Float32 linear RMS [0..1] from vad_node)
- Maps energy to TTS volume via:
    1. Normalise into [noise_floor, noise_ceil]
    2. Power-curve shaping (curve_gamma; <1 concave, 1 linear, >1 convex)
    3. Lerp to [min_volume, max_volume]
    4. Exponential moving-average smoothing (smoothing_alpha)
- Publishes Float32 on /saltybot/tts_volume at publish_rate Hz (default 5 Hz)
- Holds last value when energy is stale (> stale_timeout_s)
- All params exposed: min/max_volume, noise_floor/ceil, curve_gamma,
  smoothing_alpha, publish_rate, stale_timeout_s
- 74/74 tests passing

Closes #289
2026-03-02 20:47:53 -05:00

59 lines
2.7 KiB
Python

from setuptools import find_packages, setup
import os
from glob import glob
package_name = 'saltybot_social'
setup(
name=package_name,
version='0.1.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
(os.path.join('share', package_name, 'launch'),
glob(os.path.join('launch', '*launch.[pxy][yma]*'))),
(os.path.join('share', package_name, 'config'),
glob(os.path.join('config', '*.yaml'))),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='seb',
maintainer_email='seb@vayrette.com',
description='Social interaction layer — person tracking, speech, LLM, TTS, orchestrator',
license='MIT',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'person_state_tracker = saltybot_social.person_state_tracker_node:main',
'expression_node = saltybot_social.expression_node:main',
'attention_node = saltybot_social.attention_node:main',
'speech_pipeline_node = saltybot_social.speech_pipeline_node:main',
'conversation_node = saltybot_social.conversation_node:main',
'tts_node = saltybot_social.tts_node:main',
'orchestrator_node = saltybot_social.orchestrator_node:main',
# Voice command NLU bridge (Issue #137)
'voice_command_node = saltybot_social.voice_command_node:main',
# Multi-camera gesture recognition (Issue #140)
'gesture_node = saltybot_social.gesture_node:main',
# Hand gesture pointing direction (Issue #221)
'pointing_node = saltybot_social.pointing_node:main',
# Facial expression recognition (Issue #161)
'emotion_node = saltybot_social.emotion_node:main',
# Robot mesh communication (Issue #171)
'mesh_comms_node = saltybot_social.mesh_comms_node:main',
# Energy+ZCR voice activity detection (Issue #242)
'vad_node = saltybot_social.vad_node:main',
# Ambient sound classifier — mel-spectrogram (Issue #252)
'ambient_sound_node = saltybot_social.ambient_sound_node:main',
# Proximity-based greeting trigger (Issue #270)
'greeting_trigger_node = saltybot_social.greeting_trigger_node:main',
# Face-tracking head servo controller (Issue #279)
'face_track_servo_node = saltybot_social.face_track_servo_node:main',
# Speech volume auto-adjuster (Issue #289)
'volume_adjust_node = saltybot_social.volume_adjust_node:main',
],
},
)