为什么我下载了用于交叉编译的docker,但是里面没有sysroot_docker文件夹

你好 @vzenith,太好了!找到 sysroot_docker 后,只编译自己的 ROS2 包非常简单,不需要执行 vcs-import


:bullseye: 推荐方案:标准 colcon 交叉编译

1. 确认工具链文件位置

首先在容器内找到工具链文件:

# 在 Docker 容器内执行
find /work/sysroot_docker -name "*toolchain*.cmake" 2>/dev/null

常见路径

  • /work/sysroot_docker/usr/share/cmake/aarch64_toolchainfile.cmake
  • /work/sysroot_docker/usr_x5/toolchain.cmake

2. 创建工作空间

# 在 Docker 容器内
mkdir -p /work/my_ws/src
cd /work/my_ws/src

3. 放置你的功能包

# 方式 A:从主机复制(在主机上执行)
# exit 退出容器后
cp -r ~/your_package ~/rdk_cross_compile/my_ws/src/

# 方式 B:直接在容器内创建
cd /work/my_ws/src
# 把你的包代码放这里

4. 交叉编译(关键步骤)

cd /work/my_ws

# 设置环境变量
source /work/sysroot_docker/usr/ros/humble/setup.bash

# 使用工具链文件编译
colcon build \
  --cmake-args \
    -DCMAKE_TOOLCHAIN_FILE=/work/sysroot_docker/usr/share/cmake/aarch64_toolchainfile.cmake \
    -DCMAKE_FIND_ROOT_PATH=/work/sysroot_docker/usr \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY

:warning: 注意CMAKE_TOOLCHAIN_FILE 路径需要根据你实际找到的工具链文件调整


5. 部署到板端

# 编译完成后,在主机上执行
# 将 install 目录拷贝到 RDK X5 的 /opt/tros/

# 方式 A:使用 scp
scp -r ~/rdk_cross_compile/my_ws/install root@<板端IP>:/opt/tros/

# 方式 B:使用 U 盘中转
# 把 install 目录复制到 U 盘,插到板子上拷贝

6. 在板端运行

# 在 RDK X5 上
source /opt/tros/setup.bash
ros2 launch your_package your_launch.py

:clipboard: 完整工作流示例

# === 在 Docker 容器内 ===

# 1. 启动容器(挂载你的代码目录)
sudo docker run -it --rm \
  --entrypoint="/bin/bash" \
  -v ~/rdk_cross_compile:/work \
  pc_tros_ubuntu22.04:v1.0.0

# 2. 确认工具链文件
find /work/sysroot_docker -name "*toolchain*.cmake"

# 3. 创建工作空间
mkdir -p /work/my_ws/src
cd /work/my_ws/src

# 4. 放置你的包(假设你的包叫 my_robot)
# 可以从主机复制,或直接在容器内 git clone

# 5. 编译
cd /work/my_ws
source /work/sysroot_docker/usr/ros/humble/setup.bash
colcon build \
  --cmake-args \
    -DCMAKE_TOOLCHAIN_FILE=/work/sysroot_docker/usr/share/cmake/aarch64_toolchainfile.cmake \
    -DCMAKE_FIND_ROOT_PATH=/work/sysroot_docker/usr \
    -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
    -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
    -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY

# 6. 验证编译结果
ls -la install/

:warning: 常见问题

问题 解决方案
ament_cmake not found 确保 source /work/sysroot_docker/usr/ros/humble/setup.bash
库文件架构不匹配 确认使用了正确的 CMAKE_TOOLCHAIN_FILE
依赖包缺失 CMakeLists.txt 中添加 find_package()
编译成功但板端运行报错 检查板端 TROS 版本与编译环境是否匹配

:books: 相关资源


先执行第 1 步找到工具链文件,把路径贴出来,我可以帮你确认编译命令是否正确!