Actualités du site

Tutoriel pour la compilation croisée d’un noeud ROS2 pour Raspberry Pi 3

Ce tutoriel explique comment compiler et exécuter un noeud ROS2 sur votre PC pour la cible Raspberry Pi 3 avec Ubuntu Server 22.04. La machine hôte tourne avec le système d’exploitation Ubuntu 22.04.

Prérequis

  • Une machine hôte avec Ubuntu 22.04 installé
  • Une Raspberry Pi 3 avec Ubuntu Server 22.04 installé

1. Installation de la chaîne de compilation croisée:

Ouvrez une fenêtre de terminal sur un PC (machine hôte) et exécutez les commandes suivantes pour installer la chaîne de compilation croisée pour les micro-contrôleurs ARM :

sudo apt install g++-aarch64-linux-gnu
sudo apt install gcc-aarch64-linux-gnu

2. Copie des bibliothèques Raspberry Pi:

Exécutez la commande suivante pour copier les fichiers de bibliothèque nécessaires de votre Raspberry Pi vers votre PC :

rsync -vR –progress -rl –delete-after –safe-links ubuntu@192.168.1.PI:/{lib,usr,etc/ld.so.conf.d,opt} $HOME/ros2rootfs

Notes:

  • Remplacez 192.168.1.PI par l’adresse IP réelle de votre Raspberry Pi.
  • Assurez-vous de mettre à jour le répertoire $HOME/ros2rootfs chaque fois que vous installez ou désinstallez une application sur votre Raspberry Pi avec la commande rsync.

3. Création du workspace et du package ROS2:

  • Créez un nouveau workspace ROS2 nommé ~/cc_ros.
  • Dans le workspace, créez un package pour votre noeud ROS2 en suivant les instructions de la documentation ROS2.

4. Configuration du fichier PI.cmake:

Créez un fichier nommé PI.cmake dans le répertoire ~/cc_ros. Ce fichier contiendra les paramètres de compilation croisée. Ajoutez le contenu suivant :

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(tools /usr) # warning change toolchain path here.
set(rootfs_dir $ENV{HOME}/ros2rootfs)
set(CMAKE_FIND_ROOT_PATH ${rootfs_dir})
set(CMAKE_SYSROOT ${rootfs_dir})
set(CMAKE_LIBRARY_ARCHITECTURE aarch64-linux-gnu)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIC -Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
-L${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}")

set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} -L${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} -L${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}")

## Compiler Binary
SET(BIN_PREFIX ${tools}/bin/aarch64-linux-gnu)
SET (CMAKE_C_COMPILER ${BIN_PREFIX}-gcc)
SET (CMAKE_CXX_COMPILER ${BIN_PREFIX}-g++ )
SET (CMAKE_LINKER ${BIN_PREFIX}-ld CACHE STRING "Set the cross-compiler tool LD" FORCE)
SET (CMAKE_AR ${BIN_PREFIX}-ar CACHE STRING "Set the cross-compiler tool AR" FORCE)
SET (CMAKE_NM {BIN_PREFIX}-nm CACHE STRING "Set the cross-compiler tool NM" FORCE)
SET (CMAKE_OBJCOPY ${BIN_PREFIX}-objcopy CACHE STRING "Set the cross-compiler tool OBJCOPY" FORCE)
SET (CMAKE_OBJDUMP ${BIN_PREFIX}-objdump CACHE STRING "Set the cross-compiler tool OBJDUMP" FORCE)
SET (CMAKE_RANLIB ${BIN_PREFIX}-ranlib CACHE STRING "Set the cross-compiler tool RANLIB" FORCE)
SET (CMAKE_STRIP {BIN_PREFIX}-strip CACHE STRING "Set the cross-compiler tool RANLIB" FORCE)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)