Implement ROS2 node bridging orchestrator state to face display expressions.
Maps /social/orchestrator/state and /saltybot/wake_word_detected to HTTP API.
Features:
- Subscribes to /social/orchestrator/state (JSON: IDLE, LISTENING, THINKING, SPEAKING, THROTTLED)
- Subscribes to /saltybot/wake_word_detected for immediate Alert response
- HTTP GET requests to face display server (configurable localhost:3000/face/{id})
- State to expression mapping:
* IDLE → 0 (Tracking)
* LISTENING → 1 (Alert)
* THINKING → 3 (Searching)
* SPEAKING → 4 (Social)
* Wake word → 1 (Alert, immediate override)
- Publishes /face/state with JSON: {face_id, orchestrator_state, timestamp}
- Configurable face_server_url parameter
- Fallback to urllib if requests library unavailable
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
28 lines
865 B
Python
28 lines
865 B
Python
from setuptools import setup
|
|
|
|
package_name = "saltybot_face_bridge"
|
|
|
|
setup(
|
|
name=package_name,
|
|
version="0.1.0",
|
|
packages=[package_name],
|
|
data_files=[
|
|
("share/ament_index/resource_index/packages", [f"resource/{package_name}"]),
|
|
(f"share/{package_name}", ["package.xml"]),
|
|
(f"share/{package_name}/launch", ["launch/face_bridge.launch.py"]),
|
|
(f"share/{package_name}/config", ["config/face_bridge_params.yaml"]),
|
|
],
|
|
install_requires=["setuptools"],
|
|
zip_safe=True,
|
|
maintainer="sl-controls",
|
|
maintainer_email="sl-controls@saltylab.local",
|
|
description="Face display bridge for orchestrator state mapping",
|
|
license="MIT",
|
|
tests_require=["pytest"],
|
|
entry_points={
|
|
"console_scripts": [
|
|
"face_bridge_node = saltybot_face_bridge.face_bridge_node:main",
|
|
],
|
|
},
|
|
)
|