Sign inSign up

husarion/webui

By husarion

Updated 8 days ago

Mobile-first web panel for Husarion ROS 2 robots — webserver image (Caddy + persistence) and the h

Image
0

10K+

husarion/webui repository overview

husarion/webui

The browser-facing half of the Husarion Cockpit — a mobile-first web panel for driving Husarion ROS 2 robots (Panther, Lynx, ROSbot, custom UGVs) over your local Wi-Fi from any phone, tablet, or laptop.

This single Docker Hub repo ships two images, distinguished only by tag prefix:

Tag prefixWhat it is
husarion/webui:webserver-X.Y.ZCaddy + persistence-server (auth, the SPA, Manage tab, /api proxy) — the current production image
husarion/webui:bridge-X.Y.ZLegacy foxglove-bridge + ROS service proxy (browser ↔ ROS WebSocket transport)

Transport note. The current cockpit's browser↔ROS transport is husarion/rosbridge (an in-house Rust rosbridge v2 server), which replaced foxglove-bridge. The webserver-X.Y.Z image at and after the cutover (1.18.x+) expects husarion/rosbridge on the /ws route — pair it with that image, not the bridge-* tag. The bridge-* (foxglove) tag is still published for older, not-yet-migrated stacks; new deployments should use husarion/rosbridge.

Multi-arch: linux/amd64 + linux/arm64.

Tags

  • husarion/webui:webserver-X.Y.Z / husarion/webui:bridge-X.Y.Z — pinned production (recommended)
  • husarion/webui:webserver / husarion/webui:bridge — track the most recent release

Each X.Y.Z is one snapshot validated on Husarion hardware. See the Tags tab above for all available versions.

Quick start

services:
  webserver:
    image: husarion/webui:webserver-1.18.1
    network_mode: host
    env_file:
      - /home/husarion/config/common/.env
    environment:
      - WEBSERVER_PORT=80
      - WEBSERVER_HTTPS_PORT=443     # HTTPS via Caddy internal CA; needed for camera audio
      - ROSBRIDGE_PORT=8866          # Caddy /ws → husarion_rosbridge
      - PERSISTENCE_PORT=9091
      - ROBOT_MODEL=lynx          # picks profiles/settings-<robot>.yaml
    volumes:
      - /var/lib/husarion-webui:/var/lib/husarion-webui   # auth + working-copy YAML
      - /run/husarion-agent:/run/husarion-agent:ro        # if husarion-agent is on the host
    restart: unless-stopped

  # Browser↔ROS transport — replaced the legacy husarion/webui:bridge-* (foxglove) image.
  husarion-rosbridge:
    image: husarion/rosbridge:0.3.2
    network_mode: host
    ipc: host
    env_file:
      - /home/husarion/config/common/.env
    environment:
      - ROSBRIDGE_BIND=0.0.0.0:8866
      - ROSBRIDGE_HEALTH_BIND=0.0.0.0:8869   # /healthz /readyz /metrics
    restart: unless-stopped

Open http://<robot-ip> on a phone on the same LAN; sign in with the per-unit password (default husarion for dev; per-unit random on production stickers). For camera microphone audio, open the HTTPS URL (https://<robot-ip>) and accept the self-signed cert warning once — Caddy's internal CA mints the cert on demand. AudioWorklet is browser-gated to secure contexts; everything else works on either origin.

What you get

  • One-handed (floating joystick) and two-handed (landscape) drive modes
  • E-Stop card (always visible — tap to engage / release)
  • Camera tile with format picker + audio listen-in toggle, plus an optional IMU-driven artificial-horizon overlay (attitude HUD)
  • Manage tab backed by husarion-agent — edit ROS env (namespace, domain ID, RMW), DDS profile, and other capability-defined fields without SSHing into the robot
  • Per-robot profile (ROBOT_MODEL=panther|lynx|rosbot-xl|…) controls topic / service paths, gear ceilings, kinematics, gamepad bindings
  • PWA-installable (Add to Home Screen)
  • Optional physical-gamepad support (USB or Bluetooth, F710-in-X-mode by default)

Configuration

ServiceVarDefaultNotes
webserverWEBSERVER_PORT80Caddy HTTP listen port
webserverWEBSERVER_HTTPS_PORT443Caddy HTTPS listen port (internal CA — required origin for camera audio)
webserverROSBRIDGE_PORT8866husarion_rosbridge port (Caddy /ws target)
webserverPERSISTENCE_PORT9091persistence-server port (proxied)
webserverROBOT_MODELunset → pantherPicks profiles/settings-<robot>.yaml
webserverHUSARION_AGENT_SOCKET/run/husarion-agent/agent.sockPath to the agent's Unix socket inside the container
webserverHUSARION_AGENT_MANAGE_TTL_SEC300Step-up cookie TTL for /api/agent/*
husarion_rosbridgeROSBRIDGE_BIND / ROSBRIDGE_HEALTH_BIND0.0.0.0:8866 / :8869WebSocket bind + health side-server (/healthz / /readyz / /metrics)

Per-robot defaults (gears, gamepad bindings, topic overrides, camera config) live in profiles/settings-<robot>.yaml. Customers tweak via the in-UI Settings flow; the persistence-server writes back to a working-copy YAML in /var/lib/husarion-webui/.

About

Built and maintained by Husarion — robotics research + commercial UGV platforms.

For pre-bundled per-robot install scripts (compose stack with this image + the camera image + the husarion-agent native binary, all pinned to a validated combination), see the public release index: https://github.com/husarion/husarion-cockpit-releases.

License: Apache-2.0.

Tag summary

Content type

Image

Digest

sha256:4b51eac4b

Size

39.7 MB

Last updated

8 days ago

docker pull husarion/webui:webserver