documentation

View project on GitHub

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 :

  1. Installation des outils
    1. 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 dans File > Import Appliance... et choisissez le fichier. Si vous avez le message d’erreur VT-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).
    2. Pour de meilleures performances vous pouvez aussi faire l’installation vous-mêmes selon les capacités de votre ordinateur:
      1. Installer Ubuntu 16 LTS
        1. Dans une machine virtuelle : VitualBox et image Ubuntu 16.
        2. Dualboot
      2. Installer Git sur la machine Ubuntu avec la commande : sudo apt-get install git
      3. Créer un compte GitHub afin d’avoir accès au code source.
      4. Installer ROS Kinetic sur la machine Ubuntu.
  2. Lecture sur le fonctionnement de ROS
    1. Introduction
    2. Concepts clés
    3. 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

  1. Téléchargement des fichiers sources et compilation :
    À l’intérieur du dossier source de votre workspace ROS, télécharger (“cloner”) le répertoire elikos_roomba de notre compte GitHub avec la commande :
    git clone https://github.com/elikos/elikos_roomba.git
    Télécharger aussi le répertoire create_autonomy pour 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 :
    Gg2AaQg.jpg
    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).
  2. 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/pose et vous devez publier la commande vélocité de votre robot sur le topic cmd_vel avec un message de type geometry_msg::Twist.
  3. 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.
  4. Compléter le launch file elikos_mission_roomba.launch.
  5. Insérer le nom du node (à la place de roombabot_node).
  6. Compiler (catkin_make), lancer le launch file elikos_mission_roomba.launch et regarder le résultat! (Si vous n’avez pas ajouté la commande de source dans votre fichier .bashrc, n’oubliez pas de sourcer votre workspace source ./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 : Y0aCuER.png
    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!