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