Commit Graph

23 Commits

Author SHA1 Message Date
0d628d0431 feat: YOLOv8 + MJPEG dans receive_cam.py, fallback synthétique numpy
- Inférence yolov8n.pt sur chaque frame GStreamer
- Fallback frame noir numpy si Pi Zero absent (pas de download)
- Timeout 4s sur sonde GStreamer via thread dédié
- MJPEG annoté exposé sur port 5601

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 20:08:54 +02:00
34d1d69500 docs: YOLOv8 + PyTorch CUDA installés sur Jetson Orin
torch 2.8.0 depuis pypi.jetson-ai-lab.io/jp6/cu126, CUDA 12.6 confirmé.
numpy épinglé <2 (incompatible torch 2.8), opencv-python pip retiré (cv2 système).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 19:47:07 +02:00
772236dee6 docs: port 5600 UDP ouvert iptables (persistant)
Règle iptables ACCEPT udp dpt:5600 ajoutée et sauvegardée via netfilter-persistent.
sudoers mis à jour : nicoboy peut gérer iptables sans mot de passe.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 18:54:35 +02:00
2dda633412 feat: réception flux H.264 Pi Zero → MJPEG Jetson
- receive_cam.py : pipeline GStreamer UDP 5600 → MJPEG HTTP 5601
- CLAUDE.md : Pi Zero IP, ports 5600/5601, commandes de session caméra

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 18:50:59 +02:00
9db1897af7 fix: chemin absolu uvicorn pour systemd
systemd n'inclut pas ~/.local/bin dans PATH, uvicorn non trouvé (exit 127).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 18:32:58 +02:00
a6abcb7d9d Hotspot WireClaw, iptables ports MAVLink, modèle Gemini 2.5-flash 2026-06-01 19:12:32 +02:00
6306e823f4 start.sh : kill uvicorn et web_server au nettoyage
Sans ça, un ancien processus uvicorn reste en écoute sur 8765
entre deux lancements et répond à la place du nouveau.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 16:32:28 +02:00
37012179cf Fix saturation event loop : monitor_telemetry en polling 1s
3 streams gRPC infinis en asyncio.gather() saturaient l'event
loop et empêchaient uvicorn d'accepter des connexions HTTP.
- monitor_telemetry : boucle while + async for...break + sleep(1)
  au lieu de 3 streams continus en gather
- monitor_armed : await sleep(0) pour céder après chaque update
- ensure_future → create_task (API recommandée Python 3.7+)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 16:26:07 +02:00
24100aea4d SYSTEM_PROMPT : descriptions des actions pour guider Gemini
Sans description, Gemini mappait "position gps" sur position
au lieu de position_gps. Chaque action a maintenant un libellé
explicite, position_gps précise horodatage + fix + satellites.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 15:09:51 +02:00
579bec5abd Fix : get_running_loop() au lieu de get_event_loop() (déprécié Python 3.10)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 15:04:38 +02:00
0d2f485c57 Fix position_gps : GPS info en cache, plus de blocage async
- gps_fix et gps_sats ajoutés à telemetry_cache
- monitor_telemetry surveille aussi gps_info() en continu
- position_gps lit depuis le cache (comme battery/mode)
  et ne risque plus de bloquer sur async for ... break

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 15:00:30 +02:00
1d095cd233 Fix TypeError altitude null + erreurs affichées dans l'UI
- float(cmd.get("altitude") or 15) : gère altitude=null retourné
  par Gemini pour les commandes sans altitude (land, rtl, status…)
- /command attrape les exceptions et retourne JSON 500 avec le
  message d'erreur, évite le "Erreur réseau" opaque dans la page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 14:49:22 +02:00
f7a096c6a7 Fix langue et altitude relative dans SYSTEM_PROMPT
- Ajout instruction explicite : message toujours en français
- Nouveau champ delta dans le schéma JSON : "monte de 5m" → delta=5,
  "descend de 3m" → delta=-3, null pour altitude absolue
- takeoff et altitude calculent target_alt = current_alt + delta
  quand delta est présent, sinon utilisent altitude absolue

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 14:46:28 +02:00
f019470749 Ajout commandes altitude et position_gps
- altitude : change la hauteur en vol via goto_location,
  ou décollage depuis le sol si alt < 2m
- position_gps : position complète avec horodatage HH:MM:SS,
  fix GPS et nombre de satellites via telemetry.gps_info()
- SYSTEM_PROMPT et message d'accueil mis à jour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 14:31:32 +02:00
6024655a50 Fix event loop bloqué + /status non-bloquant
- init_pymavlink() passe en run_in_executor : ne bloque plus
  l'event loop asyncio pendant le démarrage de uvicorn
- Ajout monitor_telemetry() : batterie et mode mis à jour en
  continu en cache (même logique que monitor_armed)
- /status et action status lisent telemetry_cache directement,
  plus aucun async for bloquant dans les route handlers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 14:22:02 +02:00
7264bd1d3d start.sh : remplace python3 wireclaw_core.py par uvicorn web_server
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 14:11:59 +02:00
bcda9cf334 Ajout serveur web FastAPI sur port 8765
- wireclaw_core : expose drone comme global, extrait init()
  depuis main() pour permettre l'import par web_server.py ;
  corrige aussi le bug drone_armed manquant global dans init
- web_server.py : FastAPI avec process(text) générique
  (interpret_command → execute_command), routes GET / POST /command
  GET /status, page HTML sobre avec statut temps réel (2s)
  et historique des commandes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 13:54:54 +02:00
66f7149d60 Gitignore : exclure les artefacts de session SITL
Ajout de eeprom.bin, logs/, terrain/, mav.tlog.raw générés
automatiquement par ArduPilot/MAVProxy à chaque session.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 13:49:53 +02:00
32a9713e36 Fix takeoff en vol : changer l'altitude au lieu de bloquer
Quand Gemini mappe "monte à Xm" sur takeoff et que le drone est
déjà en vol, on recalcule l'altitude absolue MSL et on utilise
goto_location pour atteindre la nouvelle altitude à position fixe.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 13:08:31 +02:00
f7c4a7221b Fix takeoff : vérifier l'altitude réelle au lieu de drone_armed
drone_armed reste True après une session précédente même si le drone
est au sol. Le guard utilise désormais current_pos["alt"] < 2.0
comme goto et orbit, avec un refresh_position préalable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 13:03:29 +02:00
93a7013ad0 Add commande position GPS 2026-06-01 10:29:26 +02:00
7e2b253e97 Add Claude Code context file 2026-05-31 07:01:18 +02:00
17c2ae5ce8 Initial commit — WireClaw SITL fonctionnel 2026-05-30 10:35:15 +02:00