5. Ajout de modules - RoboboUPMC2016/RobApp GitHub Wiki
Dans cette section nous allons voir comment ajouter un module à l'application, comment lier le robot et le framework en nous appuyant sur le code existant.
Nous allons utiliser l'exemple Speech Production Module.
Étape 1 : Mettre à jour le framework RobDev. Il faut définir une fonction qui permet de parler dans le framework. Nous avons appelé la fonction speak(String text).
Étape 2 : Ajouter le module à l'application. Il faut ajouter les dépendances dans les fichiers de configuration du projet.
Dans le fichier build.gradle de l'application il faut ajouter la ligne suivante dans la section dependencies : compile 'com.mytechia:robobo-speechproduction-module:0.1.0' .
On obtient fichier de cette forme :
dependencies {
//Ici placez vos dépendances
compile 'com.mytechia:robobo-speechproduction-module:0.1.0'
}
Il faut aussi mettre à jour le fichier modules.properties (Voir [Projet Robobo|https://bitbucket.org/mytechia/robobo-framework] )
Étape 3 : Compléter le code de la classe Acts. Ajouter la fonction du framework dans cette classe. Le déroulement d'une action est le suivant :
- Vérifier si un handler est en cours d'exécution.
- Verrouiller l'accès aux actions, pour éviter les envoies concurrents d'actions au robots.
- Faire l'action
- Important : Si vous devez faire une action qui fait tourner les moteurs vous devez relâcher le verrou et attendre la fin de l'action. Dans notre exemple ce n'est pas le cas donc on ne le fait pas et on relâche le verrou tout de suite.
Exemple :
public void speak(String text){
checkHandler();
ContextManager.lockAction();
speechModule.sayText(text,ISpeechProductionModule.PRIORITY_HIGH);
ContextManager.unlockAction();
}
Autre Exemple :
public void turnRight() {
checkHandler();
ContextManager.lockAction();
try {
moveModule.turnRightAngle(VELOCITY, (int) (90 * 4.89));
ContextManager.unlockAction();
waitCommandEnd();
} catch (InternalErrorException e) {
e.printStackTrace();
}
}
Nous avons développé notre modèle réactif pour que l'ajout d'évènements soit assez simple. Nous allons prendre l'exemple du module shock.
Étape 1 : Mettre à jour le framework RobDev, ajouter dans l'énumération Event l'évènement Shock
Exemple :
public enum Event {
SHOCK_DETECTED,
IRFRONT,
IRBACK;
}
Étape 2 : Ajouter le module à l'application. Il faut ajouter les dépendances dans les fichiers de configuration du projet.
Dans le fichier build.gradle de l'application il faut ajouter la ligne suivante dans la section dependencies : compile 'com.mytechia:robobo-speechproduction-module:0.1.0' .
On obtient fichier de cette forme :
dependencies {
//Ici placez vos dépendances
compile 'com.mytechia:robobo-speechproduction-module:0.1.0'
}
Il faut aussi mettre à jour le fichier modules.properties (Voir [Projet Robobo|https://bitbucket.org/mytechia/robobo-framework] )
Étape 3 : Utiliser les listeners fournis le module pour gérer la réception de l'évènement et utiliser le contexte manager pour l'envoyer au comportement et aux handlers.
Exemple :
IShockDetectionModule shockMod = (IShockDetectionModule) roboboManager.getModuleInstance(IShockDetectionModule.class);
shockMod.subscribe(new IShockDetectionListener() {
@Override
public void shockDetected(ShockCategory shock) {
ContextManager.dispatcheEvent(Event.SHOCK_DETECTED);
}
});
Le système que nous avons mis en place gérera tout seul le faite d'attendre un évènement ou d'ajouter un handler pour cet évènement.
Pour tester l'ajout de votre fonction nous vous conseillons d'utiliser notre ensemble de fichiers de tests. Nous l'avons créé en même temps que le framework. Elle permet de vérifier la non-régressions de l'application si tous les comportements fonctionnent correctement vous pourrez en déduire que les anciennes fonctionnalités du framework fonctionnent toujours avec vos modifications. Malheureusement, nous n'avons pas pu développer un outil pour vérifier plus formellement et automatiquement la correction du framework et des comportements.