ROS never leaves the robot, by the owner's decision: the firewall drops domain 42's DDS ports on every interface but loopback (usb0 included), discovery is pinned to LOCALHOST, and hermes_mcp is the only bridge to the outside. PipeWire 1.0.5 runs as hermes's user services with its network server on TCP 4713; the firewall, loaded at boot before it, is the protection. Verified from talos: 4713 connects over usb0 and times out over Wi-Fi. CONTEXT.md brought up to date: the face service, gaze, recognition, the firewall, and what is left. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
17 lines
1.2 KiB
Bash
17 lines
1.2 KiB
Bash
# Source this before running robot nodes on the Pi: source ~/robot-env.sh
|
|
# - ROS Jazzy, then the overlay workspaces (camera_ros built against the fork; hermes_* packages)
|
|
# - the Raspberry Pi libcamera fork ahead of ROS's own copy (same soname, but ROS's crashes in the
|
|
# Pi image plugin: see CONTEXT.md)
|
|
# - ~/venv's site-packages first: Blinka/Adafruit for the display, OpenCV 4.10 for YuNet
|
|
# - a fixed ROS domain (42), discovery on this machine only. ROS never leaves the robot: DDS has
|
|
# no authentication and carries the camera and recognised names, so the firewall drops its ports
|
|
# on every interface but loopback. hermes_mcp is the only bridge to the outside world.
|
|
source /opt/ros/jazzy/setup.bash
|
|
[ -f "$HOME/camera_ws/install/setup.bash" ] && source "$HOME/camera_ws/install/setup.bash"
|
|
[ -f "$HOME/ros_ws/install/setup.bash" ] && source "$HOME/ros_ws/install/setup.bash"
|
|
export LD_LIBRARY_PATH="/opt/libcamera-rpi/lib/aarch64-linux-gnu:${LD_LIBRARY_PATH:-}"
|
|
export PYTHONPATH="$HOME/venv/lib/python3.12/site-packages:${PYTHONPATH:-}"
|
|
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-42}"
|
|
# ROS's own setup script exports SUBNET, so this must be assigned, not defaulted
|
|
export ROS_AUTOMATIC_DISCOVERY_RANGE=LOCALHOST
|