Some checks failed
social-bot integration tests / Lint (flake8 + pep257) (push) Failing after 8s
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
Adds face_track_servo_node to saltybot_social: - Subscribes /social/faces/detected (FaceDetectionArray) - Picks closest face by largest bbox area (proximity proxy) - Computes pan/tilt error from bbox centre vs image centre using configurable FOV (fov_h_deg=60°, fov_v_deg=45°) - Independent PID controllers for pan and tilt (velocity/incremental output with anti-windup); servo position integrates velocity*dt - Clamps commands to ±pan_limit_deg / ±tilt_limit_deg - Returns to centre at return_rate_deg_s when face lost >lost_timeout_s - Dead zone suppresses jitter for small errors - Publishes Float32 on /saltybot/head_pan and /saltybot/head_tilt - 81/81 tests passing Closes #279
57 lines
2.6 KiB
Python
57 lines
2.6 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',
|
|
],
|
|
},
|
|
)
|