2.2.1. Introduction

ROS 2, ou Robot Operating System 2, est une plateforme open-source conçue pour faciliter le développement de logiciels pour les robots. Il s’agit d’une évolution de ROS, offrant une architecture plus modulaire et des améliorations de performance par rapport à son prédécesseur. ROS 2 a été conçu pour être plus adaptable à un large éventail de matériel et de systèmes d’exploitation, ce qui en fait une solution polyvalente pour la robotique. Il offre des outils et des bibliothèques pour la gestion des communications, la gestion des périphériques, la planification de trajectoires, et bien plus encore, facilitant ainsi le développement de robots et de systèmes robotiques complexes.

La distribution ros2 que nous utilisons est « Humble », dont voici la doc : https://docs.ros.org/en/humble/Tutorials.html

2.2.2. Installation et Setup

Impératif : ROS2 doit être installer sur une version de l’OS Ubuntu 22.0x, une version inférieure telle qu’un Ubuntu 20.0x ne pourra installer ROS2.

Si vous avez déjà une version de ros ou de ros2 installer sur votre pc nous recommandons de les retirer pour ne pas rencontrer de problème par la suite.

sudo apt-get purge ros-*
sudo apt-get autoremove

Attention il est possible que cette démarche d’installation ne fonctionne plus, à ce moment veuillez vous referez à la documentation de ros2 et mettez à jour cette documentation : https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html

Commençons par mettre à jour la Pi.

cd
sudo apt update
sudo apt-get update
sudo apt upgrade
sudo apt-get upgrade

Vérifions la configuration en utf-8.

locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings

Téléchargement des dépôts ROS2.

sudo apt install software-properties-common
sudo add-apt-repository universe

sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg


# Ajout du repo a la liste des paquets
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

sudo apt update
sudo apt upgrade

Installations de ros2 et de ces composantes de navigation, cela peut prendre un bon moment.

sudo apt install ros-humble-desktop
sudo apt install ros-humble-ros-base
sudo apt install ros-dev-tools

echo "source /opt/ros/humble/setup.bash" >> .bashrc

source .bashrc

sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-turtlebot3*

Installation et sourçage des variables d’environnement de service dds pour la communication à distance. Cela peut être très long. Une fenêtre vous demandant d’accepter la licence RTI s’ouvrira pendant l’installation, vous devez accepter.

sudo apt install -q -y rti-connext-dds-6.0.1

cd /opt/rti.com/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd -

Installation de colcon pour build les packages.

sudo apt install python3-colcon-common-extensions

Lancement de la demo pour vérifier la bonne installation de ros2.

ros2 run demo_nodes_cpp talker

Enfin, on peut supprimer les paquets téléchargés déjà installer puis reboot.

sudo apt autoremove
sudo reboot

2.2.3. Bien commencer

2.2.3.1. Creation d’un workspace

Un workspace, littéralement « espace de travail », est un dossier qui contient vos fichiers source (les packages), les install, les logs et les fichiers sources compilés.

mkdir -p ~/ros2_ws/src

Vous créer ici le workspace de nom « ros2_ws » (vous pouvez l’appeler comme vous le souhaitez.) et par la même ocasion le dossier src qui contiendra les packages.

2.2.3.2. Création d’un package

Afin de séparer les différentes parties d’un projet, il est recommandé de créer plusieurs package dans le dossier src de votre espace de travail.

On commence par se rendre dans le dossier source de notre workspace précédemment créer.

cd ~/ros2_ws/src

Puis on créer le package.

ros2 pkg create --build-type ament_python my_package

2.2.3.3. Programmes type

Voici un premier nœud type dans lequel on retrouve tout ce qui est nécessaire pour commencer.

import rclpy #lib ro2
from rclpy.node import Node #import de la classe Node
from std_msgs.msg import String #import du type de message de topic String, cette ligne doit etre adapté

#création de notre neoud, ce dernier est un objet herité de la classe Node de la librairie
class MyNode(Node):
    def __init__(self):
        super().__init__('my_node') #nom du noeud en parametre
        self.publisher_ = self.create_publisher(String, 'my_topic', 10) #creation d'un publisher (type de message, nom du topic, timeout)
        self.subscription_ = self.create_subscription(String, 'my_topic', self.callback, 10) #creation d'un subscriber (type de message, nom du topic, fonction a appeler, timeout)
        self.timer_ = self.create_timer(1.0, self.timer_callback) #creation d'un timer (periode, fonction a appeler)
        self.get_logger().info('Node initialized')

    def callback(self, msg):
        #cette fonction est appeler a chaque fois qu'un message est lu
        self.get_logger().info('Received message: "%s"' % msg.data) #renvoie du message lu

    def timer_callback(self):
        # cette fonction est appeler a une certaine frequence definis
        msg = String() #creation de l'objet msg
        msg.data = 'Hello, ROS 2!' #on remplis le message
        self.publisher_.publish(msg) #on publie sur le publisher
        self.get_logger().info('Published message: "%s"' % msg.data)

#en dessous les lignes suivante sont obligatoire et toujours en fin de programme
#creation de la fonction main
def main(args=None):
    rclpy.init(args=args)
    node = MyNode()
    rclpy.spin(node)
    rclpy.shutdown()

if __name__ == '__main__':
    main()

2.2.3.4. Build d’un workspace avec colcon

À chaque fois qu’un fichier est modifié, il est nécessaire de compiler de nouveau votre espace de travail. Pour cela, placer vous dans le vôtre workspace puis entrer la commande suivante

Commencer par vous placer dans votre workspace :

cd ~/ros2_ws

Puis vous pouvez compiler.

colcon build

Vous pouvez aussi build un package en particulier pour gagner du temps

colcon build --packages-select my_package

Une fois le build terminer il est nécessaire de sourcer de nouveau votre travail. La compilation à créer le fichier sh nécessaire à l’installation.

source install/setup.sh

2.2.3.4.1. alias

Pour simplifier la compilation, je recommande de créer un alias pour ne pas à avoir a lancer les deux ligne précédente, pour cela, nous allons éditer le fichier bashrc qui gère votre terminal.

sudo nano ~/.bashrc

Et y rajouter la ligne suivante à la fin :

alias rb='colcon build && source install/setup.sh'

Maintenant en entrant la commande “rb” dans votre terminal, la compilation puis le sourçage s’effectuera.

2.2.4. Commandes importantes

2.2.4.1. Les executable

Un exécutable lance un nœud.

ros2 run nom_paquet nom_executable

2.2.4.2. Les launchs

un launch lance plusieurs executable.

ros2 run nom_paquet nom_launch

2.2.4.3. les topics

Lister les topics :

ros2 topic list

Ecouter un topic

ros2 topic echo /nom_du_topic

Info sur le topic

ros2 topic info /nom_du_topic

2.2.4.4. les noeuds

lister les noeud :

ros2 node list

2.2.4.5. rqt graph

Permet de visualiser les liens entre les nœuds et les topics sous forme visuelle.

ros2 run rqt_graph rqt_graph

2.2.4.6. rviz

rviz permet de visualiser l’environnement détecté par le robot. Par exemple visualiser les données du lidar

rviz2