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 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. .. code-block:: bash 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. .. code-block:: bash cd sudo apt update sudo apt-get update sudo apt upgrade sudo apt-get upgrade Vérifions la configuration en utf-8. .. code-block:: bash 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. .. code-block:: bash 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. .. code-block:: bash 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. .. code-block:: bash 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. .. code-block:: bash sudo apt install python3-colcon-common-extensions Lancement de la demo pour vérifier la bonne installation de ros2. .. code-block:: bash ros2 run demo_nodes_cpp talker Enfin, on peut supprimer les paquets téléchargés déjà installer puis reboot. .. code-block:: bash sudo apt autoremove sudo reboot Bien commencer ============== 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. .. code-block:: bash 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. 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. .. code-block:: bash cd ~/ros2_ws/src Puis on créer le package. .. code-block:: bash ros2 pkg create --build-type ament_python my_package Programmes type *************** Voici un premier nœud type dans lequel on retrouve tout ce qui est nécessaire pour commencer. .. code-block:: python 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() 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 : .. code-block:: bash cd ~/ros2_ws Puis vous pouvez compiler. .. code-block:: bash colcon build Vous pouvez aussi build un package en particulier pour gagner du temps .. code-block:: bash 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. .. code-block:: bash source install/setup.sh 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. .. code-block:: bash sudo nano ~/.bashrc Et y rajouter la ligne suivante à la fin : .. code-block:: bash 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. Commandes importantes ===================== Les executable ************** Un exécutable lance un nœud. .. code-block:: bash ros2 run nom_paquet nom_executable Les launchs *********** un launch lance plusieurs executable. .. code-block:: bash ros2 run nom_paquet nom_launch les topics ********** Lister les topics : .. code-block:: bash ros2 topic list Ecouter un topic .. code-block:: bash ros2 topic echo /nom_du_topic Info sur le topic .. code-block:: bash ros2 topic info /nom_du_topic les noeuds ********** lister les noeud : .. code-block:: bash ros2 node list rqt graph ********* Permet de visualiser les liens entre les nœuds et les topics sous forme visuelle. .. code-block:: bash ros2 run rqt_graph rqt_graph rviz **** rviz permet de visualiser l'environnement détecté par le robot. Par exemple visualiser les données du lidar .. code-block:: bash rviz2