1、项目组织结构
在这里插入图片描述
在这里插入图片描述
usr是从arm架构的域控上拷贝下来的,在交叉编译时,编译工具用的是amd的,动态库用的是arm的,所以,cuda的编译工具按下面的命令设置

set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda)

头文件和动态库用下面的命令设置

set(CUDA_INCLUDE_DIRS /crossbuild/rootfs/usr/local/cuda-11.4/include)
set(CUDA_CUDART_LIBRARY /crossbuild/rootfs/usr/local/cuda-11.4/lib64/libcudart.so)

lib是usr/lib的软连接。
2、加载docker镜像
docker load -i ubuntu-crossbuild-v0.1.2.tar
3、运行docker:
sh start_ros_docker.sh
在这里插入图片描述
其中ubuntu-crossbuild:v0.1.2为运行的docker镜像,后面完成感知程序编译后会导出一个感知的镜像perception:v1.0,后续直接使用感知的镜像即可,如下所示
在这里插入图片描述

-v ./aarch64-humble-rootfs-crossbuild-v1.0:/crossbuild/rootfs表示将aarch64-humble-rootfs-crossbuild-v1.0文件夹下的文件映射到容器的/crossbuild/rootfs路径,映射的文件修改宿主机或容器中的内容都会同步修改另一边的内容。
4、编译
4.1 目录已经映射到容器的/crossbuild/rootfs/test中,在工程目录下执行ros2_build.sh编译
在这里插入图片描述
4.2 编译问题与解法
4.2.1
问题:
在这里插入图片描述
解法:
在这里插入图片描述
4.2.2
问题:
在这里插入图片描述
解法:
在这里插入图片描述
vision_msgs和grid_map_msgs也会遇到上面的问题,解法一样
4.2.3
问题:
在这里插入图片描述
解法:
在这里插入图片描述
4.2.4
问题:
在这里插入图片描述
解法:
在这里插入图片描述
出现类似问题的动态库还有libjpeg.so、libpng.so、libtiff.so、libGLEW.so、libSM.so、libICE.so、libX11.so、libXext.so、libXt.so,解法同上
4.2.5
问题:
在这里插入图片描述
解法:
在这里插入图片描述
出现类似问题的动态库还有libz.so、libexpat.so,解法同上
4.2.6
问题:
在这里插入图片描述
解法:
在这里插入图片描述
在这里插入图片描述
4.2.7 编译cuda节点
安装交叉编译的cuda

dpkg -i ./cuda-repo-cross-aarch64-ubuntu2004-11-4-local_11.4.28-1_all.deb
apt-key add /var/cuda-repo-cross-aarch64-ubuntu2004-11-4-local/22F34785.pub 
cp /var/cuda-repo-cross-aarch64-ubuntu2004-11-4-local/cuda-22F34785-keyring.gpg /usr/share/keyrings/
apt update
apt -y install cuda-cross-aarch64-11-4 -y
dpkg -i ./cuda-repo-ubuntu2004-11-4-local_11.4.28-535.104.12-1_amd64.deb 
cp /var/cuda-repo-ubuntu2004-11-4-local/cuda-6A006C48-keyring.gpg /usr/share/keyrings/
apt-key add /var/cuda-repo-ubuntu2004-11-4-local/6A006C48.pub 
apt update
apt -y install cuda-toolkit-11-4 -y --fix-missing

安装交叉编译的cudnn(可能不需要)

apt install ./cudnn-local-repo-cross-aarch64-ubuntu2004-8.9.2.19_1.0-1_all.deb 
apt-key add /var/cudnn-local-repo-cross-aarch64-ubuntu2004-8.9.2.19/E7EA4BEF.pub 
apt update
cp /var/cudnn-local-repo-cross-aarch64-ubuntu2004-8.9.2.19/cudnn-local-E7EA4BEF-keyring.gpg /usr/share/keyrings/
apt install libcudnn8-cross-aarch64 -y

问题
在这里插入图片描述
解法:
使用以下命令查看已添加的cuda环境变量

env | grep CU

添加环境变量,如下所示:
在这里插入图片描述
在cmakelist或/crossbuild/toolchain_arm64.cmake添加下面几行
在这里插入图片描述
5、将编译成功的容器导出为镜像
在这里插入图片描述
下次直接加载镜像perception:v1.0
6、备份镜像

docker save -o perception:v1.0.tar perception:v1.0

更多推荐