Setup complet de la configuration du matérielle et de l'environnement de la RPi⚓
Objectif : faire fonctionner les moteurs depuis la Raspberry Pi
Setup⚓
- Raspberry Pi 5
- OS : Ubuntu 24.04.3 LTS
- ROS 2 Jazzy
- PixHawk 6c
1ère étape : établir la connection entre la RPi et le Pixhawk 6c⚓
Nous avons suivi le guide n°1 de la section référence
Je recommande donc de lire cette section document en parallèle avec 1.
Certains points pourraient cependant être plus clairs.
Partie wiring⚓
Concernant les connections entre les différentes charges utiles du drone, tout est détaillé dans le hw_setup.md.
QGroundControl⚓
Fonctions⚓
Les stations de contrôle au sol (GCS) sont des systèmes terrestres qui permettent aux opérateurs de surveiller et de contrôler un drone et ses charges utiles. QGroundcontrol est un des softwares utilisés pour cela et c'est celui que nous avons choisi. Il permettra notemment de configurer les paramètres du Pixhawk, de calibrer les composants principaux (moteurs, télécommande RC, batterie, capteurs, ...) et d'avoir un retour en direct de l'état du drone lors de son vol ainsi que l'accès aux logs si le drone est équipé d'un module qui permet d'établir le lien à distance avec la station de base.
Installation⚓
Installez le en suivant le lien disponible en 2.
Partie Ubuntu Setup on RPi⚓
La note en bas de cette capture d’écran est erronée, dans la suite, certaines commandes utilisent ce port (/dev/serial0) qui n’existe pas dans notre cas.
Il faudra donc utiliser le port /dev/ttyAMA0 à la place.
[!IMPORTANT] Afin d'assurer la communication entre la RPi et le PixHawk, nous n'allons pas utiliser MAVLINK mais plutôt uXRCE-DDS qui permet d'utiliser ROS2. Cependant, les deux communications sont présentées dans le guide c'est pourquoi nous apportons nos correctifs pour la partie MAVLINK. Si vous souhaitez directement utiliser uXRCE-DDS, allez directement à la partie dédiée à uXRCE-DDS
MAVLINK Communication⚓
This commands return on RPi 5:
1 2 | |
Afin de contourner cela, il y a deux options :
- Créer un environnement virtuel
-
forcer l’installation :
1sudo pip3 install mavproxy --break-system-packages
Nous avons choisi la seconde option puisque cette Raspberry Pi était entièrement dédiée au projet. Avec le recul, je recommande de faire la première option.
N'oubliez pas ensuite de remplacer le port serial0 par ttyAMA0.
1 | |
Voici ce que vous devriez voir :
ROS 2 and uXRCE-DDS⚓
Cette partie ne présente pas de différence avec ce que nous avons.
ROS Setup on RPi⚓
[!IMPORTANT] Dans cette partie, nous allons installer ROS2 Jazzy et non Humble comme recommandé dans le guide.
Installation de ROS2 Jazzy⚓
Pour l'installation de ROS2 Jazzy, suivez le guide officiel 3. Pour apprendre les bases de ROS2, n'hésitez pas à suivre le tutoriel fourni dans la documentation de ROS2 Jazzy 4.
Puis lancez cette commande en vous plaçant dans votre environnement virtuel python.
Pour cela :
- Aller dans le fichier de config pyvenv.cfg dans l'environnement virtuel /venvs
- Passer le champs include-system-site-packages à true et sauvegardez les changements
- Réactivez l'environnement virtuel.
1 | |
Installation de colcon et construction des packages⚓
1 | |
Créez et placez vous dans votre futur espace de travail ros2.
1 2 | |
Clonez les deux packages ros2 suivants.
1 2 | |
Puis lancez le build de ces deux packages.
1 2 3 | |
Test de la liaison avec le PixHawk⚓
Remplacez le port serial0 par ttyAMA0.
1 | |
Après avoir lancé cette commande dans un terminal, il est nécessaire de la laisser exécutée. Elle établit le lien série avec le PixHawk.
[!NOTE] Dans le cas où le lien n'est pas établi. Vérifiez bien que mav0_config et mav1_config sont disabled dans QGroundcontrol. S'ils le sont, essayez de reboot la RPi.
Ainsi, dans un nouveau terminal, exécutez :
1 2 | |
Cela affichera l’ensemble des topics disponibles sur le PixHawk (vous devriez avoir une longue liste de topics)
2ème étape : installer et tester ROS 2 sur un exemple simple⚓
Concernant cette étape, il est nécessaire de suivre ce guide 5. Voici les correctifs proposés pour cette partie.
Setup Micro XRCE-DDS Agent & Client⚓
Remplacez cette partie entière là du guide par cette commande qui établira le lien série avec le PixHawk. Si vous l'avez déjà lancée dans un autre terminal, passez cette étape.
1 | |
Reprenez le guide à la partie Running the example. Suivez le guide jusqu’à la partie Optionnelle.
Voici fenêtre de résultat des capteurs donnée dans le guide.
Comme le PixHawk capte ces données à une certaine fréquence, cette fenêtre est en fait rafraîchie et si vous bougez/tournez le PixHawk, les données devraient changer.
3ème étape ROS 2 Offboard Control Example⚓
Pour cette étape, nous voulons tester l'ensemble de la chaîne de communication lançant le mode de vol OFFBOARD (cf 6). Le but étant de réussir à faire tourner les moteurs sans les pales et à déclencher l'enregistrement sur la caméra Inivation depuis la télécommande Taranis.
SETUP matériel⚓
Cette étape va nécessiter une première phase de setup matériel. En effet, souhaitant lancer un vol depuis la Raspberry, il faut établir toute la chaîne depuis la raspberry jusqu’aux moteurs, à savoir :
- RPi <-> PixHawk (déjà fait)
- PixHawk <-> Alimentation (réf de la batterie)
- PixHawk <-> ESC (via boitiers PWM)
- ESC <-> moteurs
- GPS <-> PixHawk
- Module de Télémétrie <-> PixHawk
- Caméra événementielle <-> RPi
Le Setup Matériel est développé dans le document lié au seup matériel du drone.
La seconde étape (PixHawk <-> Alimentation) requiert quelques précautions : - il est très vivement conseillé de charger la batterie avant de l’utiliser - n’hésitez pas à lire la documentation du chargeur associé à cette batterie
Après avoir établi toutes ces liaisons, passez à la suite de ce guide.
Setup du workspace ROS2⚓
Récupérez le package ROS2 disponible à ce chemin et copiez le dans votre workspace ROS2 où sont déjà présents px4_ros_com, px4_msgs et dvx_camera.
1 | |
Puis compilez ce package.
1 2 3 | |
Lancement du test⚓
Terminal 1: Lancer la communication uXRCE-DDS⚓
1 | |
Terminal 2: Offboard launch file⚓
Adaptez le chemin vers lequel vous souhaitez lancer le record de la caméra Inivation dans le fichier camera_trigger_node.cpp à la ligne 37 (/ros2_ws/src/procom_offboard/src/camera_trigger_node.cpp).
Lancez ensuite le launch file offboard_control_launch.yaml
1 | |
Lancement de l'enregistrement⚓
Afin de lancer l'enregistrement de la caméra depuis un switch de la télécommande, il est nécessaire de configurer la télécommande ainsi que la section flight_modes sur QGroundcontrol. La procédure est détaillée dans hw_setup.md disponible à ce lien
Il suffit alors de changer l'état du Switch associé à la caméra (cam sur la télécommande) pour lancer l'enregistrement lorsque le launch file est exécuté et que le lien avec le PixHawk est établi.
Lancement des commandes vitales du drone lors du démarrage de la RPi⚓
Creation des services pour lancer les commandes au démarrage:
Étape 1 — Service MicroXRCEAgent⚓
1 | |
→ Contenu à copier coller : Ne pas oublier de changer les variables entre crochets
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Étape 2 — Service ROS2⚓
1 | |
→ Contenu à copier coller : Ne pas oublier de changer les variables entre crochets
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Étape 3 — Activer les services⚓
1 2 3 | |
Puis
1 | |
[!Note] si changement du code des services :
1 2 | |
Etape 4 – Tester les services⚓
-
ROS2 Nodes :
1sudo usermod -aG dialout <your_user>Pour voir les logs :
1journalctl -u ros2_drone.service -fPour voir l’état du service :
1systemctl status ros2_drone.serviceExemple d’output :
1 2 3 4 5 6 7 8 9 10 11 12
● ros2_drone.service - ROS2 Drone Nodes Loaded: loaded (/etc/systemd/system/ros2_drone.service; enabled; preset: e> Active: active (running) since Wed 2026-03-04 13:43:01 CET; 6min ago Main PID: 1375 (ros2) Tasks: 49 (limit: 9058) Memory: 125.2M (peak: 126.2M) CPU: 19.884s CGroup: /system.slice/ros2_drone.service ├─1375 /usr/bin/python3 /opt/ros/jazzy/bin/ros2 launch px4_ros_com> ├─1450 /home/procom/ws_offboard_control/install/dvx_camera_driver/> ├─1451 /home/procom/ws_offboard_control/install/px4_ros_com/lib/px> └─1452 /home/procom/ws_offboard_control/install/px4_ros_com/lib/px> -
MicroXRCE: Pour voir les logs :
1journalctl -u microxrce.service -fPour voir l’état du service :
1systemctl status microxrce.serviceExemple d’output :
1 2 3 4 5 6 7 8 9 10 11 12
Loaded: loaded (/etc/systemd/system/microxrce.service; enabled; preset: enabled) Active: active (running) since Wed 2026-03-04 13:43:01 CET; 4min 40s ago Main PID: 1372 (MicroXRCEAgent) Tasks: 7 (limit: 9058) Memory: 12.6M (peak: 12.9M) CPU: 91ms CGroup: /system.slice/microxrce.service └─1372 /usr/local/bin/MicroXRCEAgent serial --dev /dev/ttyAMA0 -b 921600 Mar 04 13:43:01 procom-desktop systemd[1]: Started microxrce.service - Micro XRCE Agent. Mar 04 13:43:01 procom-desktop MicroXRCEAgent[1372]: [1772628181.744914] info | TermiosAgentLinux.cpp | init | running... | fd: 3 Mar 04 13:43:01 procom-desktop MicroXRCEAgent[1372]: [1772628181.745395] info | Root.cpp | set_verbose_level | logger setup | verbose_level: 4
