Robot IA autonome construit sur Raspberry Pi 5 + Hailo 8L (13 TOPS). Il voit, entend, parle, reconnaît les visages, réagit aux gestes et se déplace grâce à 2 moteurs DC et une navigation autonome par vision.
ORION n'est pas un assistant — c'est une personnalité. Un mec de 25 ans, sarcastique, curieux, taquin, avec de l'humour pince-sans-rire et un vrai caractère. Il vit à Montseret avec Mathieu, son créateur.
┌─────────────────────┐ série 115200 ┌────────────────────┐ │ Raspberry Pi 5 │◄──────────────────►│ Elegoo Mega 2560 │ │ + Hailo 8L │ │ 2× BTS7960 H-Bridge│ │ │ │ 2× moteurs DC avant│ │ Flask :5000 │ │ 2× encodeurs │ │ Vosk (STT) │ │ 2× roues folles arr│ │ Hailo YOLOv8s │ └────────────────────┘ │ FaceID (Haar+cos) │ HTTP :11435 ┌────────────────────┐ │ Webcam Logitech │◄──────────────────►│ PC Serveur │ │ Micro USB │ WiFi 192.168.1.x │ Ollama (LLM) │ │ │ │ Piper (TTS) │ └─────────────────────┘ │ SQLite (mémoire) │ Écran 10.1" HDMI └────────────────────┘ 600×1024 portrait Chromium Kiosk
YOLOv8s accéléré hardware, ~15 FPS, 80 classes COCO traduites en français. Fallback CPU YOLOv8n si Hailo indisponible.
Haar cascade + cosine similarity. Encodage 64×64 normalisé, vote majoritaire sur 3 frames consécutives. Seuil ≥ 0.88.
3 états : looking_at_camera, looking_away, turned_away. Déclenche des réactions spontanées ("Eh, regarde-moi quand je te parle").
SceneAnalyzer : positions spatiales, activité humaine, tracking de mouvement, classification (bureau, cuisine, salon, extérieur).
person_very_close, person_recognized, stranger_detected, person_approaching, looking_at_camera, person_staring… chacun avec cooldowns et priorités.
Envoi de frames JPEG au serveur (7.5 FPS, qualité 70). Réactions rapides (2-8s) et commentaires de scène lents (~120s).
STT — Vosk offline (modèle français), buffer intelligent avec détection de silence (1.0s). Wake word "Orion" avec variantes phonétiques.
TTS — Piper sur le PC serveur, 3 voix françaises : Siwis (standard), Gilles (grave), UPMC (neutre, par défaut). Synchronisation labiale et streaming phrase par phrase.
LLM — Mistral-small via Ollama. 120+ lignes de prompt système : français oral, humour, émotions, opinions, relations. Le LLM reçoit en temps réel ce qu'Orion voit.
Mémoire persistante — Détection automatique de prénoms, préférences, âge, travail, lieu → SQLite sur PC. Résumé automatique toutes les 16 messages.
13 formes SVG dans le visage animé V3 — double lèvres avec animation syllabique indépendante. Tags [EMO:xxx] extraits des réponses LLM → expression faciale.
Orion connaît : date/heure, période du jour, température CPU, RAM, uptime, état connexion serveur. Anti-hallucination strict sur les commentaires visuels.
7 niveaux de décision — social, recul, contournement, esquive, ajustement, prudence, exploration. Fréquence 4 Hz.
Anti-blocage — Escalade automatique : esquive → scan → demi-tour. Seuils de proximité configurables.
PID différentiel V4.0 — Correction trajectoire 20 Hz par encodeurs Hall avec filtre EMA (α=0.2). Gains Kp=5.0, Ki=0.04, Kd=0.3. Écart L/R réduit de 1.1% à 0.54%.
| Couche | Mécanisme | Délai | Action |
|---|---|---|---|
| 1. App PC/Téléphone | Arrêt au relâchement des touches | Immédiat | Envoie STOP via API |
| 2. Watchdog Pi (Flask) | Thread daemon surveille l'activité /api/move | 600ms | Envoie STOP via série |
| 3. Watchdog Arduino | Timer firmware sans commande série | 500ms | brakeAll() — freinage dur |
Même si l'app PC se déconnecte totalement, le robot s'arrête en maximum 500ms.
Yeux SVG multicouches avec fill dégradé, contour glow, highlight, halo ambiant. Triple bloom filter, bouche organique double lèvres, 10 palettes couleur par émotion.
Design "Porcelaine Divine" (or/noir/blanc), 600×1024 portrait. 3 jauges (CPU, charge, RAM), waveform audio, sélecteur voix et modèle IA.
Écran de chargement : 6 modules avec spinners dorés, barre de progression, transition dissolve vers /face quand ready.
| Composant | Modèle |
|---|---|
| Compute | Raspberry Pi 5 (8GB) |
| NPU | Hailo 8L (13 TOPS) |
| Micro-contrôleur | Elegoo Mega 2560 + Screw Shield |
| Moteurs | 2× DC avant + 2× BTS7960 (pont en H) |
| Encodeurs | 2× rotatifs (ISR : INT5/INT4 gauche, INT0/INT1 droit) |
| Caméra | Webcam USB Logitech |
| Écran | 10.1" HDMI 1024×600 (portrait 600×1024) |
| Audio | Micro USB + haut-parleur (PipeWire) |
| Réseau | WiFi (wlan0) — power-save désactivé |
| Thread | Rôle | Fréquence |
|---|---|---|
vision_loop_background | Capture caméra + Hailo + FaceID | ~20 FPS |
ear_process | Écoute micro Vosk, détection silence | Continu |
speak_worker | File TTS → Piper → pw-play | À la demande |
brain_process | Commentaires visuels spontanés | ~120s |
visual_reaction_process | Réactions rapides aux événements | ~2s |
arduino_process | Télémétrie Arduino + batterie | 2s |
autonomous_nav_process | Navigation IA par vision | 4 Hz |
_motor_safety_watchdog | Watchdog moteur Pi-side | 5 Hz |
| Package | Version | Usage |
|---|---|---|
| Flask | 3.1.2 | Serveur web + API REST |
| opencv-python | 4.13.0 | Vision, FaceID, Haar cascades |
| vosk | 0.3.45 | STT offline français |
| ollama | 0.6.1 | Client LLM |
| ultralytics | 8.4.12 | YOLO fallback CPU |
| torch | 2.10.0 | Backend YOLO |
| psutil | 7.2.2 | Monitoring système |
| numpy | 2.4.2 | Calculs vision + encodages |
58 dépendances au total. Projet 100% portable — aucun chemin hardcodé.
Interface IA locale pour piloter Orion — Electron + React + Tailwind
Conversation streaming avec modèles Ollama. Synthèse vocale Piper TTS, pièces jointes images, sauvegarde mémoire persistante, détection d'émotions.
Rendu Canvas 2D avec effets néon et particules. 9 émotions, yeux kawaii avec gaze tracking, sourcils 7 couches, bouche synchronisée avec la parole.
Joystick tactile pour pilotage temps réel via Wi-Fi. Modes Manuel / Autonome / Suivre. Watchdog serveur 500ms, stop retries (3 tentatives).
SQLite intégrée (better-sqlite3). Catégories : conversations, préférences, faits, compétences. API REST complète avec tags et épinglage.
Proxy Ollama sur port 11435. Proxy contrôle robot vers orion.local:5000. Endpoint TTS HTTP, interception LLM pour détection d'émotions streaming.
Analyse d'images via modèles multimodaux (LLaVA). Le Pi5 interroge /face/status (JSON) et rend le visage localement — plus de stream MJPEG.
┌─────────────────┐ /face/status ┌──────────────────┐
│ Ce PC (GPU) │ ←── poll JSON ──────│ Pi5 (rendu local)│
│ Electron + React│ │ Écran 10.1" │
│ Détection émotion│ │ 600×1024 portrait│
└────────┬────────┘ └──────────────────┘
│
Proxy :11435
├── /api/chat → Ollama :11434 (+ détection émotion)
├── /face/status → État expression (JSON polling)
├── /control/* → orion.local:5000 (Flask API)
├── /tts → Piper TTS
└── /memory/* → SQLite local