The MCP server is now a ROS node and the only way in or out, per the owner's decision that ROS never leaves the robot. It serves MCP on the USB address only with a bearer token, keeps the stable tool name look() (which waits for the next camera frame, so it is never stale, and passes the camera's JPEG through), and registers turn_head/head_position only when a head is fitted, which today it is not. While an authenticated client is connected it republishes the agent heartbeat on /hermes/state, so the face wakes on connect and sleeps about 40 s after the client leaves; look() also makes the face squint. The token is generated on the Pi into /etc/robot-mcp.env (root:hermes, 640) and never printed. Verified end to end from talos with a real MCP client over the USB link: tools listed, a 157 KB JPEG back in 0.08 s, a wrong token refused, the Wi-Fi path dropped by the firewall. Host config snippets now point at 10.55.0.2. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
41 lines
1.5 KiB
YAML
41 lines
1.5 KiB
YAML
# Parameters for the robot's nodes, keyed by node name. The MCP token and other secrets do not
|
|
# belong here: they stay in an env file readable only by the service user.
|
|
camera:
|
|
ros__parameters:
|
|
width: 1296 # the OV5647's full-field binned mode: whole field of view
|
|
height: 972
|
|
format: RGB888
|
|
FrameDurationLimits: [66666, 66666] # 15 fps: ~20% of a core, vs ~40% at 30; plenty for 4 Hz faces
|
|
jpeg_quality: 80
|
|
|
|
hermes_face:
|
|
ros__parameters:
|
|
rotation: 270 # mounted pose, microSD end up (the panel is portrait)
|
|
x_offset: 0
|
|
y_offset: 80 # the 240x240 glass sits 80 rows into the controller's RAM
|
|
fps: 30.0
|
|
phosphor: P7
|
|
style: phosphor
|
|
initial_state: sleeping # no agent connected until hermes_mcp's heartbeat says so
|
|
agent_timeout_s: 10.0
|
|
gaze_follow: true
|
|
audio_drive: true
|
|
|
|
hermes_face_detector:
|
|
ros__parameters:
|
|
rate_hz: 4.0
|
|
recognize: true # only recognises people enrolled with hermes_vision.people
|
|
publish_debug: false
|
|
|
|
hermes_audio_state:
|
|
ros__parameters:
|
|
rate_hz: 30.0
|
|
|
|
hermes_mcp:
|
|
ros__parameters:
|
|
bind: 10.55.0.2 # the USB link; the firewall accepts 8765 only from 10.55.0.1 on usb0
|
|
port: 8765
|
|
head: false # no servos fitted yet: turn_head and head_position stay unregistered
|
|
connected_grace_s: 30.0 # an authenticated client heard within this long keeps the heartbeat going
|
|
look_timeout_s: 3.0
|