需求背景
当用户基于tros开发应用时,如果在docker中进行交叉编译,需要源码编译tros,对开发机配置要求高,且编译时间长。本教程提供一种直接在docker中安装地平线发布的tros安装包,用户只需要交叉编译自己开发的程序,而不需要编译tros的方法,从而简化和加速编译过程。具体步骤如下:(所有操作都在开发机/PC中运行)
1、获取镜像并加载
//获取镜像
git clone https://c-gitlab.horizon.ai/HHP/cross_compile_docker.git -b develop
//加载镜像
sudo docker load --input cross_compile_docker/pc_tros_v1.0.5.tar.gz
//查看镜像ID(镜像TAG为v1.0.5)
sudo docker images
2、启动docker挂载目录,拉取相关代码并安装tros
//启动docker挂载目录
//命令参数解释:/home/wunuo/wp为本地目录,/wp为docker目录,f8e2dadc94b8为imageID
sudo docker run -it --entrypoint="/bin/bash" -v /home/wunuo/wp:/wp f8e2dadc94b8
代码拉取:
//创建工作空间
mkdir -p /wp/cc_ws/tros_ws/src
//拉取sysroot_docker(具体版本请根据tros版本的repos内容拉取,robot_dev_config同理)
//建议文件路径与本教程一致,若存放至其他路径,请修改robot_dev_config/aarch64_toolchainfile.cmake文件中的宏:CMAKE_SYSROOT
cd /wp/cc_ws
git clone https://c-gitlab.horizon.ai/HHP/sysroot_docker.git -b develop
//拉取robot_dev_config
cd /wp/cc_ws/tros_ws
git clone https://c-gitlab.horizon.ai/HHP/robot_dev_config.git -b develop
wp目录结构如下:
//可安装tree用于查询目录结构
apt-get install tree
//目录结构查询,-L限制目录显示层级,4为显示的层级数,/wp为查询目录
tree -L 4 /wp
├──wp
| └──cc_ws
│ ├── sysroot_docker
│ └── tros_ws
│ ├── robot_dev_config
│ └── src
| └──hobot_dnn//根据所需,拉取欲编译的代码
获取tros包并安装,安装过程会出现warning但不影响使用,安装成功后在/opt下会存在tros文件夹(安装过程可能会出现因缺少某些依赖导致安装失败的情况,比如hhp-verify、hobot-models-basic,这两个包仅在板端部署tros时需要,安装tros只用于编译时不需要。若出现安装失败的情况则按照提示进行依赖安装,安装方式如下。所有相关deb包链接)
//使用wget获取tros的deb包 (具体版本以实际为准,此处以tros_1.1.2为例)
wget http://42.62.85.28/ubuntu-ports/pool/main/focal/tros_1.1.2_arm64.deb
//忽略依赖强制安装tros
dpkg --install --force-all tros_1.1.2_arm64.deb
//安装hhp-verify和hobot-models-basic(若tros已安装成功,无需进行这两个包的安装)
wget http://42.62.85.28/ubuntu-ports/pool/main/focal/hhp-verify-1.0.0.deb
dpkg --install --force-all hhp-verify-1.0.0.deb
wget http://42.62.85.28/ubuntu-ports/pool/main/focal/hobot_models_basic_1.0.0_arm64.deb
dpkg --install --force-all hobot_models_basic_1.0.0_arm64.deb
使用install --force-all强制安装后会破坏安装环境,导致无法安装其他功能包,可运行以下命令解决
sed -i '/Depends: symlinks, locales, hhp-verify, hobot-models-basic/d' /var/lib/dpkg/status
sed -i '/Pre-Depends: hhp-verify/d' /var/lib/dpkg/status
3、修改编译选项
在robot_dev_config/aarch64_toolchainfile.cmake的CMAKE_FIND_ROOT_PATH设置中增加/opt/tros
set(CMAKE_FIND_ROOT_PATH /opt/tros ${CMAKE_CURRENT_LIST_DIR}/../install ${CMAKE_CURRENT_LIST_DIR}/../build ${CMAKE_CURRENT_LIST_DIR}/../../sysroot_docker)

4、单独编译某个包(此处以dnn_node为例)
source /opt/tros/setup.bash
export TARGET_ARCH=aarch64
export TARGET_TRIPLE=aarch64-linux-gnu
export CROSS_COMPILE=/usr/bin/$TARGET_TRIPLE-
colcon build --packages-select dnn_node --merge-install --cmake-force-configure --cmake-args --no-warn-unused-cli -DCMAKE_TOOLCHAIN_FILE=`pwd`/robot_dev_config/aarch64_toolchainfile.cmake