sl-webui
8aa4072a63
feat(webui): Salty Face animated expression UI — contextual emotions (Issue #370)
Add animated facial expression interface for MageDok 7" display:
Core Features:
✓ 8 emotional states:
- Happy (default idle)
- Alert (obstacles detected)
- Confused (searching, target lost)
- Sleeping (prolonged inactivity)
- Excited (target reacquired)
- Emergency (e-stop triggered)
- Listening (microphone active)
- Talking (TTS output)
Visual Design:
✓ Minimalist Cozmo/Vector-inspired eyes + optional mouth
✓ Canvas-based GPU-accelerated rendering
✓ 30fps target on Jetson Orin Nano
✓ Emotion-specific eye characteristics:
- Scale changes (alert widened eyes)
- Color coding per emotion
- Pupil position tracking
- Blinking rates vary by state
- Eye wandering (confused searching)
- Bouncing animation (excited)
- Flash effect (emergency)
Mouth Animation:
✓ Synchronized with text-to-speech output
✓ Shape frames: closed, smile, oh, ah, ee sounds
✓ ~10fps lip sync animation
ROS2 Integration:
✓ Subscribe to /saltybot/state (emotion triggers)
✓ Subscribe to /saltybot/target_track (tracking state)
✓ Subscribe to /saltybot/obstacles (alert state)
✓ Subscribe to /social/speech/is_speaking (talking mode)
✓ Subscribe to /social/speech/is_listening (listening mode)
✓ Subscribe to /saltybot/battery (status tracking)
✓ Subscribe to /saltybot/audio_level (audio feedback)
HUD Overlay:
✓ Tap-to-toggle status display
✓ Battery percentage indicator
✓ Robot state label
✓ Distance to target (meters)
✓ Movement speed (m/s)
✓ System health percentage
✓ Color-coded health indicator (green/yellow/red)
Integration:
✓ New DISPLAY tab group (rose color)
✓ Full-screen rendering on 1024×600 MageDok display
✓ Responsive to robot state machine
✓ Supports kiosk mode deployment
Build Status: ✅ PASSING
- 126 modules (+1 for SaltyFace)
- 281.57 KB main bundle (+11 KB)
- 0 errors
Depends on: Issue #369 (MageDok display setup)
Foundation for: Issue #371 (Accessibility mode)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-03 18:14:49 -05:00
..
2026-03-03 16:42:41 -05:00
2026-03-03 16:42:41 -05:00
2026-03-03 18:14:49 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 09:18:39 -05:00
2026-03-02 09:18:39 -05:00
2026-03-02 08:36:51 -05:00
2026-03-03 16:42:41 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 09:18:39 -05:00