交叉编译foxy版ros2部署到ARM上运行
环境配置:
Ubuntu:20.04.6 LTS
ubuntu是从官网新下载的镜像,使用鱼香ROS一键在20.04上安装foxy版ros2 ,rosdep
wget http://fishros.com/install -O fishros && . fishros
部署目标设备:rk3308 linux内核版本4.4.143-65
ubuntu安装相关依赖
sudo apt update
sudo apt install -y build-essential cmake git python3-colcon-common-extensions python3-rosdep
pip install python3-vcstool
sudo apt-get install liblog4cxx-dev
初始化rosdep
sudo rosdep init
rosdep update
创建工作空间并下载源码
mkdir -p ~/ros2_foxy_arm_ws/src
cd ~/ros2_foxy_arm_ws
wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos #src为下载ros2.repos的目录
创建.cmake文件
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# 需要设置为你的交叉工具链路径
set(CMAKE_C_COMPILER "/home/yy/work/armRos/toolchain/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc")、
# 需要设置为你的交叉工具链路径
set(CMAKE_CXX_COMPILER "/home/yy/work/armRos/toolchain/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++")
# 需要设置为目标平台的根文件目录,这里使用的是nfs挂载的,ros编译需要依赖这些
set(CMAKE_SYSROOT /home/yy/work/armRos/netMnt)
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)
在目标平台设置nfs挂载,不使用挂载方式的可以直接使用自己制作的文件系统
在arm上执行:
sudo vim /etc/exports
输入以下内容,192.168.110.35为Ubuntu22.04地址
/ 192.168.110.35(rw,sync,no_subtree_check)
重启nfs
sudo systemctl restart nfs-server.service
ubuntu22.04上执行
sudo mount -t nfs 192.168.110.172:/ /home/yy/work/armRos/netMnt
编译命令:
colcon build --merge-install --cmake-args -DCMAKE_TOOLCHAIN_FILE=$ROS2_CROSS_COMPILE_TOOLCHAIN -DTHIRDPARTY=ON -DBUILD_TESTING=OFF
编译过程中难免出现错误,主要错误是ubuntu22.04上编译依赖确实,缺少库,缺库检查是不是软连接链接失败,重新建立软连接,缺什么库需要找什么库回来,编译失败后可以先执行rm -rf build install log再重新编译