Rapport de stage de 2ème année : Intégration d'un système d'audio-vidéo conférence sur un robot de téléprésence Gerontechnology Research Center, Yuan Ze University, Taiwan Kévin Ham Stage effectué du : 27/06/12 au 17/08/12 Maitre de stage : Pr. Yeh-Liang Hsu
2
Remerciements Je tiens à remercier toutes les personnes qui m'ont aidé durant mon stage et qui m'ont permis d'en apprendre tant sur le plan technique que humain et culturel durant ce séjour de deux mois à Taiwan. Je tient plus particulièrement à remercier mon maître de stage, Pr. Yeh-Liang Hsu, qui m'a accueilli au sein de son équipe et m'a insufflé sa philosphie du travail et de la vie. Je remercie également Rebecca, Wilson, Kévin et tout le reste de l'équipe du Gerontechnology Research Center pour leur aide, leurs conseils, ainsi que leur accueil et leur patience qui m'ont permis de réaliser mon stage dans une ambiance extrêmement agréable. 3
Table des matières Remerciements... 3 Introduction... 6 1. Gerontechnology Research Center de Yuan Ze University... 7 1.1. Historique... 7 1.2. Activités... 7 1.3. Mode de fonctionnement du laboratoire... 8 2. Contexte : Le projet Tric Mini+... 8 2.1. Contexte... 8 2.2. Tric Mini+... 10 2.2.1 Structure de Tric Mini +... 12 2.2.2. Expression faciale et déplacement du robot... 12 2.2.3. Mesures des signes vitaux... 13 2.2.4. Intégration des réseaux sociaux... 13 2.2.6. Enjeu de l'application... 14 3. Projet : Interpersonnal Communication... 15 3.1. Définition des exigences... 15 3.2. Analyse des applications existantes... 15 3.3. Description du code source... 16 3.4. Connaissances acquises... 17 3.5. Résultats... 18 4. Difficultés rencontrées... 18 Conclusion... 19 5. Annexe... 20 Table des illustrations Figure 1 : Logo du Gerontechnology Research Center de Yuan Ze University... 7 Figure 2 : Interface du menu de Comm&Care... 9 Figure 3 : Décentralisation de l'application Comm&Care... 9 Figure 4 : logo de TricMini+... 10 4
Figure 5 : Le robot Tric Mini +... 11 Figure 6 : Structure du système Tric Mini +... 12 Figure 7 : Interface de mesures des signes vitaux... 13 Figure 8 : Interface d'envoi de données via Facebook... 14 Figure 9 : StreamingLoop.java... 21 Figure 10 : la fonction doaction... 21 5
Introduction Dans le cadre de mon cursus à l'enseeiht, j'ai effectué mon stage technique de 2ème année dans le laboratoire de recherche Gerontechnology Research Center à l'université de Yuan Ze à Taiwan. Durant ce stage j'ai rejoint l'équipe travaillant sur le robot de communication Tric Mini+ et plus particulièrement sur l'intégration d'une application d'audio-vidéo conférence codé en Android. Ce stage technique est une introduction au monde du travail, qui m'a permis de découvrir le fonctionnement d'un laboratoire de recherche subventionné par le gouvernement de Taiwan, mais surtout de découvrir la culture du travail dans un pays totalement éloigné de la France mais pourtant berceau de la technologie actuelle. Ce fut l'occasion de mettre en pratique mes acquis théoriques au sein d'un projet de recherche, l'objectif étant d'obtenir un contrat avec une entreprise. C'est ainsi que j'ai pu assister et prendre part à toute une phase d'analyse et conception basée sur un cahier des charges définit avec un client et en parrallèle, développer ce même projet en vue de remporter le prix de la compétition PMC (Precision Machinery Research and Development Center). Dans ce rapport, je décrirai mon expérience au sein de cette équipe taïwanaise, d'un point de vue technique, méthodologique et personnel, ainsi qu'en terme de gestion de projet. Dans un premier temps, je présenterai le laboratoire et son activité. Nous nous intéresserons au contexte de mon stage, le projet et ses enjeux, puis nous verrons plus en détail la partie du projet sur laquelle j'ai travaillé lors de mon stage. 6
1. Gerontechnology Research Center de Yuan Ze University 1.1. Historique La gérontechnologie repose sur la conception d'environnement technologique pour l'assistance aux personnes âgées pour leur assurer santé, confort et sécurité ainsi qu'une indépendance dans leur activité au quotidien et leur offrir des moyens simples de sociabilisation. Organisé depuis 2001, le GRC fut officiellement fondé en Janvier 2003, et constitue alors le premier institut de recherche centré dans le domaine de gérontechnologie à Taiwan. Le GRC conçoit des technologies et produits fournissant des solutions pratiques aux différents problèmes de la société vieillissante. Le GRC est né de la volonté de fournir aux personnes âgées une assistance au quotidien à l'aide de produits high-tech. Figure 1 : Logo du Gerontechnology Research Center de Yuan Ze University 1.2. Activités Le centre de recherche et développement est divisé en trois secteurs majeurs : assistance aux personnes âgées, service de santé, et aide à la mobilité, concentrés sur des projets d'une durée de un à deux ans, commercialisables et adaptés au plus grand éventail de la population vieillissante. Les différents projets du GRC sont : Activity of Daily Life (ADL) monitoring : o capteurs d'humidité, de température, de mouvements o détection de chutes de personnes o SmartPad : surveillance de la qualité du sommeil ( bed actigraphy) utilisation de fibres conductrices pour concevoir un capteur de pression pour détecter les mouvements dans le lit Telepresence Robot for Interpersonnal Communication(TRIC) 7
Connecting Homes : Platforme de communication pour les personnes âgées Intelligent Robotic WheelChair (irw) : création d'un chaise roulante facilitant l'accessibilité et la manœuvrabilité et réduit la charge d'effort pour les personnes âgées. 1.3. Mode de fonctionnement du laboratoire La prise d'initiative de la part des membres du laboratoire est un point prédominant dans le fonctionnement du centre. En effet les différentes solutions aux problèmes et enjeux sont principalement issus de la propre réflexion des personnes travaillant sur les projets. Une réunion hebdomadaire durant laquelle le responsable du laboratoire donne ses directions de développement s'apparente à une séance de brainstorming lors de laquelle les membres du laboratoire constitués essentiellement d'étudiants en Master et Doctorat ont la chance d'exprimer leurs opinions, idées et points de vue et où la prise de parole est grandement encouragée par le superviseur. Il s'agit d'une partie de mon stage que j'ai beaucoup appréciée car ce fut une opportunité pour moi de comprendre le point de vue taïwanais sur des problèmes techniques mais aussi les points de vue de personnes issus de différents génies, en majorité des personnes spécialisés dans la mécanique mais aussi le design. 2. Contexte : Le projet Tric Mini+ 2.1. Contexte Le projet Tric Mini+ (Telepresence Robot for Interpersonnal Communication) est intégré dans le projet Comm&Care mais est développé de façon indépendante. Comm&Care est une application sur tablette Android ainsi que sur smartphone Android regroupant deux aspects fondamentaux : mesurer les signes vitaux tout en assurant un espace de communication avec l'entourage de l'utilisateur. Comm&Care se différencie des autres systèmes de télésanté à domicile. Moins axé sur le domaine médical et le suivi de santé par des personnes compétentes, il permet à l'entourage de l'utilisateur de se tenir informer sur l'état de santé de celui-ci. A l'attention du cercle privé, elle répond donc aux 8
problèmes actuels de coût trop élevé, systèmes trop compliqués ou manque de motivation de la part de l'utilisateur. Le leitmotiv de cette application : Social participation & Communication. C'est ainsi que se définit l'application, une transition entre les systèmes de télésanté à domicile vers un système alliant communication et santé. Figure 2 : Interface du menu de Comm&Care L'application se décompose en différentes fonctionnalités qui sont développées de façon indépendantes et utilise des appareils propres à chaque fonction. L'application repose sur la notion de Cloud Computing où la tablette Android de TricMini+ reçoit les données des différents appareils de mesures. Elles sont ensuite transmis à l'application Comm&Care via internet. 9
Figure 3 : Décentralisation de l'application Comm&Care Voici les différentes données récupérés par Comm & Care : mesure du taux d'humidité ambiant mesure de la température mesure de l'activité par détection de mouvement mesure de la qualité du sommeil par détection de mouvement lors du repos mesure des signes vitaux (sanguines, respiratoires et de cholestérol) J'ai eu l'occasion de travailler sur l'application Tric Mini+ qui est une application indépendante permettant notamment la gestion du robot mais les différentes missions de TRIC Mini+ seront développées plus en profondeur dans la partie suivante. 2.2. Tric Mini+ Figure 4 : logo de TricMini+ 10
TRIC (Telepresence Robot for Interpersonnal Communication) est un robot de téléprésence représentant une interface de communication, disposé dans l'environnement local de l'utilisateur. Ce robot repose sur l'idée que les outils de communication facilite les communications interpersonnelles en terme d'échange verbal en temps réel. Le deuxième fondement de TRIC est que la communication non verbale, comme les expressions faciales et le langage corporel sont tout aussi puissant et efficace pour véhiculer des idées, des pensées et des émotions. Tric Mini+ est commandé à l'aide de la fonction Tric de l'application Comm&Care, et regroupe les différents aspects de la communication : système d'audio-vidéo conférence, étude sur laquelle j'ai eu l'occasion d'effectuer mon stage; expression faciale et mouvement du robot; partage de photos et des mesures effectués automatiquement via facebook. Il réceptionne aussi les données reçus par les différents appareils de mesures des signes vitaux, qui pourront ensuite être synchronisé avec Comm & Care. Figure 5 : Le robot Tric Mini + 11
2.2.1 Structure de Tric Mini + TricMini+ est décomposé en deux parties distinctes : une tablette et le robot véhiculé. La tablette représente le centre de contrôle mais représente aussi la tête du robot pour l'affichage des expressions faciales. Figure 6 : Structure du système Tric Mini + Pour un plus grand niveau d'anthropomorphisme, la structure propre du robot se caractérise par une tête, un corps, deux bras et une base circulaire pour un déplacement possible à 360 degrés. Un "remote user" est capable de contrôler une partie des fonctionnalités de TricMini à l'aide de l'application Comm & Care notamment l'usage des expressions faciales du robot, l'audio video-conference et le partage de photos. 2.2.2. Expression faciale et déplacement du robot Une des fonctions du robot est de transmettre une expression de façon non verbale. Un set de différentes expressions faciales a donc été créés et sont affichables à l'écran de la tablette. Ces expressions peuvent être affichées automatiquement ou bien contrôlées par le 12
"remote user" ou le "local user". Ces expressions sont en adéquation avec les mouvements pré enregistré du robot pour transmettre les différentes émotions basiques : joie, peine, surprise, fatigue... 2.2.3. Mesures des signes vitaux Tric Mini +possède aussi un système de "home telehealth system" implanté sur la tablette. L'application récupèrent les informations provenant des différents appareils de mesures, les stockent et les analysent. Ces données sont ensuite envoyées par internet à l'application Comm & Care alors consultables par le "remote user". Figure 7 : Interface de mesures des signes vitaux 2.2.4. Intégration des réseaux sociaux TricMini a la capacité de se connecter à son propre compte facebook et peut être ami avec l'entourage de l'utilisateur de TricMini. Ainsi Les données des signes vitaux à l'attention de l'entourage ainsi que les photos postées sur facebook par les personnes amis de TricMini sont directement synchronisées respectivement sur facebook et la tablette. Les enfants/familles peuvent aussi envoyer des messages d'alerte à l'utilisateur de TricMini via Facebook qui seront automatiquement synchronisé à TricMini. 13
Figure 8 : Interface d'envoi de données via Facebook 2.2.5. Système d'audio-vidéo conférence La partie majeure de TricMini est basé sur le système d'audio-vidéo conférence, moyen de communication le plus simple et efficace. L'utilisateur peux communiquer via TricMini avec son entourage eux-mêmes connectés à l'application Comm & Care. J'ai eu la charge de cette partie et je développerai plus en détail mon expérience dans la prochaine partie de ce rapport. 2.2.6. Enjeu de l'application Toujours a l'état de développement de recherche, Le robot TricMini a été présenté au PMC Contest (Precision Machinery Research and Development Center) le 31 août dans l'espoir de gagner un prix et gagner du crédit et de la visibilité auprès des entreprises et du National Science Council of Taiwan. 14
3. Projet : Interpersonnal Communication 3.1. Définition des exigences L'application d'audio-video conférence intégré à TricMini+ est composé de deux parties : la partie de l'utilisateur de TricMini, "le local user" qui est capable de voir et parler à la personne avec la personne qu'il communique via la tablette Android du robot. la partie "remote user" qui communique avec l'utilisateur de TricMini via un ordinateur, ou l'application Comm & Care installée sur sa tablette Android ou son smartphone. L'un des enjeux majeurs est de pouvoir transmettre la vidéo et le son sans que ceux-ci soient saccadés. Le son ne pouvait pas être dégradé car la moindre dégradation à ce niveau rend l'utilisation du système vraiment inconfortable. La vidéo devait pouvoir se rafraîchir au moins 25 images par secondes pour que l'œil ne perçoivent pas la discontinuité. 3.2. Analyse des applications existantes La première phase de mon stage fut l'apprentissage et la prise en main du langage et des systèmes Android. Après une phase d'analyse des exigences, je devais trouver un moyen pour mettre en œuvre cette application. Deux possibilités s'offrent à moi : coder complètement l'application de a à z. utiliser une application tiers répondant aux besoins techniques et l'intégrer à l'application TricMini. Une première étape fut donc d'effectuer un examen des solutions déjà existantes à ce sujet. La première application en terme de vidéo-conférence est bien sûr skype. Cependant les termes de licence ne permet pas d'utiliser cette application en tant qu'application tiers intégré à une autre application. 15
D'autres applications open-sources furent étudier tels que SpyCam ou IpWebcam. La première ne répondait pas exactement au critère car elle utilisait le protocole rtsp et vlc Media Player pour transmettre la vidéo. En revanche IpWebcam correspondait de loin aux exigences requises. L'idée était donc de s'en inspirer pour développer notre application. 3.3. Description du code source L'application se compose de 7 fichiers sources et utilise la librairie jni de C++ : MainActivity.java CameraView.java NanoHTTPD.java NativeAgent.java NetInfoAdapter.java StreamingLoop.java StreamingServer.java MainActivity.java représente le main de l'application. Il hérite de la classe Activity qui représente une interface visuelle de l'application. MainActivity redéfinit donc les fonctions propres à la classe Activity notamment oncreate(bundle savedinstancestate), onstart(), ondestroy(), onresume(), onpause(). La fonction redéfinit qui nous intéresse est onstart() qui décrit ce que fera l'application lors de son démarrage. Au démarrage, l'utilisateur appuie sur le bouton start pour initialiser la vidéo et la caméra de la tablette, lancer le serveur sur lequel les utilisateurs vont pouvoir se connecter à l'aide de la fonction startserver(), et lancer la vidéo à l'aide de la fonction startstreaming(). Lors de la création du serveur, les classes NanoHTTPD, streamingserver et streamingloop qui seront expliqués par la suite sont appelées. Lors du streaming de la vidéo, les classes StreamingLoop et CameraView seront utilisées. CameraView.java gère les ressources matérielles de la tablette notamment l'utilisation de la caméra avec des fonctions prédéfinies sous Android, avec les classes Camera et MediaRecorder déjà implantées sous Android. 16
La diffusion de la vidéo sur internet est effectuée comme tel : la vidéo est d'abord enregistré sur la mémoire de la tablette, puis cette vidéo enregistré est accessible via le serveur de l'application. La fonction start() de la classe MediaRecorder permet d'enregistrer la vidéo sur la tablette. StreamingServer est la classe permettant la création du serveur de notre application. Ce serveur sera lancé à l'appel de la fonction startserver. Elle hérite de la classe NanoHTTPD qui permet la création d'un serveur http1.0. NanoHTTPD est une classe développé par un tiers sous la licence BSD et son utilisation est permise. Il permet la création simple d'un serveur Java portable. StreamingLoop est la classe qui s'occupera de l'envoi de la vidéo sur le serveur en utilisant les classes Socket et ServerSocket. NetInfoAdapter.java permet de gérer la connexion à Internet : accès par 3G, connexion à un routeur, une box, un réseau privé, etc. Plus particulièrement il permet de gérer l'attribution de l'adresse ip du serveur pour identifier l'adresse l'ip sur laquelle le "remote user" doit se connecter. 3.4. Connaissances acquises Le développement de cet application m'a permis d'en apprendre plus sur la mise en place d'un serveur, et l'envoi de données à celui-ci, notamment l'utilisation de Socket et ServerSocket pour la transmission de données, étudiée cet année lors du cours d'intergiciel. Vous pouvez voir sur la figure9 de l'annexe l'utilisation de ces éléments. L'une des notions sur laquelle reposait aussi l'application est l'utilisation de runnable et de Handler ce qui fut pour moi une tâche délicate car comprendre ces notions n'est pas chose aisé mais importante. L'utilisation de ces notions est présenté sur la figure10 de l'annexe. 17
3.5. Résultats L'intégration de cette application en elle-même fut réalisé. Et l'accès à l'application en cliquant sur un icône dans TricMini fut rendu fonctionnel. Une partie des exigences de l'utilisateur a été implanté et fonctionne notamment la transmission de la vidéo sur internet accessible via l'adresse ip où se trouve le serveur local http. Cependant on constate un léger délai de 3 secondes à laquelle je n'ai pas réussi à trouver une solution avant la date butoir de mon stage. La partie réception automatique sur tablette via l'application Comm & Care a aussi été codé et utilisable. Malheureusement, je n'ai pas eu le temps de rendre fonctionnel la partie audio qui a été malgré tout analysé mais non implanté, du au fait de la courte durée de mon stage. 4. Difficultés rencontrées La première difficulté rencontrée fut la prise en main du langage Android. Basé sur le langage Java, le temps d'adaptation ne fut pas très long mais les quelques subtilités du langage et des classes propres à Android tels que la classe Camera pour accéder aux ressources matérielles de la tablette ne furent pas forcément furent acquises au long du stage et m'a permis d'apprendre un nouvel environnement de développement. De plus les personnes dans mon laboratoire étaient pour la plupart issus du département de mécanique. J'étais donc le seul à travailler sur l'application d'audio-vidéo conférence et l'une de mes seules aides pour le développement de l'application fut internet. Enfin la courte durée de mon stage, dû au fait que j'effectuait un séjour d'étude à l'ecole Polytechnique de Montréal, Canada très tôt à la rentrée ne m'a pas permis d'approfondir et de construire une application entièrement fonctionnelle ce que je regrette un peu. 18
Conclusion Ce stage de sept semaines à Taiwan fut pour moi une bonne approche du mode de fonctionnement d'un laboratoire de recherche et demeure une expérience très formatrice sur le plan technique, méthodologique et organisationnelle. Le fait d'avoir pu travailler avec une équipe issus du département mécanique m'a fait découvrir l'enjeu d'un projet à grande échelle et pas seulement la partie développement de celui-ci. J'ai eu la chance d'apprendre l'esprit d'équipe et la répartition des tâches. De plus le fait d'avoir pu effectuer ce stage à Taiwan m'a fait connaître l'esprit de travail, la mentalité et la culture de l'effort pratiqués sur le continent asiatique. De plus je pense que ce stage en Android fut une chance pour moi d'apprendre des notions qui sont en adéquation avec mes projets futurs. Le développement d'application mobile sur smartphone ou tablette représente un axe de développement très importants dans le domaine de l'informatique et acquérir des capacités dans cette branche demeure un atout majeur pour aujourd'hui et demain. Ce stage au sein du Gerontechnology Center de Yuan Ze a été une expérience que j'ai beaucoup apprécié et qui m'a permis de découvrir un monde et un mode de travail différent du notre, et me fait prendre conscience que le développement informatique est présent dans le monde entier et que beaucoup d'opportunités s'offrent à nous en tant que futur ingénieur en informatique. 19
5. Annexe public class StreamingLoop { //Local data loopback private LocalSocket receiver,sender; private LocalServerSocket lss; private String localaddress; public StreamingLoop (String addr) { localaddress = addr; try { lss = new LocalServerSocket(localAddress); catch (IOException e) { e.printstacktrace(); public FileDescriptor getsenderfiledescriptor() { return sender.getfiledescriptor(); public FileDescriptor getreceiverfiledescriptor() { return receiver.getfiledescriptor(); public InputStream getinputstream() throws IOException{ return receiver.getinputstream(); public OutputStream getoutputstream() throws IOException{ return sender.getoutputstream(); public void ReleaseLoop() { try { if ( receiver!= null){ receiver.close(); if ( sender!= null){ sender.close(); catch (IOException e1) { e1.printstacktrace(); Log.d("MVRS", e1.tostring()); sender = null; receiver = null; public boolean InitLoop() { receiver = new LocalSocket(); 20
try { receiver.connect(new LocalSocketAddress(localAddress)); receiver.setreceivebuffersize(100); receiver.setsendbuffersize(100); sender = lss.accept(); sender.setreceivebuffersize(100); sender.setsendbuffersize(100); catch (IOException e) { e.printstacktrace(); return false; return true; Figure 9 : StreamingLoop.java private void doaction() { if ( inserver == false) { mycamview.preparemedia(targetwid, targethei); boolean ret = mycamview.startrecording(checkingfile); // SLEEP 2 SECONDS HERE... final Handler handler = new Handler(); Timer t = new Timer(); t.schedule(new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { mycamview.stopmedia(); Log.d("kevin","stop recording"); );, 1000); btnstart.setenabled(false); mymessage.settext( getstring(r.string.msg_prepare_waiting)); new Handler().postDelayed(new Runnable() { public void run() { if ( NativeAgent.NativeCheckMedia(targetWid, targethei, checkingfile) ) { startserver(); startstreaming();, 2000); // 2 seconds to release else { showtoast(this, getstring(r.string.msg_prepare_error1)); Figure 10 : la fonction doaction 21