Auteurs: Pierre-Yves et Christophe
Date de création: 5 septembre 2017
Dernière révision: 16 janvier 2018
elikos_projet_introductif
Introduction
Objectif
Bienvenue dans Élikos! Ce document décrit votre première mission dans l’équipe. Elle vise principalement à introduire les différents outils que nous utilisons. Le résultat de ce projet n’est pas destiné à être exécuté sur le quadricoptère, mais sur les robots cibles Roomba, alors n’ayez pas peur d’essayer et d’échouer. Nous vous conseillons aussi de faire le travail en équipe pour vous aider et vous motiver, mais ce n’est pas obligatoire.
Présentation du projet
Votre mission consiste à implémenter le comportement d’un robot Roomba pour qu’il en suive automatiquement un autre selon les instructions qu’il reçoit du poste de commandement (votre ordinateur). L’équipe d’Élikos a réussi à intercepter les commandes de vitesse envoyées au robot Roomba cible et à intégrer sa position. Il vous suffit donc d’utiliser la position de votre robot et celle de la cible pour calculer et envoyer des commandes de vitesse à votre robot Roomba pour qu’il suive la cible à une distance fixe de votre choix (par exemple : 1 mètre). Vous avez environ deux semaines pour tenter d’accomplir la mission. En cas de problèmes, n’hésitez pas à contacter nos experts. Bonne chance!
Préalables
Voici quelques éléments préalables à l’accomplissement de la mission :
- Installation des outils
- Nous mettons à votre disposition une machine virtuelle contenant déjà les outils et le code de base. Pour l’utiliser, il est nécessaire d’installer VitualBox, d’être sur 64 bits et d’avoir au moins 4GB de RAM. Lien vers la machine virtuelle (usager/mot de passe =
elikos). Pour utiliser un fichier.ova, allez dansFile > Import Appliance...et choisissez le fichier. Si vous avez le message d’erreurVT-x/AMD-V hardware acceleration is not available on your system..., vous devez soit activer l’accélération matérielle dans votre BIOS ou désactiver l’accélération matérielle dans VirtualBox (Settings > System > Acceleration). - Pour de meilleures performances vous pouvez aussi faire l’installation vous-mêmes selon les capacités de votre ordinateur:
- Installer Ubuntu 16 LTS
- Dans une machine virtuelle : VitualBox et image Ubuntu 16.
- Dualboot
- Installer Git sur la machine Ubuntu avec la commande :
sudo apt-get install git - Créer un compte GitHub afin d’avoir accès au code source.
- Installer ROS Kinetic sur la machine Ubuntu.
- Installer Ubuntu 16 LTS
- Nous mettons à votre disposition une machine virtuelle contenant déjà les outils et le code de base. Pour l’utiliser, il est nécessaire d’installer VitualBox, d’être sur 64 bits et d’avoir au moins 4GB de RAM. Lien vers la machine virtuelle (usager/mot de passe =
- Lecture sur le fonctionnement de ROS
- Introduction
- Concepts clés
- Tutoriels ROS. Les tutoriels sont plutôt courts, faites au moins ceux de 1 à 6, le 8 (de la section 2.2 jusqu’à la fin), le 11 et le 13.
Étapes
- Téléchargement des fichiers sources et compilation :
À l’intérieur du dossier source de votreworkspaceROS, télécharger (“cloner”) le répertoireelikos_roombade notre compte GitHub avec la commande :
git clone https://github.com/elikos/elikos_roomba.git
Télécharger aussi le répertoirecreate_autonomypour le Roomba dans votre workspace avec la commande :
git clone https://github.com/AutonomyLab/create_autonomy
Faire le build depuis la racine de votre workspace avec la commande :
catkin_make
Enfin, n’oubliez pas de toujours sourcer votre workspace afin de pouvoir lancer votre programme. Depuis la racine de votre workspace :
source ./devel/setup.bash
Vous pouvez ensuite lancer la commande suivante afin de démarrer la simulation :
roslaunch elikos_roomba elikos_mission_roomba.launch
Le résultat devrait ressembler au suivant :
Notez que le robot vert ne bouge pas encore (c’est votre robot) et que le robot rouge se déplace (c’est celui que vous devez suivre). - Dans le package
elikos_roomba, créer un node Subscriber et Publisher en vous inspirant du tutoriel 11 de ROS. La pose du robot à suivre est publiée sur le topic/groundrobot1/pose, la pose du robot que vous devez contrôler est publiée sur le topic/groundrobot2/poseet vous devez publier la commande vélocité de votre robot sur le topiccmd_velavec un message de type geometry_msg::Twist. - Implémenter le comportement du Roomba (impressionnez-nous!). Si vous avez des questions, n’hésitez pas à nous contacter et à regarder la FAQ à la fin de ce document.
- Compléter le launch file
elikos_mission_roomba.launch. - Insérer le nom du node (à la place de
roombabot_node). - Compiler (
catkin_make), lancer le launch fileelikos_mission_roomba.launchet regarder le résultat! (Si vous n’avez pas ajouté la commande de source dans votre fichier.bashrc, n’oubliez pas de sourcer votre workspacesource ./devel/setup.bash)
Il peut être intéressant de générer le graph des topics avec la commande
rosrun rqt_graph rqt_graph
Vous devriez obtenir un résultat semblable à celui-ci :
Lorsque vous jugez avoir un résultat satisfaisant, venez nous le montrer et nous l’essaierons avec vous sur de vrais Roombas!
FAQ
Qu’est-ce qu’une pose?
Une pose est composée d’une position (vecteur 3D) et d’une orientation (quaternion). Elle définit l’état du robot dans l’espace.
Qu’est-ce qu’un quaternion?
Un quaternion est un vecteur définissant l’état d’un robot selon ses axes de rotation (x, y, z).
Je n’aime pas les quaternions, comment peut-on extraire un angle à la place?
Les quaternions sont très utiles quoique plutôt difficiles à manipuler. C’est pourquoi nous avons ajouté dans le CMakeLists.txt du package les dépendances à un package ROS nommé tf qui permet entre autres de manipuler les quaternions et que vous apprendrez à aimer lors de votre parcours dans Elikos. Pour l’instant, vous pouvez vous contenter d’inclure le fichier tf/transform_datatypes.h dans votre programme avec la ligne :
#include <tf/transform_datatypes.h>
et d’utiliser la fonction tf::getYaw:
static double tf::getYaw (const geometry_msgs::Quaternion &msg_q)
qui permet d’extraire l’angle de rotation (en radians) par rapport à l’axe Z (vers le haut) à partir d’un quaternion.
Comment contrôle-t-on un Roomba?
Un Roomba se contrôle en envoyant un message de type geometry_msg::Twist à son controlleur pour qu’il l’applique à ses moteurs.
Qu’est-ce qu’un Twist?
Un Twist défini une vitesse angulaire (radians/seconde) et une vitesse linéaire (mètres/seconde).
Je n’aime pas le C++, est-ce que je peux faire le projet dans un autre langage?
Oui absolument, ROS supporte également le langage Python. Quelques uns des tutoriels ROS mentionnés plus haut ont leur équivalent en Python. Le tutoriel 12 est celui qui vous sera le plus utile.
Une fois que mon code fonctionne, comment puis-je le déployer sur les Roombas?
Comme mentionné précédemment, nous t’assisterons dans cette tâche. Si tu veux plus d’informations sur le sujet, va voir le README du package elikos_roomba. Il contient beaucoup d’informations!
Feedback sur le projet
Afin de nous permettre d’améliorer le projet introductif et le recrutement de nouveaux membres pour les sessions à venir, veuillez s’il vous plaît remplir ce questionnaire. Merci!