1. Introduction

Dans ce projet, le but est de faire exécuter des actions simples (avancer, tourner, allumer des LEDs) au robot Thymio II grâce à des paroles. Le concept de base est de parler dans un micro, puis cette parole sera transformer en texte et exécutera une commande. Ensuite la commande envoyée sera une transmission infrarouge que le Thymio captera et opérera. Le problème ici est de comprendre comment fonctionne le logiciel de reconnaissance vocale et la transmission d'infrarouge sur un Raspberry Pi, et puis de mettre bout à bout toutes ces opérations citées auparavant.

2. Matériel et méthodes

2.1 Matériel

  • Raspberry Pi
  • Thymio II
  • Télécommande compatible avec le Thymio
  • Casque microphone USB
  • Écran (TV), clavier USB et câble HDMI (pour la connexion au Raspberry)
  • LED et Receiver Infrarouge

2.2 Méthodes

Ce projet est séparé en deux parties distinctes : la reconnaissance vocale et la transmission d'infrarouge

2.2.1 La reconnaissance vocale

Ici, il s'agira de faire fonctionner la librairie de reconnaissance vocale, qui elle fonctionne avec l'API de Google, sur le Raspberry Pi.
Pour commencer, il faut, pour ma part (faute d'un problème de connexion par ssh non résolu), brancher le Raspberry à un écran à l'aide d'un câble HDMI, puis brancher le micro et le clavier au port USB. Après avoir démarrer la machine et s'être connecté sous l'utilisateur pi avec le mot de passe raspberry, j'ai dû changer le "keyboard layout" afin de pouvoir travailler correctement en tapant les caractères voulus. Pour se faire entrer la commande suivante pour accéder aux paramètres du Raspberry Pi :

sudo raspi-config

Ensuite sous Internationalisation Options, il est possible de choisir la configuration du clavier de son choix.

Maintenant, on installe le logiciel de reconnaissance vocale sur le Raspberry Pi (voir Références) :

git clone git://github.com/StevenHickson/PiAUISuite.git
cd PiAUISuite/Install/
./InstallAUISuite.sh

Attention à ne pas oublier d'installer ce qu'il faut pour faire fonctionner le logiciel :

sudo apt-get install libboost1.50-dev libboost-regex1.50-dev youtube-dl axel curl xterm libcurl4-gnutls-dev mpg123 flac sox

Dans le paquet installé, on est uniquement intéressé par voicecommand. Avec la commande voicecommand -e, on accède au fichier de configuration. Ici on peut voir les paramètres par défaut de voicecommand et les commandes qui sont exécuter lorsque le logiciel comprend une parole. Tout d'abord, il faut décommenter ce qui est dit pour faire fonctionner le tout.

Le problème qui se présente à présent est que le microphone n'est pas configurer à être écouté par le Raspberry et non plus par le logiciel. En augmentant le son de capture du micro grâce à alsamixer, on peut tout d'abord tester si la machine enregistre et reproduit un son :

arecord test.wav
aplay test.wav

Si on entend le son qu'on avait enregistré, on sait que le micro est configurer sur le Raspberry. Maintenant, il faut le configurer pour voicecommand. Pour cela dans le fichier voicecommand -e changer

!hardware="plughw:1,0"

en

!hardware="plughw:0,0"

Faire pareil dans le fichier /usr/bin/speech-recog.sh . Cela dit au logiciel d'utiliser le micro configuré par défaut sur le Raspberry en l'occurence le micro précédemment configuré.
Dans le fichier speech-recog.sh se trouve le code de la reconnaissance vocale. Il y a trois codes différents disponibles, il suffit de commenter les deux que vous ne voulez pas utiliser.

Pour lancer le logiciel, il faut écrire la commande

voicecommand ou voicecommand -c (pour écouter en continu)

Si le logiciel entend un son, il affichera Found Audio, puis répondra avec le mot ou la phrase que vous aurait indiqué dans le fichier voicecommand -e sous !respond=.... Maintenant le problème est que le logiciel affiche No translation pour signaler qu'il n'y a aucune correspondance entre la parole et un texte. Ce problème vient soit du logiciel, soit fichier audio out.flac se trouvant à /dev/shm qui est incompréhensible pour notre oreille.
Aucune autre solution trouvée pour résoudre le problème.

2.2.2 Transmission d'infrarouge

Pour cette partie, on utilise le logiciel LIRC - Linux Infrared Remote Control. Pour l'installer sur le Raspberry, simplement écrire la commande :

sudo apt-get install lirc

Ensuite, il faut configurer le logiciel pour qu'il fonctionne avec le circuit de transmission infrarouge qui va suivre plus bas (explication détaillée http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/) :

Ajouter dans le fichier /etc/modules

lirc_dev lirc_rpi gpio_in_pin=23 gpio_out_pin=22

Puis mettre à jour le fichier /etc/lirc/hardware.conf

# /etc/lirc/hardware.conf # # Arguments which will be used when launching lidcd

LIRCD_ARGS="--uinput"

# Don't start lircmd even if there seems to be a good config file

# START_LIRCMD=false

# Don't start irexec, even if a good config file seems to exist.

# START_IREXEC=false

# Try to load appropriate kernel modules

LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.

DRIVER="default"

# usually /dev/lirc0 is the correct setting for systems using udder

DEVICE="/dev/lirc0"

MODULES="lirc_rpi"

# Default configuration files for your hardware if any

LIRCD_CONF=""

LIRCMD_CONF=""

Ajouter dans le fichier /boot/config.txt

dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22

Voici le circuit à monter pour que le transmetteur IR fonctionne avec les paramètres configurés précédemment :
20160213_141720.jpg Image1 : Circuit

Maintenant, il faut créer un fichier de configuration pour la télécommande à disposition afin de pouvoir envoyer les mêmes fréquences IR au Thymio par la suite.
Arrêter lirc :

sudo /etc/init.d/lirc0 stop

Ensuite lancer irrecord pour enregistrer les touches de la télécommande :

irrecord -d /dev/lirc0 thymio

Suivre les instructions du logiciel.
Puis copier le fichier thymio créer à l'instant dans /etc/lirc/lircd.conf
Pour transmettre des fréquences infrarouge, il faut utiliser la commande irsend, par exemple :

irsend SEND_ONCE thymio KEY_1

Cette commande envoie la fréquence enregistrée sous KEY_1 dans le fichier thymio.
Le problème est que le Thymio ne capte pas cette fréquence, parce qu'il ne réagit pas. Le problème vient peut-être de l'enregistrement des fréquences de la télécommande.
Le dernier test était d'essayer de voir ce qu'émettait la LED IR, à l'aide du récepteur IR avec la commande

mode2 -d /dev/lirc0

mais lorsque l'on émet un signal en continu (irsend SEND_START thymio KEY_1, par exemple), le logiciel ne peut pas accomplir deux tâches en même temps.
Aucune autre idée pour résoudre le problème a été trouvée.

3. Résultats

Malheureusement ni la reconnaissance vocale ni la transmission d'infrarouge fonctionnent, donc aucun résultat concret.
(code de test RC5 pour le Thymio sur le git)

  • Commande vocale : Le logiciel entend et enregistre une parole, répond par la phrase demandée, mais ne trouve aucune traduction.
  • Transmission infrarouge : Le fichier de configuration a été créé sans trop de problème, mais le Thymio ne réagit pas au signal transmit.

4. Discussion

La réussite de ce projet comptait sur l'efficacité des logiciels et réponses trouvés sur internet et sur mes connaissances limitées dans ce domaine.
Lors de ce projet, j'ai eu recours à beaucoup de forums afin de trouver des solutions aux problèmes. N'ayant pour seule solution que de faire confiance aux propos trouver sur le net, il est difficile de comprendre où peut se situer l'erreur ou le problème. Les forums donnent quelques indications qui me rapprochent de l'aboutissement du projet, mais ne donnent aucune explication à cela, me laissant sans comprendre de ce que je fais. J'ai tout de même appris à utiliser un Raspberry Pi dans une certaine mesure et compris comment fonctionne l'infrarouge.

5. Conclusion

Pour conclure ce projet, on peut dire qu'il ne consistait pas vraiment en un programme écrit par ma main, mais plus en utilisation de logiciels (voicecommand et LIRC) sur un Raspberry Pi. Avec plus de connaissance et de pratique générales en informatique, ce projet aurait pu être abouti. Si les différentes parties fonctionnaient, il ne manquerait plus qu'à les mettre bout à bout pour que le tout fonctionne.

6. Références

1. Logiciel de reconnaissance vocale :

  • http://diyhacking.com/best-voice-recognition-software-for-raspberry-pi/
  • http://stevenhickson.blogspot.in/2013/04/voice-control-on-raspberry-pi.html

2. Infrarouge :

  • http://www.lirc.org
  • http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/