Streamer une video

Partager un flux vidéo peut s’avérer utile en match. En effet, voir sur son PC la vue d’une caméra montée sur le robot peut aider le pilote à se positionner correctement sur le terrain.

Quelle camera ?

Le RoboRio possède deux ports USB. C’est pourquoi il est possible d’utiliser des caméras USB avec celui-ci. Ces cameras sont pratiques car disponibles partout dans le commerce, bon marché, faciles à remplacer et à brancher.

Une des caméras USB les plus utilisées en FRC est la Microsoft LifeCam HD-3000 :

../../_images/Camera.jpg

Il existe aussi des caméras IP qui permettent directement de streamer un flux vidéo sur le réseau. Cependant, celles-ci sont de moins en moins utilisées.

Dans le code

Bien évidement, WPILib a créé une classe afin de streamer le flux vidéo d’une caméra USB. Il s’agit de la classe CameraServer.

Le constructeur de cette classe est privé, on ne peut donc pas créer d’instances de cette classe. Au lieu de cela, il est possible de récupérer l’unique instance de la classe grâce à la méthode static CameraServer* GetInstance ().

Note

Les variables et les fonctions membres static appartiennent à la classe mais pas aux objets instanciés à partir de la classe. Une fonction membre déclarée static a ainsi la particularité de pouvoir être appelée sans devoir instancier la classe.

Après avoir récupérer un pointeur sur l’instance de la classe, on peut utiliser ses méthodes :

La fonction cs::UsbCamera StartAutomaticCapture() crée un flux vidéo à partir de la caméra USB n°0. Elle renvoie aussi une instance de la classe UsbCamera créée :

#include <CameraServer.h>
CameraServer::GetInstance()->StartAutomaticCapture();

Il existe aussi d’autres méthodes qui permettent de récupérer les images du flux pour, par exemple, les analyser.

Les alternatives

Utiliser le RoboRio pour streamer un flux vidéo n’est pas toujours la meilleure solution. En effet, le processeur du RoboRio n’est pas adapté à la compression vidéo et le flux vidéo utilise ainsi une grande partie de la bande passante.

Pour pouvoir utiliser moins de bande passante, il peut alors être intéressant d’avoir recours à un coprocesseur comme un Raspberry Pi. Celui-ci pourra alors utiliser un codec vidéo plus avantageux comme le H.264.