Skip to content

Projet de Majeure en 5e Année : Implémentation de ROS sur un robot constitué uniquement de moteurs et d'encodeurs

Notifications You must be signed in to change notification settings

xav-jann1/ROSbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ROSbot

Projet de majeure Robotique en 5ème Année à l'école CPE Lyon.

Auteur : Xavier Jannin

Présentation du projet

Objectif : Implémenter ROS sur un robot constitué uniquement de moteurs et d'encodeurs.

Matériels utilisés :

  • Petit robot à roues différentielles, avec des encodeurs fixés sur des roues touchant le sol.
  • NUCLEO-STM32F411RE : intéragit avec la partie électronique (moteurs et encodeurs).
  • Raspberry Pi 3 Model B : exécute ROS et permet le contrôle du robot.

Structure

Pour respecter une commande en vitesse /cmd_vel, le DiffDriveController génère des commandes en vitesse pour les moteurs du robots.

Les encodeurs permettent de connaître la position des roues et de vérifier que les commandes sont correctement réalisées.

Les positions et vitesses sont renvoyées au DiffDriveController pour déterminer l'odométrie /odom.

Fonctionnement global du projet

En complément, la Raspberry implémente des outils de navigation pour générer des commandes en vitesse pour que le robot se déplace à une position demandée. Ces outils sont aussi capable d'éviter des obstacles en connaissant la carte dans laquelle se déplace le robot :

Navigation du robot sur RViz

Fonctionnalités

Liste des fonctionnalités réalisées et/ou souhaitées pour ce projet :

ROS :

  • Contrôle du robot :
    • DiffDriveController : réalise l'odométrie + génère des commandes pour chaque moteur à partir d'une commande en vitesse.
    • hardware_interface : communication entre la STM32 et le DiffDriveController.
    • Envoyer de commandes en vitesse avec le clavier ou la souris.
    • Visualisation des déplacements sur RViz.
  • Navigation :
    • Intégration de la Navigation Stack de ROS.
    • Génération du chemin (avec évitement d'obstacles) pour aller vers la position demandée grâce à une carte.
    • Génération des commandes pour déplacer le robot vers une position demandée.
    • Déplacement sans rencontrer d'obstacles.
    • Génération d'une carte à partir de capteurs (SLAM).
    • Utilisation de capteurs (lidar, ...) pour positionner le robot sur la carte (AMCL).

STM32 :

  • Encoder : classe pour récupérer la position d'un encodeur.
  • Motor : classe pour alimenter un moteur.
  • PID : classe pour réaliser un PID.
  • VelocityJoint : classe pour contrôler un moteur en vitesse grâce à un encodeur et un PID.
  • rosserial : communication avec ROS pour envoyer et recevoir des données.
    • : Envoie les informations des moteurs (position et vitesse).
    • : Récupère les commandes en vitesse du DiffDriveController pour les moteurs.
    • : Topics pour récupérer les informations des encodeurs.
    • : Topics pour modifier directement les valeurs des PIDs.

Vidéos de présentation

Eléments à installer

Pour faire fonctionner ce projet, il est nécessaire d'avoir les éléments suivants installés :

Partie STM32 :

  • STM32CubeIDE : IDE pour compiler et téléverser le programme sur la STM32.

Partie Raspberry :

  • Installation de l'image de Ubiquity Robotics qui a toute la configuration pour ROS et fonctionne directement en hotspot Wifi.

Partie ROS :

Si la compilation ne fonctionne pas, essayer d'installer quelques packages supplémentaires :

Note :

Commande pour installer un package :

$ sudo apt-get install ros-<distro>-<package-name>

Avec :

  • <distro> : nom de la distribution ROS utilisée (melodic, kinetic).
  • <package-name> : nom du package avec les _ remplacer par des - (mouse_teleopmouse-teleop).

Procédure de mise en route

Sur un ordinateur, exécuter les actions suivantes pour démarrer les outils principaux du projet : DiffDriveController, Navigation et contrôle avec la souris.

Avec le robot :

  • Utiliser STM32CubeIDE pour téléverser le programme contenu dans le dossier STM32 sur la STM32.
  • Allumer la Raspberry et brancher la STM32 dessus.
  • Se connecter sur le WiFi de la Raspberry : ubiquityrobotXXXX
  • Se connecter au Master ROS de la Raspberry :
    export ROS_MASTER_URI=http://10.42.0.1:11311
  • Compiler et sourcer le projet ROS sur l'ordinateur et la Raspberry, en étant dans le dossier ROS :
    $ catkin_make
    $ source devel/setup.bash
  • Lancer le launch file robot_bringup.launch du package robot_bringup depuis l'ordinateur pour démarrer le projet :
    $ roslaunch robot_bringup robot_bringup.launch

Sans le robot, en simulation :

  • Compiler et sourcer le projet ROS, en étant dans le dossier ROS :
    $ catkin_make
    $ source devel/setup.bash
  • Lancer le launch file simulation.launch du package robot_bringup pour démarrer le projet :
    $ roslaunch robot_bringup simulation_bringup.launch

Dans les deux cas, RViz s'ouvre pour visualiser les déplacements du robot.

Une autre fenêtre s'est aussi ouverte pour permettre l'envoie de commandes en vitesse au robot et le voir se déplacer sur RViz (et aussi dans la réalité).

Enfin, l'outil 2D Nav Goal de RViz permet de donner une position sur la carte, et le robot essaye d'y aller de manière autonome.

About

Projet de Majeure en 5e Année : Implémentation de ROS sur un robot constitué uniquement de moteurs et d'encodeurs

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages