Compile Ros2 Humble for Raspberry Pi Zero W
问题 raspberry pi zero w 的系统目前树莓派官方推出的镜像是armv6hf debian 11,而ROS2官方只支持ubuntu debian aarch64,不支持arm32,所以要在raspberry pi zero w上使用ROS2必须从源码构建。那么问题就在于如果直接在zero w上编译,显然因为硬件的原因(cpu: 1 core, memory: 512M),编译将会极其缓慢,我也尝试使用armhf交叉编译工具链在aarch64系统上编译ROS源码,但是会出现系统库缺失问题。同时我还考虑到后续的开发环境和zero w原始系统环境的一致性问题,我决定采用zero w的原生debian 11 armhf系统做为rootfs,制作docker image,然后运行在aarch64系统上(比如树莓派4,jetson agx),这样编译出来的ros2直接可以运行在zero w上,并且运行环境和编译环境都是保持一致的,这样对后续的调优以及debug处理都会非常方便。 兼容性 raspberry pi zero w 使用的是cpu arm1176jzf-s,armv6版本,raspberry pi 4 使用的是 ARM Cortex-A72 ARMv8-A版本,我们可以从Cortex-A72文档中看出AArch32 for full backward compatibility with Armv7,也就是armv8 aarch32指令集兼容armv7 aarch32,同时armv7指令集兼容armv6,那么也就意味着armv6的二进制文件是可以直接在raspberry pi 4 aarch64上运行,反之aarch64 binary当然无法在armv6系统上运行,这样思路一下子清晰了,我们可以将armhf的根文件系统制作成docker image,运行在aarch64系统上,然后编译ros2,最后将编译产物拷贝到zero w上直接运行。 解决问题 command line run on raspberry pi 4 ubuntu 20.04 aarch64 os donwload rpi zero w image (raspios-bullseye-armhf-lite) ...