Skip to content

Robot Setup Overview

This page is the entry point for preparing an HB2 robot for the tablet app. It covers what the robot already runs, what the camera and agent setup adds, the network plan, the order to follow the two install guides in, and the checks that decide a robot is ready.

A production HB2 robot already runs the control path: ROS Noetic, rosbridge on WebSocket port 9090, and the hb2_api_bridge package that publishes the versioned HB2 topics and services. That side is owned by the robot’s own provisioning and is not touched here.

This setup adds the two things the tablet needs beyond control:

  • The camera streams. MediaMTX serves the USB camera as /static and the PTZ camera as /ptz on RTSP port 8554. See Camera Streams with MediaMTX.
  • The identity and health services. hausbots-robot-agent answers on HTTP port 8080 with the robot’s identity and a read-only health snapshot, and hausbots-robot-health is the ROS adapter that feeds it. See Robot Agent Services.

Neither addition touches the control path. Camera traffic stays on 8554, identity and health stay on 8080, and commands and telemetry stay on 9090.

graph LR
    Tablet[Tablet app] -->|commands, telemetry :9090| Rosbridge[rosbridge]
    Tablet -->|identity, health :8080| Agent[hausbots-robot-agent]
    Tablet -->|RTSP :8554| MediaMTX[MediaMTX]
    Rosbridge -->|/hb2/app/status| Adapter[hausbots-robot-health]
    Adapter -->|health.json| Agent
    MediaMTX -->|/static| Camera[USB camera]
    MediaMTX -->|/ptz| PTZ[PTZ camera]

In normal operation the tablet is the only client of the robot; the development laptop is on the switch only for checks. The tablet opens the rosbridge WebSocket for commands and telemetry, asks the agent for identity and health, and plays video straight from MediaMTX. The health adapter is the one component that reads ROS on the agent’s behalf: it subscribes to /hb2/app/status, writes the snapshot the agent serves, and never publishes an actuator command.

Run these checks on the robot, as its Linux user — normally robot — before installing anything. In a fresh shell, source ROS first so rospack and rosmsg are on PATH:

Terminal window
source /opt/ros/noetic/setup.bash # ROS tools on PATH
uname -m # expect: aarch64
rospack find hb2_api_bridge # expect: a path
rosmsg show hb2_api_bridge/TabletStatus # expect: fields
ss -ltn | grep 9090 # expect: a listening socket
id # expect: "video" in the group list

uname -m must print aarch64, because both guides install arm64 builds. rospack and rosmsg must locate the bridge and its message — the agent installer refuses to run when either is missing — and ss must show rosbridge listening on 9090. id must list video, or nothing on the robot can open the USB camera.

If rospack or rosmsg cannot find the bridge, stop and contact HausBots before installing anything. The robot is missing the bridge package this setup is paired with, and the camera or agent installs will not fix that.

Use an isolated switch with static addresses and no DHCP, gateway, or DNS. Each device gets its own address, and nothing is negotiated:

Device Address
Tablet 10.0.0.20/24
Robot 10.0.0.23/24
Development laptop 10.0.0.10/24

Never reuse an address, and never run the simulator on a robot’s address. The robot’s guides assume 10.0.0.23; substitute the real address consistently if the deployment uses another one.

The setup opens four ports on the robot:

Port Protocol Service
8080 TCP Robot agent (identity/health)
8554 TCP MediaMTX RTSP
9090 TCP rosbridge WebSocket
8000–8001 UDP RTSP media transport

Allow these on the robot’s firewall.

Work through the guides in this order. Each one starts with its own preflight and ends with its own acceptance checklist:

  1. Camera Streams with MediaMTX — install and verify both RTSP feeds.
  2. Robot Agent Services — install and verify identity and health.
  3. Downloads — bundles and templates used by both guides.

Run these once both guides are complete — the systemctl checks on the robot, the rest from another machine on the switch:

Check Expect
systemctl is-active mediamtx active
systemctl is-active hausbots-robot-agent active
systemctl is-active hausbots-robot-health active
curl http://10.0.0.23:8080/api/v1/identity Valid identity JSON
curl http://10.0.0.23:8080/api/v1/health "status": "ready"
curl http://10.0.0.23:8080/healthz ok
ffprobe .../8554/static h264, 1280x720 at 30 fps
ffprobe .../8554/ptz The PTZ camera’s own codec and size

The ffprobe checks are the stream checks from the camera guide, against rtsp://10.0.0.23:8554/static and rtsp://10.0.0.23:8554/ptz. A failing check is covered by its guide’s troubleshooting table.

The tablet then discovers the robot on the isolated network and shows it as verified.