15H — Commande vocale pour le Thymio
Par admin le mercredi, février 17 2016, 12:00 - 2015-2016 - Lien permanent
Ce projet a été réalisé par Omid Karim.
Dans ce projet, il s'agira de tenter de commander le robot Thymio II par la voix (projet non abouti).
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 :
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/