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-02 12:11:12 -05:00
2026-03-02 20:45:41 -05:00
2026-03-02 17:36:18 -05:00
2026-03-02 09:18:39 -05:00
2026-03-02 10:47:01 -05:00
2026-03-02 09:18:39 -05:00
2026-03-02 12:21:38 -05:00
2026-03-02 08:36:51 -05:00
2026-03-03 11:23:51 -05:00
2026-03-02 11:04:53 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 09:37:10 -05:00
2026-03-03 12:43:19 -05:00
2026-03-02 09:18:39 -05:00
2026-03-02 11:47:05 -05:00
2026-03-02 17:28:28 -05:00
2026-03-02 12:49:48 -05:00
2026-03-02 10:04:38 -05:00
2026-03-02 21:09:17 -05:00
2026-03-02 09:18:39 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 11:53:38 -05:00
2026-03-03 00:21:35 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 11:59:42 -05:00
2026-03-03 18:14:49 -05:00
2026-03-03 13:49:51 -05:00
2026-03-02 14:19:03 -05:00
2026-03-02 08:36:51 -05:00
2026-03-02 09:18:39 -05:00
2026-03-03 00:43:47 -05:00
2026-03-02 21:37:59 -05:00
2026-03-02 17:29:03 -05:00