P29 QT pour tablette à retour tactile
Tuteurs : Laurent Grisoni
Projet de fin d'étude réalisé par Vivian Senaffe et Valentin Beauchamp
Sommaire
Objectif du Projet
Il s'agira d'adapter une libraire de création d'application interactive à une tablette à retour d'information tactile
Description
Le dispositif EVITA, mise au point par l'équipe MINT (collaboration entre les laboratoires CRISTAL et L2EP) est une tablette tactile particulière, dans la mesure ou elle dispose d'actionneurs piézoelectriques permettant à l'application de faire vibrer à trés haute fréquence l'ecran, par exemple en fonction de la position du doigt de l'utilisateur. Ces vibrations permettant à l'utilisateur, via son doigt en contact, de percevoir de l'information, aux cotés de celles accessibles via l'oeil et l'oreille. Sur ce dispositif sont en cours à la fois des recherches pour étendre la gamme des ressentis tactiles accessibles, ainsi que plusieurs projets de développement pour identifier les niches d'usages ou cette tablette pourrait faire sense (citons par exemple un projet de livre interactif pour enfants; un projet prospectif sur l'interet du tactile pour l'apprentissage de la lecture chez l'enfant dyslexique; un projet en cours de montage pour un dispositif de médiation culturel autour de livres trés anciens). Nous souhaitons disposer, et c'est le sujet ici proposé, d'une base de programmation d'application, du type QT (ou une autre base de travail à déterminer), pouvant être combinée de manière simple à des informations de retour tactile. Idéalement, la solution logicielle proposée pourra etre adaptée à d'autres dispositifs à retour tactile que la tablette EVITA. On illustrera le travail logiciel réalisé sur un petit exemple dont le scénario sera défini au début du projet.
Travail de la semaine
Première réunion avec notre tuteur
Travail à effectuer :
- Prise en main de Qt.
- Voir si il est possible de modifier les class de Qt (ajout de méthode ) sans modifier le fonctionnement par défaut de celles-ci. (Créer une méthode d’ajout de méthode, par exemple)
- Si le point précédent n’est pas possible, réfléchir à une autre approche du problème. (changer de technologie dans le pire des cas).
- Réfléchir à un moyen plus « pratique » d’implémenter les applications sur la tablette ( pour le moment codage sur la tablette elle-même), peut être fait plus tard.
1ère semaine
Durant la première semaine de travail, nous avons pris en main le codage en C++ qui nous était inconnu.
Afin de modifier la librairie QT nous envisageons plusieurs possibilités:
- Utilisation des fonctions statiques (très peu de maniabilité).
- Création de classes filles associées aux classes existantes. Cette solution est très maniable mais nécessite de bien comprendre la librairie existante de Qt et ensuite de créer une nouvelle librairie associée à celle-ci.
- Modification des classes existantes et introduction de nouveaux constructeurs. Cette méthode est semblable à la précédente mais sans créer de nouvelle librairie. Risque important de bugs. Si la librairie Qt vient à être mise à jour, les modifications apportées risquent fortement de ne plus fonctionner correctement.
- Créer "une classe mère" qui fonctionnerai pour toutes les méthodes de Qt existantes. Cette méthode risque d'avoir les mêmes problèmes que la précédente mais peut être rapide à mettre en place. La création d'un objet en C++ permet d'appeler si on le veut le constructeur de sa classe mère avant sa création afin de paramétrer celle-ci. Néanmoins nous ne pouvons pas prévoir à l'avance les "effets secondaires" de cette classe mère sur la bibliothèque Qt.
Pour la suite du projet, nous allons nous pencher vers la seconde méthode que nous pensons être la plus adaptée.
2ème semaine
Lors de notre seconde semaine de travail, nous avons testé les différentes méthodes citées la 1er semaine. Nous avons pu voir les différents avantages et inconvénients de chacune d'entre elles. Mais lors de la réunion avec M.Grisoni, nous avons compris que nous n'étions pas sur la voie souhaitée. Nous allons nous diriger vers la création d'un objet sous Qt qui gérera le système tactile des applications au lieu de modifier les fonctions existantes.
Seconde réunion avec notre tuteur
Lors de la seconde réunion, nous avons pu tester les différentes fonctions de la tablette tactile. Cette démonstration nous a permis de mieux appréhender la problématique posée. Cette réunion nous a permis de définir le travail que nous allons devoir effectuer pour la suite du projet:
- Voir si il est possible de créer un objet "tactile" à côté de la bibliothèque Qt qui va gérer le système tactile de l'application.
- Voir comment les événements sont traités sur Qt afin de les comprendre et les gérer pour éviter la latence sur le tactile.
- Voir comment récupérer les positions X et Y du doigt en valeurs absolues sur Qt pour faire le lien avec la tablette.
Test à effectuer:
- Créer un objet tel que précédemment qui permet un retour (visuel ou écrit) pour les tests en dehors de la tablette.
- Tester la récupération des positions X et Y du curseur de la souris sous Qt.
3ème et 4ème semaines
Nous avons travaillé sur le différents points aborder lors de notre seconde réunion avec M.Grisonni.
Nous nous sommes occupé dans un premier temps de la création d'un objet Qt. Celui-ci permet une génération de fonctions liées aux objets présents sur une application Qt. Ces fonctions pourront être à retour tactile dans le future.
Pour la position du "doigt", avec Qt, nous arrivons à récupérer les événements de la souris ( et donc du doigt ). Ainsi nous pouvons récupérer les positions X et Y de la souris.
Ainsi, dans cette vidéo, nous récupérons la position du curseur lors du passage du doigt, sur n'importe quel objet dans la fenêtre.
Média:mousetracking.avi
Dans cette seconde vidéo, nous récupérons la position du curseur en dehors du bouton, et lorsque l'on clique dessus, nous récupérons sa position
Média:evenement.avi
Nous ne détectons pas de temps de latence mais des tests sur la tablette seront nécessaire pour s'assurer de cela.
La bibliothèque Qt a été créée pour que chaque objet fonctionne en autonomie. Un objet gérant des fonctionnalités d'autres objets n'a pas été pensé. Il ne semble donc pas possible de savoir (au moyen d'un signal par exemple) si un objet a été rattaché a une fenêtre.
Nous devons donc appeler une méthode de l'objet créé pour pouvoir ajouter un autre objet souhaité à la liste des objets rendus "tactile".
Pour le moment nous ne voulons pas toucher à la bibliothèque Qt existante. La possible modification de la bibliothèque Qt devra être discuté avec notre tuteur.
5ème et 6ème semaines
Durant ces semaines, nous avons travaillé sur l'objet externe à Qt, qui doit attribuer un retour tactile aux objets présents sur une application. Pour mettre en place cet objet, nous avons rencontré deux principaux problèmes.
- Lors de la création d'un objet sur Qt, aucun signal n'est envoyé. Il est donc impossible de connaître les objets présents sur une application de manière directe. Pour connaître les objets présents sur une application, il nous faut parcourir la liste des objets rattachés à une fenêtre lors de sa création. Cette liste ne peut être obtenue que si les objets présents dans la fenêtre sont dans un état "actif" et "visible". Une fois cette liste complète, l'objet externe à Qt doit stocker et apporter les modifications aux objets de l'application selon leur classe et les spécificités apportées par le programmeur.
- cette méthode demande de très haute performance. Qt travaillant par évènement, il nous semble difficile d'obtenir le résultat souhaité avec cette solution.
Une conclusion à ces deux dernières semaines de projet est que la solution proposée par notre tuteur est sûrement trop lourde à mettre en œuvre. Elle risque de demander beaucoup de ressources à la tablette inutilement.
La solution qui nous semble donc la plus appropriée maintenant est celle de la modification de la bibliothèque Qt.
Troisième réunion avec notre tuteur
Lors de cette troisième réunion avec M.Grisoni, nous avons pu exposer le travail effectué lors des semaines précédentes. Nous avons ainsi pu lui expliquer les problèmes que nous avons rencontrés.
M.Grisoni a soutenu l'idée de modifier la bibliothèque Qt au lieu de créer un objet externe à celle-ci.
Pour la suite du projet, nous devrons donc comprendre le fonctionnement de Qt afin de pourvoir dans un premier temps, recompiler la librairie. Dans un second temps, apporter des modifications à celle-ci pour influencer le comportement des objets Qt.
7ème et 8ème semaines
A la suite de notre réunion avec notre tuteur, nous avons abandonné l'idée d'un objet externe à Qt.
Nous nous sommes concentrés sur la re-compilation de la librairie Qt. Pour cela nous avons du prendre en main les paramètres de compilation de Qt.
Afin d'éviter de modifier chaque classe de la bibliothèque, nous avons décidé d'apporter des changements seulement sur ces classes abstraites. Chaque objet bouton de Qt, par exemple, n'ayant pas besoin d'un comportement différent de base, il est inutile de leur apporter des modifications spécifiques. Pour nos tests, nous avons modifié la classe "QAbstractButton" de Qt afin de modifier le comportement des boutons. Une fois compiler avec notre librairie modifiée, nous avons pu observer l'ajout de fonctionnalité lors du clique sur le bouton.