docker镜像中安装tros用于编译

需求背景

当用户基于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

Index of /ubuntu-ports/pool/main/focal/ ip地址更新如上

Gitlab换Github后

//获取镜像

git clone Sign in · GitLab -b develop

新的命令是什么

您好,在编译dnn_node时会出现以下报错,似乎是缺少dl库,但搜索路径后发现确实存在dl库,想请问下您如何解决?

我的主要流程与您一致,在一些步骤略有区别,区别如下:

git clone Sign in · GitLab -b tros_1.1.6b

git clone Sign in · GitLab -b tros_1.1.6

git clone Sign in · GitLab -b tros_1.1.6

git的源全部采用1.1.6版本

cmake修改如下:

非常感谢!

您好,上面的操作对ubuntu的版本有要求吗?

您好,tros目前支持的系统环境是ubuntu20.04,更新的版本暂时没有测试

您在tros_ws路径下编译看看?

您好,还是一样的错误??

文件结构如下所示:

遇到了同样的问题,请问解决了吗

考虑可能是wsl2不兼容,后续我换到vm虚拟机上编译了,重新部署了下环境就可以了