Skip to content

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

serial port name 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

RPi config install This commands return on RPi 5:

1
2
error: externally-managed-environment
This environment is externally managed...

Afin de contourner cela, il y a deux options :

  • Créer un environnement virtuel
  • forcer l’installation :

    1
    sudo 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
sudo mavproxy.py –master=/dev/ttyAMA0 --baudrate 57600

Voici ce que vous devriez voir :

mavlink test

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 :

  1. Aller dans le fichier de config pyvenv.cfg dans l'environnement virtuel /venvs
  2. Passer le champs include-system-site-packages à true et sauvegardez les changements
  3. Réactivez l'environnement virtuel.
1
pip install --user -U empty==3.3.4 pyros-genmsg setuptools

Installation de colcon et construction des packages

1
sudo apt install colcon

Créez et placez vous dans votre futur espace de travail ros2.

1
2
mkdir -p ~/ros2_ws/src/
cd ~/ros2_ws/src/

Clonez les deux packages ros2 suivants.

1
2
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git

Puis lancez le build de ces deux packages.

1
2
3
cd ..
source /opt/ros/jazzy/setup.bash
colcon build

Test de la liaison avec le PixHawk

starting agent Remplacez le port serial0 par ttyAMA0.

1
sudo MicroXRCEAgent serial --dev /dev/ttyAMA0 -b 921600

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
source /opt/ros/jazzy/setup.bash
ros2 topic list

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
sudo MicroXRCEAgent serial --dev /dev/ttyAMA0 -b 921600

Reprenez le guide à la partie Running the example. Suivez le guide jusqu’à la partie Optionnelle.

Pixhawk sensor data 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 :

  1. RPi <-> PixHawk (déjà fait)
  2. PixHawk <-> Alimentation (réf de la batterie)
  3. PixHawk <-> ESC (via boitiers PWM)
  4. ESC <-> moteurs
  5. GPS <-> PixHawk
  6. Module de Télémétrie <-> PixHawk
  7. 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
cp clone-of-repo-drone-contest-from-your-laptop/part-hw/src/ros2_ws/src/ ~/your-ros2-ws/src/

Puis compilez ce package.

1
2
3
source /opt/ros/jazzy/setup.bash
cd ~/your-ros2-ws/
colcon build --packages-select procom_offboard

Lancement du test

Terminal 1: Lancer la communication uXRCE-DDS

1
sudo MicroXRCEAgent serial --dev /dev/ttyAMA0 -b 921600

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
ros2 launch procom_offboard offboard_control_launch

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
sudo nano /etc/systemd/system/microxrce.service

→ 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
[Unit]
Description=Micro XRCE Agent
After=network.target

[Service]
Type=simple
User=<your_username>
ExecStart=/usr/local/bin/MicroXRCEAgent serial --dev /dev/ttyAMA0 -b 921600
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target

Étape 2 — Service ROS2

1
sudo nano /etc/systemd/system/ros2_drone.service

→ 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
[Unit]
Description=ROS2 Drone Nodes
After=microxrce.service
Requires=microxrce.service

[Service]
Type=simple
User=<your_username>
Group=<your_username>
WorkingDirectory=/home/<your_full_path_to_your_ROS2_workspace>
ExecStart=/bin/bash -lc "source /opt/ros/jazzy/setup.bash && source <your_full_path_to_your_ROS2_workspace>/install/local_setup.bash && ros2 launch <ton_package> <launch_file>"
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target

Étape 3 — Activer les services

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable microxrce.service
sudo systemctl enable ros2_drone.service

Puis

1
sudo reboot

[!Note] si changement du code des services :

1
2
sudo systemctl daemon-reload
sudo systemctl restart ros2_drone.service

Etape 4 – Tester les services

  1. ROS2 Nodes :

    1
    sudo usermod -aG dialout <your_user>
    

    Pour voir les logs :

    1
    journalctl -u ros2_drone.service -f
    

    Pour voir l’état du service :

    1
    systemctl status ros2_drone.service
    

    Exemple 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>
    
  2. MicroXRCE: Pour voir les logs :

    1
    journalctl -u microxrce.service -f
    

    Pour voir l’état du service :

    1
    systemctl status microxrce.service
    

    Exemple 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
    

Rérérences