3. Fonctionnement - RoboboUPMC2016/RobApp GitHub Wiki

L'application offre plusieurs fonctionnalités dont nous allons parler plus en détails dans cette partie. Comme nous l'avons indiqué dans l'introduction le but de ce projet est de facilité l'utilisation de robot et la création de comportements. Pour atteindre cet objectif nous avons du créer un système de gestion de comportements. Nous avons aussi mis en place un moyen de de télécharger et d'importer des comportement et de les charger dynamiquement pour les exécuter depuis notre applications. Il fallait aussi permettre aux utilisateurs de partager des informations sur les comportements facilement depuis l'application.

A. La gestion des comportements

Nous avons développé en parallèle de ce projet le framework RobDev. Le framework RobDev permet de créer des comportements réactifs pour les robots. Il fallait donc implémenter le framework dans l'application en gardant en tête cette particularité. Nous avons mis en place notre système propre système pour gérer l'exécution des comportements. Nous avons essayé de mettre en place un système de handler (Un peu comme les signaux en C) pour gérer les évènements. On définit un comportement "principal" qui va être exécuté et on définit des handlers pour gérer des évènements. Le comportement "principal" s'exécute et est suspendu lors de l'arrivée d'un évènement si cet évènement à un handler associé. Lors que la fonction associée au handler est terminée on reprend l'exécution du comportement "principal" là où elle a été suspendue.

Un handler n'est actif que dans les fonctions où il est défini. On peut définir des handlers pour des évènements dans un handler. Nous avons fait c'est choix de conception, car nous voulions laisser la possibilité à l'utilisateur d'imbriquer des handlers pour essayer d'obtenir des comportements plus complexes et plus intéressants.

Exemple 1 : Le comportement C définit la fonction F comme handler de l'évènement E1. Dans la fonction F on ne définit pas de handler pour les évènements.

Durant l'exécution du comportement E1 se produit. L'exécution du comportement se suspend et on exécute le handler E1 c'est-à-dire la fonction F. Pendant l'exécution de F si E si produit F continue de s'exécuter (C'est la même chose pour tout évènement qui pourrait se produire, car aucun handler n'est défini). Une fois F fini on retourne à l'exécution du comportement de base.

Exemple 2 : Cette fois dans F nous définissons la fonction G comme handler de l'évènement E1 et H comme handler de E2.

Durant l'exécution du comportement E2 se produit. L'exécution du comportement n'est pas suspendue, car le handler de E1 est défini dans F est pas dans le comportement de base. Maintenant l'évènement E1 se produit, alors comme dans le premier exemple on suspend l'exécution du comportement et on exécute F. Pendant l'exécution de F l'évènement de E se produit, cette fois F est suspendue et la fonction G est exécutée. Une fois G fini on reprend l'exécution de F. C'est la même chose si E2 se produit, comme l'évènement E2 a un handler dans F, F sera suspendu et H exécuté. Une fois F terminé on reprend l'exécution du comportement de base.

Pour régler les problèmes de synchronisation et de concurrence on à simulé le principe des sémaphores avec du java. Pour empêcher de l'exécution de plusieurs handler en parallèle.

Pour jeter un œil au code il faut regarder les classes ContextManager, ExecutionContext et Acts

B. Téléchargement et importation de comportement

Le premier problème que l'on a rencontré est que nous n'avons pas trouvé d'outil pour faire de la compilation dynamique dans un mobile Android. De plus, ce genre d'outil aurait tout de suite apporté énormément de problèmes sécurités. Nous avons donc créé un serveur (RobDex) pour compiler les comportements. L'utilisation de ce serveur complètement masqué aux utilisateurs. L'utilisateur qui télécharge un comportement depuis le réseau RobHub télécharge directement un comportement compiler et l'enregistre dans sont smartphone. Le comportement peut ensuite être lancé depuis l'application.

L'utilisateur peut s'il le souhaite importer un comportement compilé dans l'application. Il lui suffit de mettre le comportement dans le téléphone puis de l'application de l'importer ensuite il pourra l'utiliser. Le fichier .dex doit avoir le même nom que la classe Pour compiler un comportement manuellement :

  • Compiler le .java vers un .class en utilisant le jar de RobDev.(Commande javac )
  • Comipler le .class vers un .dex (Commande dx)

Exemple :

javac -source 1.7 -target 1.7 -cp RobDev.jar DummyRobot.java dx --dex --output="DummyRobot.dex" "DummyRobot.class"

Lors de l'import et du téléchargement de comportement le fichier robapp_behaviors_.xml est édité. Dedans on trouve toutes les informations sur les comportements téléchargés et importés.

Ce fichier se trouve dans le dossier downloaded_behavior.

C. Le partage

Le partage de vidéos ne se fait pas directement depuis l'application tous les comportements téléchargé sur RobHub on un QRcode qui permet de se rediriger sur la page du comportement via un navigateur. Une fois sur la page l'utilisateur peut noter le comportement partager ou regarder des vidéos sur le comportement. Depuis le navigateur l'utilisateur aura accès à toutes les fonctionnalités de RobHub.

Partie Suivante

⚠️ **GitHub.com Fallback** ⚠️