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.
Réunions avec le tuteur
Rapport de la première réunion
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.
Rapport de la seconde réunion
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.
Travail de la semaine
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.
3ème et 4ème semaine
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.