feat: WebUI main dashboard (Issue #630) #637

Merged
sl-jetson merged 1 commits from sl-webui/issue-630-main-dashboard into main 2026-03-15 16:30:01 -04:00
Collaborator

Issue #630 — WebUI Main Dashboard with Panel Launcher

Replaces ui/index.html (old USB-serial HUD) with a rosbridge-connected main dashboard. Adds ui/dashboard.{css,js}.

Top Bar

Element Source
Battery % + voltage + fill bar /diagnosticsbattery_voltage_v / battery_soc_pct
Safety state (CLEAR/WARN/DANGER) /saltybot/safety_zone/status JSON
E-stop state Local + sync from safety_zone
Drive mode /saltybot/balance_state JSON
ROS uptime Counter since connect
rosbridge WS input + CONNECT Manual override

Panel Grid

6 cards link to all standalone panels (each opens the panel HTML):

  • MAP VIEW (#587) — liveness from /saltybot/pose/fused
  • GAMEPAD TELEOP (#598) — activity from /cmd_vel
  • DIAGNOSTICS (#562) — liveness from /diagnostics
  • EVENT LOG (#576) — liveness from /rosout
  • SETTINGS (#614) — config state (no topic watch)
  • GIMBAL (#551) — liveness from /gimbal/state

Each card: icon, title, issue number, description, topic chips, LIVE/IDLE/OFFLINE badge (updated 1 Hz, 5s timeout).

Auto-Detect Rosbridge

Probes in order: ws://{page hostname}:9090ws://localhost:9090ws://saltybot.local:9090. Progress dots shown. Falls back to manual entry. Saves last successful URL to localStorage.

Bottom Bar

  • E-STOP — latches, publishes zero geometry_msgs/Twist to /cmd_vel. Space bar shortcut.
  • Drive mode switcher — MANUAL / AUTO / FOLLOW / DOCK; publishes to /saltybot/drive_mode
  • Session timer — HH:MM:SS since page load

Info Strip

rosbridge URL · msg rate · rosbridge latency (5s ping via /rosapi/get_time) · robot IP

## Issue #630 — WebUI Main Dashboard with Panel Launcher Replaces `ui/index.html` (old USB-serial HUD) with a rosbridge-connected main dashboard. Adds `ui/dashboard.{css,js}`. ## Top Bar | Element | Source | |---------|--------| | Battery % + voltage + fill bar | `/diagnostics` → `battery_voltage_v` / `battery_soc_pct` | | Safety state (CLEAR/WARN/DANGER) | `/saltybot/safety_zone/status` JSON | | E-stop state | Local + sync from safety_zone | | Drive mode | `/saltybot/balance_state` JSON | | ROS uptime | Counter since connect | | rosbridge WS input + CONNECT | Manual override | ## Panel Grid 6 cards link to all standalone panels (each opens the panel HTML): - **MAP VIEW** (#587) — liveness from `/saltybot/pose/fused` - **GAMEPAD TELEOP** (#598) — activity from `/cmd_vel` - **DIAGNOSTICS** (#562) — liveness from `/diagnostics` - **EVENT LOG** (#576) — liveness from `/rosout` - **SETTINGS** (#614) — config state (no topic watch) - **GIMBAL** (#551) — liveness from `/gimbal/state` Each card: icon, title, issue number, description, topic chips, LIVE/IDLE/OFFLINE badge (updated 1 Hz, 5s timeout). ## Auto-Detect Rosbridge Probes in order: `ws://{page hostname}:9090` → `ws://localhost:9090` → `ws://saltybot.local:9090`. Progress dots shown. Falls back to manual entry. Saves last successful URL to localStorage. ## Bottom Bar - **⛔ E-STOP** — latches, publishes zero `geometry_msgs/Twist` to `/cmd_vel`. Space bar shortcut. - **Drive mode switcher** — MANUAL / AUTO / FOLLOW / DOCK; publishes to `/saltybot/drive_mode` - **Session timer** — HH:MM:SS since page load ## Info Strip rosbridge URL · msg rate · rosbridge latency (5s ping via `/rosapi/get_time`) · robot IP
sl-webui added 1 commit 2026-03-15 14:36:14 -04:00
Replaces ui/index.html (old USB-serial HUD) with a full rosbridge
dashboard. Adds ui/dashboard.{css,js}.

Top bar:
- Robot name +  SALTYBOT logo
- Live battery % + voltage with fill bar (4S LiPo: 12.0V–16.8V)
- Safety state from /saltybot/safety_zone/status (GREEN/AMBER/RED)
- E-stop state display
- Drive mode display
- ROS uptime counter
- rosbridge WS input + CONNECT button

Panel grid (auto-fill responsive):
- MAP VIEW (#587) — /saltybot/pose/fused liveness dot
- GAMEPAD TELEOP (#598) — /cmd_vel activity indicator
- DIAGNOSTICS (#562) — /diagnostics liveness dot
- EVENT LOG (#576) — /rosout liveness dot
- SETTINGS (#614) — param service (config state, no topic)
- GIMBAL (#551) — /gimbal/state liveness dot

Each card shows: icon, title, issue #, description, topic chips,
and a LIVE/IDLE/OFFLINE status badge updated every second. Cards
open the linked standalone panel in the same tab.

Auto-detect rosbridge:
- Probes: page hostname:9090, localhost:9090, saltybot.local:9090
- Progress dots per candidate (trying/ok/fail)
- Falls back to manual URL entry
- Saves last successful URL to localStorage

Bottom bar:
-  E-STOP button (latches, publishes zero Twist to /cmd_vel)
  Space bar shortcut from dashboard
- RESUME button
- Drive mode switcher: MANUAL / AUTO / FOLLOW / DOCK
  (publishes to /saltybot/drive_mode std_msgs/String)
- Session timer (HH:MM:SS since page load)

Info strip: rosbridge URL · msg rate · latency (5s ping via
/rosapi/get_time) · robot IP

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit e1d605dba7 into main 2026-03-15 16:30:01 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#637
No description provided.