[P1] Salty Face — animated expression UI on touchscreen #370

Closed
opened 2026-03-03 15:41:31 -05:00 by seb · 1 comment
Owner

Goal

Salty's face on the 7" touchscreen — animated eyes and expressions that react to bot state.

Expressions

  • Happy/Idle: default following state, friendly eyes
  • Alert: obstacle detected, eyes widen
  • Confused/Searching: target lost, eyes look around
  • Sleeping: idle for a while, eyes close
  • Excited: target reacquired, speed up
  • Emergency: e-stop triggered, warning expression
  • Listening: mic active, visual feedback
  • Talking: text-to-speech active, mouth animation

Requirements

  • Fullscreen app on MageDok 7" (1024x600)
  • Smooth animations (minimum 30fps on Orin Nano GPU)
  • React to ROS2 topics: /saltybot/state, /saltybot/target_track, /saltybot/obstacles
  • Touch interaction: tap face to toggle status overlay
  • Tech: Qt/QML, PyGame, or web-based (Chromium kiosk) — whatever runs smoothest
  • GPU-accelerated rendering (Orin has decent GPU, use it)
  • Status bar: battery %, speed, following distance, sensor health

Inspiration

  • Cozmo/Vector robot eyes
  • EMO desktop pet
  • Keep it simple and expressive — two eyes + optional mouth is enough

Depends on

  • #369 Display setup
## Goal Salty's face on the 7" touchscreen — animated eyes and expressions that react to bot state. ## Expressions - **Happy/Idle:** default following state, friendly eyes - **Alert:** obstacle detected, eyes widen - **Confused/Searching:** target lost, eyes look around - **Sleeping:** idle for a while, eyes close - **Excited:** target reacquired, speed up - **Emergency:** e-stop triggered, warning expression - **Listening:** mic active, visual feedback - **Talking:** text-to-speech active, mouth animation ## Requirements - Fullscreen app on MageDok 7" (1024x600) - Smooth animations (minimum 30fps on Orin Nano GPU) - React to ROS2 topics: /saltybot/state, /saltybot/target_track, /saltybot/obstacles - Touch interaction: tap face to toggle status overlay - Tech: Qt/QML, PyGame, or web-based (Chromium kiosk) — whatever runs smoothest - GPU-accelerated rendering (Orin has decent GPU, use it) - Status bar: battery %, speed, following distance, sensor health ## Inspiration - Cozmo/Vector robot eyes - EMO desktop pet - Keep it simple and expressive — two eyes + optional mouth is enough ## Depends on - #369 Display setup
Author
Owner

Architecture update: Face UI will be a web app (HTML/CSS/WebGL) running in Chromium kiosk mode via Cage Wayland compositor. See #374 for headless setup.

This means:

  • Face = WebGL canvas with animated eyes
  • Deaf communication (#371) = web page in same app
  • Video calls = WebRTC in same browser
  • Video playback = HTML5 video with NVDEC hardware decode
  • All one unified web stack, ~150MB total vs GNOME 800MB

Tech stack: HTML5 + CSS3 + WebGL (Three.js or PixiJS for face animations) + ROS2 bridge via rosbridge_server (WebSocket)

**Architecture update:** Face UI will be a web app (HTML/CSS/WebGL) running in Chromium kiosk mode via Cage Wayland compositor. See #374 for headless setup. This means: - Face = WebGL canvas with animated eyes - Deaf communication (#371) = web page in same app - Video calls = WebRTC in same browser - Video playback = HTML5 video with NVDEC hardware decode - All one unified web stack, ~150MB total vs GNOME 800MB Tech stack: HTML5 + CSS3 + WebGL (Three.js or PixiJS for face animations) + ROS2 bridge via rosbridge_server (WebSocket)
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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