Retour
WebRTCLow LatencyStreaming

Real-time Robot Video Monitoring

Pipeline WebRTC ultra basse latence ~80ms

Défi

Permettre aux opérateurs de voir ce que voit le robot en temps réel, avec une latence suffisamment basse pour pouvoir intervenir à distance si nécessaire.

Opportunité

Ma V1 envoyait des screenshots via WebSocket à 10 FPS. L'opérateur pouvait ajuster la qualité et le framerate, mais le résultat était saccadé et instable. Pour une supervision efficace et une éventuelle télé-opération, il fallait un vrai flux vidéo basse latence.

Disciplines

Real-time SystemsVideo StreamingBackend DevelopmentFrontend Development

Responsabilités

Architecture streaming

Pipeline WebRTC

Interface opérateur

Optimisation latence

Stack

WebRTCPythonC++FFmpegGStreamerReact

Contexte

Superviser un robot autonome à distance nécessite de voir ce qu'il voit, en temps réel. Quand un robot rencontre une situation ambiguë ou un obstacle inattendu, l'opérateur doit pouvoir évaluer la situation et intervenir si besoin.

Ma première approche était simple : capturer des screenshots des caméras du robot et les envoyer via WebSocket. Ça fonctionnait pour du monitoring basique, mais avec 10 FPS max et une latence de 500ms+, impossible d'intervenir efficacement. J'ai donc migré vers WebRTC, le même protocole utilisé par Zoom et Google Meet, conçu pour la vidéo temps réel.

Architecture

1

V1 : Screenshots WebSocket

La première version capturait des frames JPEG des caméras du robot et les envoyait via WebSocket. L'opérateur pouvait ajuster le framerate (1-10 FPS) et la qualité de compression. Simple à implémenter, mais limité : pas de vrai flux vidéo, latence variable (300-800ms), et instable en cas de réseau fluctuant.

2

V2 : Migration WebRTC

WebRTC utilise UDP au lieu de TCP, ce qui permet de prioriser la latence sur la fiabilité. Si une frame est perdue, on passe à la suivante au lieu de retransmettre. Avec un encodage H.264 optimisé côté robot et un décodage hardware côté navigateur, j'ai atteint ~80ms de latence end-to-end. Suffisant pour piloter le robot à distance si nécessaire.

Interface opérateur

Vue multi-caméras

Le robot embarque plusieurs caméras (avant, arrière, latérales). L'interface permet de visualiser plusieurs flux simultanément ou de focus sur une caméra en fullscreen. Switch rapide entre les vues avec des raccourcis clavier.

Contrôles adaptatifs

L'opérateur peut ajuster la résolution et le bitrate en fonction de la bande passante disponible. Un indicateur affiche la latence en temps réel et la qualité de connexion. Fallback automatique vers une résolution inférieure si le réseau se dégrade.

Stack technique

1Pipeline vidéo côté robot

Capture des flux caméras via GStreamer, encodage H.264 avec FFmpeg optimisé pour la latence (tune=zerolatency). Le flux encodé est envoyé via WebRTC. Configuration fine des paramètres d'encodage pour minimiser le delay tout en maintenant une qualité acceptable.

2Signaling et négociation

Serveur de signaling en Python pour gérer la négociation WebRTC entre le robot et le navigateur de l'opérateur. Échange des SDP (Session Description Protocol) et des ICE candidates pour établir la connexion peer-to-peer.

3Interface React

Player vidéo custom basé sur l'API WebRTC du navigateur. Décodage hardware automatique si supporté. Affichage des métriques temps réel (latence, bitrate, frames perdues). Reconnexion automatique en cas de déconnexion.

Impact

Latence divisée par 6

Passage de ~500ms (V1 WebSocket) à ~80ms (V2 WebRTC). Cette latence permet non seulement de superviser, mais aussi d'intervenir en temps réel si le robot rencontre une situation problématique.

Supervision efficace

Les opérateurs peuvent suivre plusieurs robots simultanément depuis le dashboard. En cas d'alerte, un clic pour passer en vue fullscreen et évaluer la situation. La basse latence leur donne confiance pour prendre des décisions rapides.

Base pour la télé-opération

Ce pipeline vidéo est devenu la brique essentielle pour le mode de télé-opération. Couplé à l'interface de pilotage manuel, il permet de prendre le contrôle du robot à distance quand l'autonomie atteint ses limites.

Résultats

Latence end-to-end ~80ms
Streaming HD adaptatif
Multi-caméras simultanées
Interface opérateur dédiée

Intéressé par ce projet ?

Contactez-moi pour en discuter ou voir une démo.

Me contacter