我使用的RDK X5开发板,需要使用ros2系统进行开发,现在X86的wsl系统中已经从官方安装了ros2系统,开发板已经通过apt方式安装了TogetherROS.bot系统,但是我现在需要在X86中进行交叉编译出可以在RDK X5arm64架构的平台上直接运行的可执行文件,编译过程中缺少板端库,我看社区相关帖子显示可以通过源码安装X86的togetherros的docker镜像,在docker中使用交叉表编译工具进行编译,请问这个docker是直接按照源码安装就行吗,这样安装的只是docker还是整个TogetherROS.bot系统,影不影响我的ros2的使用,有没有具体的使用文档说明呢
针对你的问题,我结合社区现有文档和帖子给你一个清晰的解答:
结论
是的,直接按照官方文档安装 Docker 镜像即可。这个 Docker 镜像是专门用于交叉编译的开发环境,不是完整的 TogetherROS.bot 系统,不会影响你现有的 ROS2 使用。
关键点说明
1. Docker 镜像的作用
- 仅包含交叉编译工具链:镜像内包含了 X86 主机编译 ARM64 目标程序所需的编译器、sysroot(板端库)、CMake 工具链文件等
- 不包含完整 TROS 运行时:镜像不是用来运行 TROS 的,只是用来编译能在 RDK X5 上运行的程序
- 隔离环境:在 Docker 内编译,与你 WSL 中已安装的 ROS2 完全隔离,互不影响
2. 核心原理
交叉编译的关键在于解决依赖库架构不匹配问题:
- Sysroot 环境:Docker 内的
sysroot_docker目录包含了 RDK X5(ARM64)的系统库和依赖库 - 工具链配置:
aarch64_toolchainfile.cmake文件配置了CMAKE_SYSROOT,强制编译器查找 ARM64 库而非 X86 库
3. 操作步骤(简化版)
# === 在 X86 主机上执行 ===
# 1. 下载并加载 Docker 镜像(Humble 版本对应 X5)
wget http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 2. 查看镜像 ID
sudo docker images | grep pc_tros
# 3. 创建工作目录
mkdir -p ~/cc_ws/tros_ws/src
# 4. 启动 Docker 并挂载目录(替换 IMAGE_ID 为上一步查到的 ID)
sudo docker run -it --rm \
--entrypoint="/bin/bash" \
-v ~/cc_ws:/cc_ws \
<IMAGE_ID>
# === 在 Docker 容器内执行 ===
# 5. 获取配置文件
cd /cc_ws/tros_ws
git clone https://github.com/D-Robotics/robot_dev_config.git -b develop
cd robot_dev_config
# 6. 切换到稳定版本(重要!避免编译报错)
git tag --list # 查看可用版本,如 tros_2.3.2
git reset --hard tros_2.3.2
# 7. 拉取源码
cd ..
vcs-import src < ./robot_dev_config/ros2_release.repos
# 8. 交叉编译 X5 版本
bash ./robot_dev_config/build.sh -p X5
4. 你的 ROS2 环境不受影响
- Docker 内的 ROS2 仅用于编译时依赖查找
- 你 WSL 中的 ROS2 保持不变,可继续用于其他开发
- 编译生成的可执行文件(在
install目录)拷贝到 RDK X5 即可运行
注意事项
-
版本匹配:
- RDK X5 使用 Ubuntu 22.04 + ROS2 Humble
- 必须下载
pc_tros_ubuntu22.04_v1.0.0.tar.gz(不是 Foxy 版本)
-
代码版本:
- 必须使用
git reset --hard切换到稳定 tag(如tros_2.3.2) - 直接用
develop分支会编译报错(社区已有案例)
- 必须使用
-
网络问题:
vcs-import拉取 GitHub 仓库可能需要配置代理- 可参考社区帖子配置 Git 代理
-
编译自己的功能包:
- 在
tros_ws/src下创建你的 package - 使用同样的
build.sh -p X5编译即可
- 在
相关资源
- 官方文档:5.1.3 源码安装 | RDK DOC
- 社区讨论:[RDK X5][TROS]是否存在一个 X86 平台下面向 RDK X5 的包含 TROS 和 ROS2 的开发/交叉编译环境?
- 版本发布记录:查看
robot_dev_config仓库的 tags 选择稳定版本
建议
如果你是第一次使用,建议:
- 先严格按照文档走通一次完整流程
- 编译成功后,再尝试添加自己的功能包
- 遇到报错优先检查:Docker 镜像版本、代码 tag 版本、网络代理
有问题可以在社区继续提问,建议把你的编译报错日志贴出来方便定位。
所以该怎么安装X86的ros的docker进行交叉编译呢
X86 交叉编译 Docker 安装步骤(RDK X5 专用)
直接按下面步骤操作即可,不会影响你现有的 ROS2 环境:
第一步:下载并加载 Docker 镜像
# 1. 创建工作目录
mkdir -p ~/rdk_cross_compile
cd ~/rdk_cross_compile
# 2. 下载 X5 专用的交叉编译镜像(Humble 版本)
wget http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 3. 加载镜像到 Docker
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 4. 确认镜像已加载
sudo docker images | grep pc_tros
# 记下 IMAGE ID(如 4cbdb9d61e19)
第二步:启动 Docker 容器
# 启动容器并挂载工作目录
sudo docker run -it --rm \
--entrypoint="/bin/bash" \
-v ~/rdk_cross_compile:/work \
<IMAGE_ID> # 替换为上一步查到的 IMAGE ID
第三步:在 Docker 内获取源码
# 1. 进入工作目录
cd /work
mkdir -p cc_ws/tros_ws/src
cd cc_ws/tros_ws
# 2. 克隆配置文件仓库
git clone https://github.com/D-Robotics/robot_dev_config.git -b develop
cd robot_dev_config
# 3. 切换到稳定版本(关键!避免编译报错)
git tag --list # 查看可用版本
git reset --hard tros_2.3.2 # 或最新稳定 tag
# 4. 拉取 TROS 源码
cd ..
vcs-import src < ./robot_dev_config/ros2_release.repos
网络问题:如果
vcs-import失败(显示 EEEEE),需要配置 Git 代理:git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890
第四步:交叉编译
# 编译 X5 版本
bash ./robot_dev_config/build.sh -p X5
# 编译完成后,可执行文件在 /work/cc_ws/tros_ws/install 目录
第五步:部署到板端
# 在宿主机上执行,将编译结果拷贝到 RDK X5
scp -r ~/rdk_cross_compile/cc_ws/tros_ws/install root@<板端IP>:/opt/tros
常见问题
| 问题 | 解决方案 |
|---|---|
client version too old |
升级 Docker:sudo apt update && sudo apt install docker.io |
vcs-import 失败 |
配置 Git 代理或换网络环境 |
编译报错 ament_cmake not found |
检查是否 source 了 ROS2 环境,或代码版本不对 |
编译报错 file in wrong format |
确认使用了 -p X5 参数,且代码 tag 版本匹配 |
验证是否成功
编译成功后,install 目录下的可执行文件应该是 ARM64 架构:
file install/<your_package>/lib/<your_package>/*
# 应显示:ELF 64-bit LSB executable, ARM aarch64
官方文档参考
按这个流程走,有问题把具体报错信息贴出来,方便定位。
有没有国内源可以下载这个docker呢
目前官方没有提供专门的国内 CDN 镜像源,archive.d-robotics.cc 是官方统一的资源服务器。不过针对国内下载慢或失败的问题,有以下几种解决方案:
解决方案
方案一:使用代理/加速器(推荐)
如果你能配置网络代理,这是最直接的方式:
# 配置 wget 使用代理
wget --proxy=on \
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 或者配置环境变量
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
wget http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
方案二:使用下载工具断点续传
使用 aria2c 或 axel 等多线程下载工具,提高下载成功率:
# 安装 aria2
sudo apt update && sudo apt install aria2
# 使用 aria2 下载(支持断点续传)
aria2c -x 16 -s 16 -k 1M \
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 如果中断,再次执行相同命令会自动续传
方案三:手动下载后传输
如果 WSL 内下载困难,可以:
-
在 Windows 主机下载:
- 使用浏览器或 IDM 等下载工具下载
- URL:
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
-
复制到 WSL:
# Windows 文件在 WSL 中的路径 cp /mnt/c/Users/你的用户名/Downloads/pc_tros_ubuntu22.04_v1.0.0.tar.gz ~/rdk_cross_compile/ -
在 WSL 中加载镜像:
cd ~/rdk_cross_compile sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
方案四:检查官方是否有更新镜像
镜像文件较大(约 2-3GB),下载前确认版本:
# 文件大小约 2.5GB 左右
ls -lh pc_tros_ubuntu22.04_v1.0.0.tar.gz
下载验证
下载完成后验证文件完整性:
# 检查文件大小(应该约 2.5GB)
ls -lh pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 加载镜像
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 确认加载成功
sudo docker images | grep pc_tros
注意事项
- 文件大小:镜像文件约 2.5GB,确保磁盘空间充足
- 下载时间:根据网络情况,可能需要较长时间
- 断点续传:强烈建议使用
aria2c或支持断点续传的工具 - WSL2 网络:WSL2 的网络有时不稳定,建议在 Windows 主机下载后复制进去
如果仍然下载失败
可以在社区发帖求助,看是否有其他开发者分享了镜像文件(注意版权):
- 发帖时说明:RDK X5 版本、Ubuntu 版本、网络环境
- 社区地址:https://forum.d-robotics.cc
建议优先尝试方案二(aria2c)或方案三(Windows 下载后复制),这两种方式在国内网络环境下成功率最高。
有没有国内源可以下载这个docker呢
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
我使用这个链接先下载到windows中,然后传到wsl中,检查大小只有679MB,正常吗,目录下还出现一个pc_tros_ubuntu22.04_v1.0.0.tar.gz:Zone.ldentifier的文件是什么
问题分析
1. 文件大小异常 
679MB 不正常! 根据社区开发者反馈,该镜像文件应该约 2.5GB 左右。你的文件明显下载不完整。
2. Zone.Identifier 文件
这是 Windows 的安全标记文件,表示该文件来自互联网(非本地创建)。可以安全删除,不影响使用:
# 删除该文件
rm pc_tros_ubuntu22.04_v1.0.0.tar.gz:Zone.Identifier
# 或在 Windows 中右键文件 → 属性 → 勾选"解除锁定"
解决方案
方案一:使用 aria2c 重新下载(推荐)
在 WSL 中使用 aria2c 支持断点续传,避免下载中断:
# 1. 安装 aria2
sudo apt update && sudo apt install aria2
# 2. 删除不完整的文件
rm pc_tros_ubuntu22.04_v1.0.0.tar.gz*
# 3. 使用 aria2c 下载(16 线程,支持断点续传)
aria2c -x 16 -s 16 -k 1M \
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 4. 如果中断,再次执行相同命令会自动续传
方案二:在 Windows 使用下载工具
使用 IDM、迅雷 或 浏览器下载管理器:
-
复制下载链接:
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz -
粘贴到下载工具中下载
-
下载完成后检查文件大小(应约 2.5GB)
-
复制到 WSL:
# 假设文件在 Windows 下载目录 cp /mnt/c/Users/你的用户名/Downloads/pc_tros_ubuntu22.04_v1.0.0.tar.gz ~/rdk_cross_compile/
方案三:检查是否有备用链接
搜索社区是否有开发者分享过备用下载源:
问题分析
1. 文件大小不正常 
679MB 明显偏小,完整的 pc_tros_ubuntu22.04_v1.0.0.tar.gz 镜像文件应该约 2.5GB 左右。
这说明:
- 下载未完成(网络中断)
- 或者浏览器/下载工具解析错误(可能下载成了网页而非文件)
- 或者服务器返回了错误响应
2. .Zone.Identifier 文件是什么?
这是 Windows 的安全标记文件,表示该文件是从互联网下载的:
pc_tros_ubuntu22.04_v1.0.0.tar.gz:Zone.Identifier
- 作用:Windows 标记文件来源,运行时会提示"此文件来自其他计算机"
- 处理:可以安全删除,不影响使用
- 删除方法:
# 在 WSL 中 rm pc_tros_ubuntu22.04_v1.0.0.tar.gz:Zone.Identifier # 或在 Windows 中右键文件 → 属性 → 勾选"解除锁定"
解决方案
方案一:重新下载(推荐用 aria2)
# 在 WSL 中安装 aria2
sudo apt update && sudo apt install aria2
# 使用 aria2 下载(支持断点续传,16 线程)
aria2c -x 16 -s 16 -k 1M \
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 如果中断,再次执行相同命令会自动续传
方案二:在 Windows 中用浏览器重新下载
-
直接点击下载链接(不要用右键另存为):
http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz -
使用下载工具(如 IDM、FDM、迅雷等):
- 这些工具支持断点续传
- 下载完成后检查文件大小是否约 2.5GB
-
复制到 WSL:
# Windows 文件复制到 WSL cp /mnt/c/Users/你的用户名/Downloads/pc_tros_ubuntu22.04_v1.0.0.tar.gz ~/rdk_cross_compile/ # 删除 Zone.Identifier 文件 rm ~/rdk_cross_compile/pc_tros_ubuntu22.04_v1.0.0.tar.gz:Zone.Identifier # 验证大小 ls -lh ~/rdk_cross_compile/pc_tros_ubuntu22.04_v1.0.0.tar.gz # 应该显示约 2.5G
方案三:验证下载是否成功
# 1. 检查文件大小
ls -lh pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 正常应该显示约 2.5G
# 2. 尝试加载镜像
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 3. 如果加载失败会提示错误,如:
# "archive/tar: invalid tar header" 或 "unexpected EOF"
# 这说明文件损坏,需要重新下载
快速检查清单
| 检查项 | 正常值 | 你的情况 |
|---|---|---|
| 文件大小 | ~2.5GB | |
| 文件后缀 | .tar.gz |
✓ |
| Zone.Identifier | 可有可无 | 有(正常) |
| docker load | 成功加载 | 待验证 |
建议
- 删除当前文件,重新下载
- 使用 aria2 或 IDM 等支持断点续传的工具
- 下载完成后先验证大小(约 2.5GB)再加载
- 如果多次下载都失败,可以在社区发帖求助,看是否有开发者分享了镜像文件
需要我帮你确认最新的镜像下载地址或版本号吗?
如何进入这个docker中,加载后的docker是2.09G
文件大小正常 ✓
2.09G 是正常的文件大小,可以继续使用。
进入 Docker 容器的步骤
第一步:查看镜像 ID
# 加载镜像
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 查看已加载的镜像
sudo docker images | grep pc_tros
输出示例:
pc_tros_ubuntu22.04 v1.0.0 4cbdb9d61e19 2 months ago 2.09GB
记下 IMAGE ID(如 4cbdb9d61e19)
第二步:启动并进入容器
# 创建工作目录(在宿主机 WSL 中)
mkdir -p ~/rdk_cross_compile/cc_ws/tros_ws/src
# 启动容器并挂载目录
sudo docker run -it --rm \
--entrypoint="/bin/bash" \
-v ~/rdk_cross_compile:/work \
4cbdb9d61e19 # 替换为你的 IMAGE ID
参数说明:
| 参数 | 作用 |
|---|---|
-it |
交互式终端 |
--rm |
容器退出后自动删除 |
--entrypoint="/bin/bash" |
直接进入 bash |
-v ~/rdk_cross_compile:/work |
挂载宿主机目录到容器 /work |
第三步:验证进入成功
进入容器后,提示符会变成类似:
root@4cbdb9d61e19:/ros2_ws#
验证环境:
# 检查 ROS2 环境
source /opt/ros/humble/setup.bash
ros2 --version
# 检查挂载目录
ls /work
# 查看容器内目录结构
ls -la /ros2_ws
第四步:开始交叉编译
# 进入工作目录
cd /work/cc_ws/tros_ws
# 获取配置文件
git clone https://github.com/D-Robotics/robot_dev_config.git -b develop
cd robot_dev_config
# 切换到稳定版本
git tag --list
git reset --hard tros_2.3.2
# 拉取源码
cd ..
vcs-import src < ./robot_dev_config/ros2_release.repos
# 编译 X5 版本
bash ./robot_dev_config/build.sh -p X5
退出容器
# 在容器内执行
exit
# 或使用 Ctrl+D
由于使用了 --rm 参数,容器退出后会自动删除,但挂载的 /work 目录数据会保留。
常见问题
| 问题 | 解决 |
|---|---|
permission denied |
在宿主机执行 sudo chmod 777 ~/rdk_cross_compile |
vcs-import 失败 |
配置 Git 代理或换网络 |
| 容器启动后立刻退出 | 检查 --entrypoint 参数是否正确 |
| 找不到 IMAGE ID | 重新执行 sudo docker images 确认 |
官方文档参考
按以上步骤操作,有问题把具体报错贴出来。