ROS Packages & Capabilities
The ROS 2 nodes and capabilities the fleet provides — heartbeat, cameras, joystick, rosbridge.
ROS Packages & Capabilities
Beyond a base ROS 2 install, ros-deploy ships a set of capabilities you can turn on
per host. Each is delivered by an Ansible role (and matching playbooks/<name>.yml)
that installs the package and registers it as a systemd service, so it starts on
boot and restarts on failure.
In-repo ROS packages
- heartbeat (
ros_pkgs/heartbeat, roleheartbeat) — a small connectivity-check node that publishes a periodic liveness signal, used to confirm a node is up and visible on the DDS domain. Deploy withplaybooks/heartbeat.yml.
Capability roles
| Capability | Role / Playbook | What it provides |
|---|---|---|
| Cameras | cameras / cameras.yml |
camera_ros (libcamera) with one camera_node per camera as a systemd service. On Pi 5 it builds the Raspberry Pi libcamera fork so the camera front-end works. |
| Joystick | joy / joy.yml |
Plug-and-play joystick publisher with udev/systemd auto-detection and stable per-controller indexing. |
| rosbridge | rosbridge / rosbridge.yml |
JSON-over-WebSocket gateway so non-ROS clients (browser via roslib.js, Python via roslibpy) can talk to the fleet. |
| X Windows | xwindows / xwindows.yml |
sshd X11 forwarding + xauth (optional headless Xvfb) for remote rviz/rqt. |
| Desktop | desktop / desktop.yml |
Desktop-environment extras for full GUI nodes. |
| Docker ROS | ros_docker / docker_ros.yml |
Containerised ROS via docker-compose + systemd, --network host so DDS discovery works. |
Shared ros user |
ros_user / ros_user.yml |
A managed ros zsh account with the ROS overlay auto-sourced. |
| Fleet WiFi | wifi / wifi.yml |
Joins Raspberry Pis to the Busboom Mesh SSID for multicast DDS discovery. |
Choosing what a host gets
site.yml applies roles based on group membership in inventory/hosts.ini and
feature flags in group_vars / host_vars (e.g. install_docker,
configure_xwindows, ros_in_docker). To add a single capability to an existing
host, run just that playbook:
ansible-playbook playbooks/rosbridge.yml --limit <hostname>
See Fleet Administration for how these get distributed across the whole network at once.