La Platine Beaglebone, Tutoriels, Trucs et Astuces.

Linear Feedback Shift Register with VHDL.

Paramétrage et test de la redirection X11.

Utilisation de la bibliothèque OpenCV.

Acquisition d'image à l'aide d'une webcam.


Paramétrage et test de la redirection X11.

Nous allons tout d'abord revenir sur la configuration de Putty afin de s'assurer que la configuration est bien paramétrée pour la redirection X11 vers le serveur X que nous allons installer sur notre PC Windows.

Avant de relancer Putty, télécharger et installer (quelques secondes) le serveur X pour Windows Xming. Il n'y pas de configuration à effectuer, poursuivez l'installation par défaut et ensuite lancer le serveur avec l'icone Xming créée sur le bureau.

Connectez vous avec Putty à votre platine Beaglebone et vérifiez que dans le fichier ssh_config la ligne ForwardX11 yes soit bien décommentée (cela devrait être le cas par défaut).

root@beaglebone:/etc/ssh# ls
ssh_config
root@beaglebone:/etc/ssh# vi ssh_config

Puis installez l'utilitaire xauth qui permettra de gérer correctement l'authenfication lors de la redirection.

root@beaglebone:~# opkg update
root@beaglebone:~# opkg install xauth

Rédémarrez ensuite Putty et vérifier ceci:

root@beaglebone:~# xauth list
beaglebone/unix:10  MIT-MAGIC-COOKIE-1  b9b7de428c82a43cf454b83bcfd11f57

Faisons une petite folie en installant Firefox sur notre Beaglebone (Quelques minutes de téléchargement) !

root@beaglebone:~# opkg update
root@beaglebone:~# opkg install firefox

Lançons maintenant Firefox dans un process parallèle et vérifions que la redirection sur le serveur X est correcte.

root@beaglebone:~# firefox &
[1] 274

Si tout se passe bien, 2 ou 3 secondes suffiront pour ouvrir et afficher le navigateur Firefox ;) N'oubliez pas que la platine Beaglebone c'est 256Mo de mémoire vive et 700Mhz pour le cpu...

Utilisation de la bibliothèque OpenCV.

OpenCV est une bibliothèque qui permets le traitement d'images en temps réel. Cette bibliothèque est sous licence libre et permets de très nombreuses fonctions de traitement d'images de bas niveau mais aussi de traitement de vidéos. Si vous voulez en savoir un peu plus faites un petit tour sur Wikipédia par exemple. Les dernières distributions d'Angstrom dont la v2012.04-core ont normalement cette librairie installée. Vérifiez quand même !

root@beaglebone:~# opkg list_installed | grep opencv
libopencv-calib3d-dev - 2.3.1-r3
libopencv-calib3d2.3 - 2.3.1-r3
libopencv-contrib-dev - 2.3.1-r3
libopencv-contrib2.3 - 2.3.1-r3
libopencv-core-dev - 2.3.1-r3
libopencv-core2.3 - 2.3.1-r3
libopencv-features2d-dev - 2.3.1-r3
libopencv-features2d2.3 - 2.3.1-r3
libopencv-flann-dev - 2.3.1-r3
libopencv-flann2.3 - 2.3.1-r3
libopencv-gpu-dev - 2.3.1-r3
libopencv-gpu2.3 - 2.3.1-r3
libopencv-highgui-dev - 2.3.1-r3
libopencv-highgui2.3 - 2.3.1-r3
libopencv-imgproc-dev - 2.3.1-r3
libopencv-imgproc2.3 - 2.3.1-r3
libopencv-legacy-dev - 2.3.1-r3
libopencv-legacy2.3 - 2.3.1-r3
libopencv-ml-dev - 2.3.1-r3
libopencv-ml2.3 - 2.3.1-r3
libopencv-objdetect-dev - 2.3.1-r3
libopencv-objdetect2.3 - 2.3.1-r3
libopencv-ts-dev - 2.3.1-r3
libopencv-ts2.3 - 2.3.1-r3
libopencv-video-dev - 2.3.1-r3
libopencv-video2.3 - 2.3.1-r3
opencv - 2.3.1-r3
opencv-dev - 2.3.1-r3

En attendant pour tester la librairie OpenCV et vérifiez que tout est correct, vous pouvez télécharger ce fichier en langage C++ image2.cpp dans le dossier testopencv. Téléchargez ensuite ce fichier image (pour tester le programme) dans le répertoire testopencv pour tester notre programme. Vous devriez donc suivre cette séquence de commandes.

root@beaglebone:~# mkdir opencv
root@beaglebone:~# cd testopencv
root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/fichier/image2.cpp
Connecting to emmanuel.pouly.free.fr (xxx.xxx.xxx.xxx:80)
image2.cpp           100% |****************************************************|  1383   0:00:00 ETA
root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/images/lena.png
Connecting to emmanuel.pouly.free.fr (xxx.xxx.xxx.xxx:80)
lena.png             100% |****************************************************|  147K   0:00:00 ETA
root@beaglebone:~/testopencv# ls
image2.cpp  lena.png

Compilons notre fichier C++ dans notre répertoire pour créer notre programme à exécuter. La syntaxe suivante est préférable à celle qui utilise les options -I et -L pour inclure les librairies et fichier include. Attention ce sont des accents graves (Alt Gr + 7) qui entourent la commande pkg-config et non des apostrophes.

root@beaglebone:~/testopencv# g++ -o prog2 image2.cpp `pkg-config --cflags --libs opencv`
root@beaglebone:~/testopencv# ls
image2.cpp  lena.png  progr2
root@beaglebone:~/testopencv# ./prog2 lena.png
Processing a 512x512 image with 3 channels

Le programme ainsi créé, progr2, prendra un seul argument, le fichier image qu'on voudra modifier. Vous devriez voir au bout de quelques secondes une nouvelle fenêtre s'ouvrir avec le fichier image lena.png modifié (valeur pixel inversée).

Le prochain exemple applique un filtre gaussien (flou). Les images, originale et modifiée, sont affichées dans des fenêtres différentes.

root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/fichier/image3gauss.cpp
Connecting to emmanuel.pouly.free.fr (xxx.xxx.xxx.xxx:80)
image3gauss.cpp           100% |***********************************************|  1299   0:00:00 ETA
root@beaglebone:~/testopencv# g++ -o prog3 image3gauss.cpp `pkg-config --cflags --libs opencv`
root@beaglebone:~/testopencv# ls
image2.cpp  image3gauss.cpp  lena.png  progr2  prog3
root@beaglebone:~/testopencv# ./prog3 lena.png

Le programme créé, prog3, prends toujours le nom du fichier image en argument et au bout de quelques secondes deux fenêtres s'ouvrent côte à côte avec nos deux images.

Je vais bientôt tester une Webcam USB générique (10 eur marque carrefour) mais avant j'ai repris la manette Nunchuk pour Wii et je me suis amusé à faire un petit programme en C++ qui enregistre pendant 20 secondes les mouvements de la croix du joystick. A la fin de cet enregistrement une image est affichée et représente sur 3 niveaux de lignes les valeurs du joystick lues cinq fois par seconde.

Voici les 3 fichiers à télécharger avec la commande wget et enfin la ligne de compilation.

root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/fichier/nunchuk_image.h
Connecting to emmanuel.pouly.free.fr (212.27.63.136:80)
nunchuk_image.h      100% |****************************************************|   437   0:00:00 ETA
root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/fichier/nunchuk_image_com.cpp
Connecting to emmanuel.pouly.free.fr (212.27.63.136:80)
nunchuk_image_com.cp 100% |****************************************************|  3006   0:00:00 ETA
root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/fichier/image_nunchuk.cpp
Connecting to emmanuel.pouly.free.fr (212.27.63.136:80)
image_nunchuk.cpp    100% |****************************************************|  2401   0:00:00 ETA
root@beaglebone:~/testopencv# g++ -o prog4 image_nunchuk.cpp nunchuk_image_com.cpp \
> `pkg-config --cflags --libs opencv`
root@beaglebone:~/testopencv# ./prog4
Opened /dev/i2c-2 - Comm to Nunchuk is open - I2C send 0x55 to 0xF0 - I2C send 0x00 to 0xFB - OK

Début de l'enregistrement (durée 20 sec.)

Fin de l'enregistrement - Affichage de l'image en cours

Lorsque vous verrez Début de l'enregistrement (durée 20 sec.) s'afficher dans la console, vous avez 20 secondes pour bouger la croix dans les 4 directions. Lorsque Fin de l'enregistrement - Affichage de l'image en cours apparaît, vous voyez une fenêtre avec une image du type comme ci-dessous. Les traits rouges représentent les périodes où la croix était en direction Gauche / Bas, le trait noir les périodes où la croix était au neutre et les traits verts les périodes où la croix était dans la direction Droit / Haut.

Il est aussi possible de tracer un graphique en fonction des valeurs de l'accéléromètre selon l'axe choisi et d'afficher ainsi les mouvements de la manette Nunchuk pendant une période donnée.

En attendant la suite vous trouverez en suivant ce lien un très bon fichier (pdf) en langue française pour débuter avec la librairie OpenCV et n'hésitez pas à m'écrire si vous avez des problèmes quelconques.

Acquisition d'image à l'aide d'une webcam.

Prochainement j'espère car en date du 4 juillet, cela coince. La caméra USB est bien reconnue sur /dev/video0 mais il y a un problème de timeout dû au paramétrage du port USB sur la Beaglebone... Premier hic sur la platine pourrait on dire bien que le problème soit connu des concepteurs comme l'indique cette To Do List.

En attendant que ce problème soit résolu de façon définitive, je vais interfacer prochainement une petite caméra port série (TTL) dès que je l'aurai reçue, je pense vers le 6 ou 7 juillet.

MAJ du 7 Juillet: Certaines distributions Angstrom, les dernières versions avec le bureau GNOME en plus (celle du 9 mai 2012 par ex.), ont le mode DMA désactivé et le noyau compilé avec le bon paramètre. Vérifiez que, à la commande ci-dessous, vous avez bien la réponse CONFIG_MUSB_PIO_ONLY=y. Si tel est le cas, vous pouvez essayer de tester avec succès votre webcam.

root@beaglebone:~# zcat /proc/config.gz | grep MUSB_PIO
CONFIG_MUSB_PIO_ONLY=y

Si par contre vous avez ceci qui s'affiche, ce n'est pas la même d'aller plus loin ou alors bonne prise de tête ;)

root@beaglebone:~# zcat /proc/config.gz | grep MUSB_PIO
# CONFIG_MUSB_PIO_ONLY is not set

MAJ du 1er Février: Après une longue absence pour cause de déplacement professionnel, je reprends la suite de ce sujet sur la Beaglebone et les Webcams. J'ai laissé tomber l'interfaçage de la caméra série TTL, les performances sont désastreuses, autant ne rien avoir. Pour la suite des opérations liées à notre Webcam USB, je vous conseille de faire la mise à jour de la distribution en téléchargant ici downloads.angstrom-distribution.org/demo/beaglebone l'image adéquate.

J'ai testé 3 Webcams différentes, une marque Carrefour à 9 eur, une Logitech C270 et un Hercules HD Express 720p. Je reviendrai plus en détail prochainement sur les explications mais il semblerait que la la résolution soit limitée à 320x240 (QVGA). En effet la ligne de commande ci-dessous ne donne rien d'autres qu'une fenêtre verte en lieu et place de notre image, de plus une erreur select timeout est renvoyée.

root@beaglebone:~# mplayer -tv driver=v4l2 tv://
En spécifiant la taille de la fenêtre à 320x240 (taille maximale qui ne renvoie pas d'erreur), on a "par miracle" l'image renvoyée par la webcam.
root@beaglebone:~# mplayer -tv width=320:height=240:driver=v4l2 tv://
Utilisons maintenant la librairie OpenCV et le langage C++ pour afficher les images de notre webcam dans une fenêtre dont nous spécifions toujours la taille 320x240.
root@beaglebone:~/testopencv# wget http://emmanuel.pouly.free.fr/fichier/webcam.cpp
Connecting to emmanuel.pouly.free.fr (xxx.xxx.xxx.xxx:80)
webcam.cpp           100% |***********************************************|  912   0:00:00 ETA
root@beaglebone:~/testopencv# g++ -o prog_webcam webcam.cpp `pkg-config --cflags --libs opencv`
root@beaglebone:~/testopencv# ./prog_webcam

Bon tout cela n'est pas encore le Pérou car très lent (surtout si utilisé pour détection de visage avec OpenCV) mais il existe depuis quelques semaines une webcam, disons plutôt une caméra présentée sour forme d'extension spécifique (cape) pour la Beaglebone. Il ne devrait donc plus y avoir de problèmes liés à l'USB étant donné que le bus CAM I/F est utilisé. L'ensemble devrait être aussi beaucoup plus rapide (Espérons le car pour le moment c'est décevant...).

Je viens de la commander ainsi que l'extension (cape) DVI-D qui va nous permettre de visualiser les images sur un moniteur branché directement sur la Beaglebone, ainsi nous n'aurons plus besoin de redirection X11 avec Putty. Cela devrait aussi améliorer les performances.
A suivre donc dès que j'aurais reçu le matériel (Autour du 8-9 février).