ROS2 Foxy ARM平台原生交叉编译新手入门方法咨询
ROS2 Foxy Ubuntu主机ARM原生交叉编译入门(新手版)
一、前置环境准备
- 主机系统使用Ubuntu 20.04(与ROS2 Foxy官方适配版本一致,减少兼容性问题)
- 安装ARM交叉编译工具链(以arm64为例,arm32架构替换为
arm-linux-gnueabihf前缀):sudo apt update && sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - 准备目标ARM设备的根文件系统(rootfs):
- 已有现成ARM设备时,直接从设备同步(跳过虚拟目录):
rsync -avz user@你的ARM设备IP:/ /本地路径/arm-rootfs --exclude=/proc --exclude=/sys --exclude=/dev - 无现成设备时,用debootstrap生成arm64版Ubuntu 20.04 rootfs:
sudo debootstrap --arch=arm64 focal /本地路径/arm-rootfs http://ports.ubuntu.com/
- 已有现成ARM设备时,直接从设备同步(跳过虚拟目录):
- 设置环境变量指向rootfs:
export SYSROOT=/本地路径/arm-rootfs
二、配置交叉编译工作空间
- 创建并进入工作空间:
mkdir -p ros2_foxy_arm_ws/src && cd ros2_foxy_arm_ws - 将你的C++包放入
src目录;若需编译ROS2基础依赖(如包依赖的核心库),同步Foxy源码:git clone https://github.com/ros2/ros2.git -b foxy src/ros2 - 安装主机端编译依赖:
rosdep install --from-paths src --ignore-src --rosdistro foxy -y - 在工作空间根目录创建交叉编译工具链配置文件
cross_compile.cmake:set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) set(CMAKE_SYSROOT $ENV{SYSROOT}) # 强制cmake仅在rootfs内查找依赖,不使用主机本地库 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - 创建
colcon.meta配置文件,指定交叉编译规则:{ "configurations": { "cross_compile": { "cmake_args": [ "-DCMAKE_TOOLCHAIN_FILE=/你的工作空间路径/ros2_foxy_arm_ws/cross_compile.cmake" ] } } }
三、执行交叉编译
- 加载ROS2 Foxy环境(主机已安装Foxy则直接执行,未安装则加载源码内的setup文件):
source /opt/ros/foxy/setup.bash - 启动编译,
--merge-install将所有输出合并至单目录,便于后续复制:colcon build --merge-install --cmake-args -DCMAKE_BUILD_TYPE=Release --configuration cross_compile
四、部署到ARM设备
- 将编译完成的install目录同步至ARM设备:
rsync -avz /你的工作空间路径/ros2_foxy_arm_ws/install user@你的ARM设备IP:/home/用户名/ros2_foxy_install - 在ARM设备上加载环境并测试节点:
source /home/用户名/ros2_foxy_install/setup.bash ros2 run 你的包名 你的节点名
五、新手常见问题解决
- 编译时提示依赖缺失:进入rootfs环境安装对应依赖,执行
chroot /本地路径/arm-rootfs切换后,运行apt install ros-foxy-依赖包名 - 链接阶段报错:确保主机交叉编译工具链版本与ARM设备本地gcc版本尽量接近,避免ABI不兼容
- 运行时权限不足:同步文件时添加
--chown=用户名:用户组参数,或在ARM设备上执行sudo chmod -R 755 /home/用户名/ros2_foxy_install
内容的提问来源于stack exchange,提问作者amw
相关产品推荐
相关产品推荐

