localisation_audio/daily_work.md

180 lines
13 KiB
Markdown
Raw Normal View History

2020-05-21 15:10:26 +02:00
**Ajout du 20 Mai:**
2020-05-20 18:10:38 +02:00
Les premières recherches utiles sur le sujet:
https://tel.archives-ouvertes.fr/tel-00148058/document
http://www.isir.upmc.fr/UserFiles/File/argentieri/NSR33/Cours-court.pdf
2020-06-04 10:57:11 +02:00
2020-06-04 10:56:55 +02:00
https://openclassrooms.com/fr/courses/4500266-analysez-les-signaux-1d/4507476-lintercorrelation-une-premiere-approche
2020-05-20 18:10:38 +02:00
Ci-dessous, les travaux d'un homme sur la localisation sonore utilisant une Raspberry et deux microphones. L'orientation d'une "plaque" en fonction de l'origine du son se fait par un moteur.
https://microcontroleurs.blogspot.com/2012/08/localisation-dune-source-sonore-avec-un.html
https://microcontroleurs.blogspot.com/2012/08/localisation-optique-et-sonore.html?q=Localisation+d%27une+source+sonore+avec+un+ATmega328
Ici, un forum sur lequel une personne a essayé de mettre en application la solution précédente.
https://forum.arduino.cc/index.php?topic=386996.0
N.B.: Utilisation de rosserial_arduino: permet d'utiliser ROS directement avec l'IDE Arduino
Une nouvelle solution proposée sur PotBot:
https://pobot.org/La-localisation-des-sources-de-son.html?decoupe_recherche=MICRO&artpage=0-0#outil_sommaire_0 (Commentaire du 12/09/10 paraît pertinent)
Test simulé sur pc, programme écrit en java (et un peu lourd) mais adaptable en c/c++ (permet de porter le module sur Raspberry Pi). Cela a été fait ici, notamment avec l'utilisation d'ALSA :
https://pobot.org/La-localisation-des-sources-de-son,1099.html
2020-05-21 18:25:33 +02:00
Cette solution nécessite deux microphones. Peut-être en essayer plus (4 par exemple) ?
2020-05-28 12:24:06 +02:00
2020-05-21 18:25:33 +02:00
**Ajout du 21 Mai**
2020-05-21 18:26:37 +02:00
Une première version de l'état de l'art concernant le sujet a été rédigé. https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/Etat_Art_v1.pdf
2020-05-21 18:25:33 +02:00
2020-05-22 18:09:22 +02:00
De plus, la solution envisagée commence à se préciser: Adapté la solution présentée sur PotBot (https://pobot.org/La-localisation-des-sources-de-son.html?decoupe_recherche=MICRO&artpage=0-0#outil_sommaire_0) afin de l'utiliser en c++ sur un Raspberry Pi. Cela avec l'IDE Arduino (http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup) permettant de communiqué avec ROS. Dans un premier temps essayer avec deux microphones, puis étudier l'impact sur la précision du système lorsque l'on rajoute des microphones.
2020-05-28 12:24:06 +02:00
2020-05-22 18:09:22 +02:00
**Ajout du 22 Mai**
Une première version des programmes permettant de communiquer avec la carte son, l'échantillonnage et la localisation ont été écrits. Ils sont disponibles respectivement aux adresses:
* https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/carte_son_v1.cpp
* https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/echantillonnage_v1.cpp
* https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/localisation_v1.cpp
Si les deux premiers semblent fonctionner, le dernier n'est pas encore fonctionnel.
2020-05-25 21:43:09 +02:00
N.B: il est nécessaire d'utiliser ALSA via le header "asoundlib.h" pour le bon foctionnement des programmes.
2020-05-28 12:24:06 +02:00
2020-05-27 17:10:44 +02:00
**Ajout du 25 Mai**
2020-05-25 21:43:09 +02:00
L'objectif du jour était de faire fonctionner les programmes.
Pour traiter les sons qui arrivent à la carte son, il existe deux possibilités:
* hw:x;y
* plughw:x;y
L'utilisation de plughw:x;y (ou hw:x;y) sur mon pc doit se faire avec les paramètres suivants :
x=1 (carte 1),
y=0 (périphérique 0).
Afin de connaitre ces paramètres, il est possible d'utiliser la commande "aplay -l" dans le terminal.
Si hw:x;y est plus léger et permet d'accéder directement au hardware, plughw:x;y qui est plus "gourmand" semble pouvoir fonctionner sans problème sur une Raspberry Pi.
Une fois que les programmes ont bien fonctionnés, je les ai utilisés sur un autre pc (également sous linux) qui comportait un microphone interne stéréo (2 micros distants d'environ 5 cm). La détection fonctionne un peu mais il est cependant nécessaire de l'améliorer.
2020-05-25 21:51:56 +02:00
Programme en C++ permettant la localisation :https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/sound-source-loc_v.1.0.3.cpp
2020-05-25 21:50:48 +02:00
2020-05-25 21:51:56 +02:00
Programme en Java permettant d'afficher la détection : https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/SoundSourceDraw.java
2020-05-25 21:50:48 +02:00
2020-05-25 21:43:09 +02:00
Ubuntu Xenial et Raspbian (linux pour les raspberry pi) sont tous les deux basés sur la distribution Debian. ROS Kinetic pourra donc être aisément porter d'Ubuntu vers Raspbian.
2020-05-27 17:10:44 +02:00
Lien vers des explications afin d'utiliser des microphones sur une carte rasperry pi: https://www.pofilo.fr/post/20181216-mic-raspberry-pi/
2020-05-28 12:24:06 +02:00
**26 Mai**
En première partie de journée j'ai commencé mes recherches sur la façon d'utiliser cmake et j'ai réalisé des premières tentatives.
Dans l'après-midi l'alimentation de l'odinateur a coupé, j'ai donc essayé de trouver une solution pour la réparer/changer.
2020-05-28 22:09:36 +02:00
2020-05-27 17:10:44 +02:00
**Ajout du 27 Mai**
J'apprends a utiliser cmake.
http://rachid.koucha.free.fr/tech_corner/cmake_manual_fr.html
http://sirien.metz.supelec.fr/depot/SIR/TutorielCMake/index.html#principe
https://alexandre-laurent.developpez.com/tutoriels/cmake/
Il y a un problème de "référence indéfinie" lors de la compilation avec cmake car le header "asoundlib.h" n'est pas trouvé.
Afin d'améliorer la précision du programme existant, j'essaie de trouver d'autres façons d'obtenir la direction notamment via l'intercorrélation:
https://hal.archives-ouvertes.fr/hal-01146396/document
https://hal.univ-lorraine.fr/tel-01749833/document
2020-05-28 22:09:36 +02:00
N.B: Des problèmes avec l'alimentation de mon pc m'ont ralentis.
**Ajout du 28 Mai**
Le fichier CMakeLists.txt permettant de compiler le programme de compilation en c++ a été terminé: https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/CMakeLists.txt
Dans le chemin du CMakeLists, où se situe le programme localisation.cpp il faut donc utiliser cmake (version 3.10) dans le terminal :
1. cmake CmakeLists.txt
2. make
L'exécutable est alors créé avec toutes les dépndances nécessaires.
J'ai essayé d'optimiser le programme de localisation, mais pour le moment cela est infructueux.
2020-05-29 16:10:24 +02:00
Pour le moment le progrmme ne peut localiser la source sonore que selon 180°. Pour avoir une "vision" de 360° il semble nécessaire d'utiliser plus de 2 microphones (cela se dirige vers une utilisation de 4 microphones).
**Ajout du 29 Mai**
Le dossier contenant le fichier cmake permettant la compilation du programme de localisation a été rajouté à cette adresse : https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/commit/ccf2806151042984c21566d1376ce07901f0b20f . Ce dernier a été réécrit plus proprement. Le fichier java permettant de visualiser la direction du son a été ajouté au dossier.
2020-05-29 16:16:06 +02:00
Plusieurs idées ont été pensées pour localiser les sons à 360° autour du sujet. Elles sont au nombre de deux et utilisent toutes quatre microphones: https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/Utilisation%20de%204%20microphones.docx
2020-05-29 16:19:37 +02:00
Une machine virtuelle avec linux a été installée sur le pc fonctionnant sous windows. Ce dernier comportant plusieurs entrées microphones il pourrait être utile au moment de tester une solution avec plus de deux microphones. Sinon, le pc portable comportant un microphone interne stéréo a aussi une entrée pour un micro, peut-être que je pourrais l'utiliser.
2020-06-02 09:59:43 +02:00
Il existe aussi des microphones USB, à voir si je peux m'en procurer.
**Ajout du 02 Juin**
2020-06-02 10:47:46 +02:00
Une nouvelle solution permettant de n'utiliser que trois microphones a été pensée pour une localisaion à 360° (partie III du document suivant): https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/Localisation_360_degres.pdf
2020-06-02 15:46:40 +02:00
La décision a été prise d'utiliser ctte troisième solution, il a donc fallu adapter le code précédent (avec deux microphones) afin de prendre en compte et d'utiliser le troisième microphone. Plusieurs rajouts ont été écrits:
https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/Localisation_360
2020-06-03 14:52:30 +02:00
Un petit souciest survenu : lorsque le micro externe est branché sur le pc (par une prise jack), cela désactive automatiquement les micros internes. Cela empêche donc pour le moment d'utiliser plus de deux microphones. Il faut donc trouver un moyen de controler trois microphones sur un même pc (et sans table de mixage !). La carte son ne pouvant pas contrôler deux entrées directes en même temps, l'utilisation d'un microphone passant par un port USB (et donc n'utilisant pas la carte son) en complément des microphones internes pourrait fonctionner. Peut-être trouver un moyen d'utiliser mon smartphone comme microphone USB ?
**Ajout du 03 Juin**
Afin d'utiliser mon smartphone comme un microphone USB, j'ai essayé d'utiliser *Wo Mic*. Ce logiciel doit permettre de transmettre les sons captés par le téléphone via le port usb : https://wolicheng.com/womic/
2020-06-03 16:21:16 +02:00
Cela n'étant pas concluant, j'ai trouvé un moyen de connecter mon smartphone à mon pc en bluetooth, puis d'envoyer le son capté par le micro du téléphone au pc. Le problème est que le temps de latence est trop élevé et faussera donc les calculs (ces derniers étant basés sur le temps de parcours du son de la source jusqu'au microphone). Je pourrais alors utiliser trois téléphones connectés en bluetooth, mais il faudra modifier le code pour changer la voie d'acquisition du son (la bibliothèque hci_lib semble permettre cela).
2020-06-03 16:30:28 +02:00
Dans l'optique d'avoir un microphone USB, je me suis renseigné sur la façon de gérer la lecture des port USB en C++. Voici quelques liens intéressants:
2020-06-03 16:27:59 +02:00
* https://openclassrooms.com/forum/sujet/lecture-des-donnees-sur-le-port-usb-en-c-51856
2020-06-04 17:01:22 +02:00
* https://www.developpez.net/forums/d492303/c-cpp/cpp/librairie-controler-l-usb-rs232-cpp/ (bibliothèque libserial pour gérer les ports séries).
**Ajout du 04 Juin**
2020-06-05 10:52:59 +02:00
J'ai travaillé sur le début de mon rapport en début de journée. Ensuite installation de ROS Kinetic (desktop version et non desktop full version) sur la VM simulant Ubuntu Xenial: http://wiki.ros.org/kinetic/Installation/Ubuntu
La différence entre les deux versions réside dans la prise en compte de la perception et de la simulation 2D/3D ainsi que la navigation par la version "full".
2020-06-05 10:50:42 +02:00
Je me suis rendu compte que le son n'est pas géré correctement sur la VM:
2020-06-04 17:07:37 +02:00
1. Dans un premier temps le son en entrée n'était pas activer...
2. Ensuite, il a fallu changer le contrôleur audio de AC97 vers Intel Audio HD car la sortie ne foncionnait pas.
2020-06-04 17:35:32 +02:00
2020-06-04 17:32:29 +02:00
En revanche, les entrées microphones ne fonctionnait pas toutes sur la VM (seulement 1 sur les 3).
2020-06-04 17:55:31 +02:00
En passant du contrôleur audio Intel Audio HD vers SoundBlaster 16 plus rien ne fonctionnait (ni les entrées, ni les sorties). Je suis donc repassé sur Intel Audio HD et là : plus de micro du tout. Au final, le contrôleur aduio de départ AC97 fonctionne pour la sortie audio.
2020-06-05 10:50:42 +02:00
Après avoir testé une VM avec Ubuntu 20.04 en guest, il s'avère que le meilleur compromis est d'utiliser le contrôleur audio Intel Audio HD. Cependant, pour que l'unique entrée microphone détectée fonctionne, le microphone doit être branché dès le lancement de la VM.
**ajout du 05 Juin**
Récapitulatif des besoins pour utiliser le programme sur ubuntu xenial:
- Cmake version 3.5.1 : pas de mise à jour à faire
2020-06-05 10:52:59 +02:00
- g++ version 9 pour utiliser (compiler) le code en C++ 11 : mise à jour nécessaire https://doc.ubuntu-fr.org/gcc
2020-06-05 14:46:28 +02:00
- libasound2-dev pour avoir les headers Alsa nécessaires : installation nécessaire --> sudo apt-get install libasound2-dev
2020-06-05 14:48:28 +02:00
Apprentissage de l'utilisation de ROS Kinetic :
http://wiki.ros.org/ROS/Tutorials
2020-06-05 14:50:11 +02:00
http://wiki.ros.org/fr/ROS/Tutorials/UnderstandingNodes#:~:text=Un%20node%20n'est%20rien,fournir%20ou%20utiliser%20un%20Service.
2020-06-05 15:45:37 +02:00
https://niryo.com/fr/2017/03/comment-apprendre-la-robotique-avec-ros/
2020-06-05 16:44:28 +02:00
Il sera peut-être intéressant d'utiliser rqt_plot (package de ROS) afin de tracer la position angulaire de la source par rapport au robot.
2020-06-08 12:05:52 +02:00
Je travaille à présent sur la VM Ubuntu Xenial. Afin d'utiliser le microphone stéréo du petit pc portable, j'ai utilisé Audacity pour enregistrer le son et l'envoyer sur le pc "tour" (via leurs prises jack respectives, à l'aide d'un cordon jack mâle/mâle). La qualité audio ne semble pas trop impactée. L'utilisation du programme de localisation de source sonore avec ROS pourra au moins être testée pour une détection à 180°. Il serait toutefois intéressant de trouver le moyen d'utiliser 3 microphones.
**Ajout du 08 Juin**
Dans la matinée j'ai essayé de faire fonctionner mon programme avec ROS. J'ai donc:
* Créé un environnement de travail
* Créé un package localisation
* Construit le package localisation
* Paramétré le CMakeLists.txt pour la compilation du programme localisation.cpp avec catkin_make
* Testé l'exécution du node loca_exe permettant la localisation du son.
Par la suite, j'ai rédigé une "notice" afin de me rappeler aisément comment refaire toutes ces opérations:
2020-06-09 15:00:07 +02:00
https://gitcdr.univ-ubs.fr/ericsenn/localisation_audio/src/branch/master/Creation_package_v1.pdf
**Ajout du 09 Juin**
2020-06-09 16:16:51 +02:00
Le problème de source du setup.bash avant chaque exécution du programme a été résolu. Il fallait rajouter la ligne source ~/catkin_ws/devel/setup.bash à la fin du fichier .bashrc.
2020-06-09 15:00:07 +02:00
Afin d'utiliser les microphones USB et jack simultanéments, voici quelques pistes trouvées sur internet:
2020-06-09 15:00:48 +02:00
* https://wiki.debian.org/fr/ALSA#Outils
* https://blog.iglou.eu/2014/03/alsa-plusieurs-cartes-son-et-sortie.html