你好 @vzenith,太好了!找到 sysroot_docker 后,只编译自己的 ROS2 包非常简单,不需要执行 vcs-import。
推荐方案:标准 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
注意:
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
完整工作流示例
# === 在 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/
常见问题
| 问题 | 解决方案 |
|---|---|
ament_cmake not found |
确保 source /work/sysroot_docker/usr/ros/humble/setup.bash |
库文件架构不匹配 |
确认使用了正确的 CMAKE_TOOLCHAIN_FILE |
依赖包缺失 |
在 CMakeLists.txt 中添加 find_package() |
| 编译成功但板端运行报错 | 检查板端 TROS 版本与编译环境是否匹配 |
相关资源
先执行第 1 步找到工具链文件,把路径贴出来,我可以帮你确认编译命令是否正确!