Capter et envoyer la vidéo

Première phase, créer et diffuser le flux vidéo. Pour ce faire j'ai utilisé les ingrédients suivants :

Tout cela est très bien documenté grâce au travail formidable de la communauté Raspberry Pi.

Le choix de la webcam et de la clé WiFi s'est fait sur le critère de la compatibilité bien sûr, mais aussi de l'alimentation : les deux peuvent être alimentés simultanément directement depuis les ports USB du Pi ,contrairement à d'autres qui nécessitent un hub alimenté. Ça simplifie grandement le montage. Le wiki de elinux.org maintient une liste très instructive des périphériques testés.

Raspberry Pi ?

IMGP5366.jpgDébarqué voici un an avec un succès dépassant toutes les espérances, le Raspberry Pi est un ordinateur miniature gros comme une carte de crédit tournant sous Linux. Bien que de faible puissance par rapport aux standards actuels (processeur à 800 MHz et 256 à 512 Mb de RAM, même s'il sait décoder de la vidéo full HD), il présente d'autres avantages le destinant particulièrement à la bidouille et à l'embarquement dans des robots :

  • une consommation très faible, de l'ordre de 5W (5V et 1A) ;
  • une très petite taille et un faible poids ;
  • aucune pièce mobile, il ne nécessite pas de ventilateur de refroidissement et le stockage se fait sur carte SD ;
  • un prix plancher, on le trouve à 40 euros port compris.

Voici une page qui donne un aperçu des immenses possibilités de cette plate-forme.

Configuration

Le réseau

Sur le Pi, j'ai installé la mouture spéciale de Debian, Raspbian.

La première étape a consisté a brancher la clé WiFi qui est reconnue instantanément et à lui attribuer une IP fixe. Il y a plusieurs méthodes, celle-ci ou celle-là. J'ai suivi la deuxième qui permet de configurer plusieurs réseaux alors que la première ne permet d'en configurer qu'un. Il se trouve que j'ai deux routeurs WiFi et que je connecte l'engin sur l'un ou l'autre.

La webcam

IMGP5361.jpgEnsuite, j'ai connecté la webcam au Pi. La HD6000 a une fonction particulièrement irritante, un autofocus qui ne sert à rien compte tenu de la profondeur de champ disponible et qui se met à mouliner sans raison. Je l'ai donc désactivé en appliquant cette recette.

Malheureusement, ce réglage est perdu chaque redémarrage... Qu'à cela ne tienne, il suffit de rajouter la ligne uvcdynctrl --set='Focus, Auto' 0 à la fin du script /etc/rc.local (juste avant exit 0) pour que la commande s'exécute à chaque redémarrage.

Il n'y a rien d'autre à faire, la caméra est très bien reconnue.

Le flux

Pour la diffusion, j'ai choisi la solution ultra-simple d'un flux MJPEG créé par le programme motion. J'ai suivi ce tutoriel (partie "motion") avec quelques précisions tirées de celui-ci, j'en ai trouvé pas mal d'autres mais aucun qui marche aussi bien. J'ai testé d'autres recettes (comme celle-ci basée sur mjpeg-streamer) mais sans succès ou sans résultats supérieurs. La simplicité a donc prévalu.

Pour lancer manuellement le serveur, il suffit de taper motion en ligne de commande. Dans mon cas, il se plaignait de ne pas pouvoir créer un répertoire /var/run/motion. Lancer motion en sudo ne suffisait pas, mais en créant le répertoire en question (toujours en sudo bien sûr) il se lançait sans souci. Par contre le répertoire disparaissait à chaque redémarrage du Raspberry... J'ai donc dans un premier temps fait un script de deux lignes qui créé le répertoire puis lance motion.

Une fois satisfait de ma configuration, j'ai simplifié le problème en lançant motion en tant que service au démarrage. Pour cela, il suffit de modifier le fichier /etc/defaults/motion et de changer la ligne start_motion_daemon=no en start_motion_daemon=yes. Désormais, il suffit d'allumer le Raspberry Pi pour disposer automatiquement du flux vidéo.

J'arrive à envoyer un flux en 800x480 pixels à 4 images/s avec un décalage d'1 seconde. Ça sera suffisant pour embarquer dans un robot pas trop rapide, mais pour piloter une formule 1 ça risque d'être un peu limite.

Le récepteur

IMGP5364.jpg Pour lire le flux vidéo, un ordinateur convient très bien: il suffit d'ouvrir l'adresse ip du Raspberry Pi suivie du numéro de port dans un navigateur. Mais côté portabilité on a déjà vu mieux!

J'ai donc voulu recevoir la vidéo sur mon smartphone Android. Il se trouve que le système d'exploitation de Google ne gère pas le MJPEG : impossible donc d'ouvrir le flux dans le navigateur. Une recherche dans le Google Play m'a proposé un certain nombre d'applications qui savent le faire, j'ai retenu Cam Buddy pour sa simplicité et sa légèreté (120 ko). Elle fonctionne parfaitement, que ce soit sur un Xperia Arc S ou la brouette atomique qu'est le ZTE Blade S.

Il n'y a plus qu'à intégrer tout ça dans le robot pévu pour.