是否提供ROS2功能包交叉编译的docker镜像?
参考手册:5.1.3 源码安装 | RDK DOC
docker-compose.yml
version: ‘3.8’ # 指定docker-compose版本,兼容主流Docker环境
services:
rdk_tros:
image: pc_tros:v1.0.5
container_name: rdk_tros
stdin_open: true # 等价于手动命令的 -i 参数(保持标准输入打开)
tty: true # 等价于手动命令的 -t 参数(分配伪终端)
volumes:
- ./app:/ros2_ws/app
- ./demo:/ros2_ws/demo
restart: “no” # 容器退出后不自动重启(符合–rm的临时使用场景)
我用了上面的文件运行docker,报错,请问如何解决?
Error response from daemon: client version 1.43 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version
你好!这个报错 client version 1.43 is too old 主要是因为你本地环境的 Docker 客户端版本过低,无法满足镜像或 Docker Daemon 要求的最底层 API 版本(1.44)。
我看这个教程有些迷糊。。。讲的是在x86平台编辑出能在RDK x5平台上运行的ros2包吗?在x86平台上运行docker,在docker里编译ros2包?
你好 理解正确,此为直接在个人PC交叉编译TROS功能包的教程
root@2e44231c3010:/ros2_ws/cc_ws# bash ./robot_dev_config/build.sh -p X5
PACKAGE_SELECTION is empty and reset with RAW_OPTIONS
PACKAGE_SELECTION:
rm: missing operand
Try ‘rm --help’ for more information.
rm: missing operand
Try ‘rm --help’ for more information.
build platform X5
./robot_dev_config/build.sh: line 133: /opt/ros/humble/setup.bash: No such file or directory
build X5
[INFO] Running pre_function
[INFO] Creating symlinks…
Linked /usr/include/pcl-1.12 → /ros2_ws/cc_ws/../sysroot_docker/usr/include/pcl-1.12
Linked /usr/include/eigen3 → /ros2_ws/cc_ws/../sysroot_docker/usr/include/eigen3
Linked /usr/include/ni → /ros2_ws/cc_ws/../sysroot_docker/usr/include/ni
Linked /usr/include/openni2 → /ros2_ws/cc_ws/../sysroot_docker/usr/include/openni2
Linked /usr/include/uuid → /ros2_ws/cc_ws/../sysroot_docker/usr/include/uuid
Linked /usr/include/aarch64-linux-gnu/qt5 → /ros2_ws/cc_ws/../sysroot_docker/usr/include/aarch64-linux-gnu/qt5
Linked /usr/include/opencv4 → /ros2_ws/cc_ws/../sysroot_docker/usr/include/opencv4
Linked /usr/include/suitesparse → /ros2_ws/cc_ws/../sysroot_docker/usr/include/suitesparse
Linked /usr/lib/aarch64-linux-gnu/qt5 → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/qt5
Linked /usr/lib/libOpenNI.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/libOpenNI.so
Linked /usr/lib/aarch64-linux-gnu/libcxsparse.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libcxsparse.so
Linked /usr/lib/aarch64-linux-gnu/libcholmod.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libcholmod.so
Linked /usr/lib/aarch64-linux-gnu/libamd.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libamd.so
Linked /usr/lib/aarch64-linux-gnu/libcolamd.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libcolamd.so
Linked /usr/lib/aarch64-linux-gnu/libcamd.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libcamd.so
Linked /usr/lib/aarch64-linux-gnu/libccolamd.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libccolamd.so
Linked /usr/lib/aarch64-linux-gnu/libpcl_common.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libpcl_common.so
Linked /usr/lib/aarch64-linux-gnu/libOpenNI2.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libOpenNI2.so
Linked /usr/lib/aarch64-linux-gnu/libblas.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libblas.so
Linked /usr/lib/aarch64-linux-gnu/liblapack.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/liblapack.so
Linked /usr/lib/aarch64-linux-gnu/libyaml-cpp.so.0.7.0 → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libyaml-cpp.so.0.7.0
Linked /usr/lib/aarch64-linux-gnu/libdraco.a → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libdraco.a
Linked /usr/lib/aarch64-linux-gnu/libdraco.so.4.0.0 → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libdraco.so.4.0.0
Linked /usr/lib/aarch64-linux-gnu/libz.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libz.so
Linked /usr/lib/aarch64-linux-gnu/libz.so.1.2.11 → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libz.so.1.2.11
Linked /usr/lib/aarch64-linux-gnu/librt.a → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/librt.a
Linked /usr/lib/aarch64-linux-gnu/libtinyxml.so → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libtinyxml.so
Linked /usr/lib/aarch64-linux-gnu/libtinyxml.so.2.6.2 → /ros2_ws/cc_ws/../sysroot_docker/usr/lib/aarch64-linux-gnu/libtinyxml.so.2.6.2
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_demos/COLCON_IGNORE’: No such file or directory
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_examples/COLCON_IGNORE’: No such file or directory
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_launch/COLCON_IGNORE’: No such file or directory
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_python/COLCON_IGNORE’: No such file or directory
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_ros/COLCON_IGNORE’: No such file or directory
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_rviz_plugins/COLCON_IGNORE’: No such file or directory
touch: cannot touch ‘./src/rtabmap_ros/rtabmap_viz/COLCON_IGNORE’: No such file or directory
- warnning: source file /ros2_ws/cc_ws/../sysroot_docker/usr/ros/humble/bin/rtabmap-res_tool not exist
- warnning: source file /ros2_ws/cc_ws/../sysroot_docker/usr/ros/humble/bin/rtabmap-res_tool-0.3.0 not exist
- warnning: source file /ros2_ws/cc_ws/../sysroot_docker/usr/ros/humble/lib/x86_64-linux-gnu/librtabmap_utilite.so.0.22 not exist
[INFO] End pre_function
Starting >>> ai_msgs
Starting >>> hbm_img_msgs
Starting >>> dnn_node
Starting >>> img_msgs
Starting >>> hobot_mot
Starting >>> hobot_cv
Starting >>> audio_msg
Starting >>> clip_msgs
Starting >>> base
Starting >>> hobot_tts
Starting >>> recorder_node
Starting >>> trigger_node
Starting >>> tros_perception_fusion_msgs
Starting >>> dstereo_occnet
Starting >>> hobot_shm
Starting >>> hobot_stereonet
— stderr: img_msgs
CMake Error at CMakeLists.txt:36 (find_package):
By not providing “Findament_cmake.cmake” in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
“ament_cmake”, but CMake did not find one.
Could not find a package configuration file provided by “ament_cmake” with
any of the following names:
ament_cmakeConfig.cmake
ament_cmake-config.cmake
Add the installation prefix of “ament_cmake” to CMAKE_PREFIX_PATH or set
“ament_cmake_DIR” to a directory containing one of the above files. If
“ament_cmake” provides a separate development package or SDK, be sure it
has been installed.
Failed <<< img_msgs [2.08s, exited with code 1]
Aborted <<< ai_msgs [2.17s]
Aborted <<< dnn_node [2.13s]
Aborted <<< clip_msgs [2.03s]
Aborted <<< hobot_cv [2.07s]
Aborted <<< audio_msg [2.04s]
Aborted <<< base [2.02s]
Aborted <<< tros_perception_fusion_msgs [1.92s]
Aborted <<< hbm_img_msgs [2.14s]
Aborted <<< hobot_shm [1.89s]
Aborted <<< dstereo_occnet [1.91s]
Aborted <<< hobot_mot [2.09s]
Aborted <<< recorder_node [1.97s]
Aborted <<< hobot_stereonet [1.90s]
Aborted <<< trigger_node [1.99s]
Aborted <<< hobot_tts [2.04s]
Summary: 0 packages finished [3.12s]
1 package failed: img_msgs
15 packages aborted: ai_msgs audio_msg base clip_msgs dnn_node dstereo_occnet hbm_img_msgs hobot_cv hobot_mot hobot_shm hobot_stereonet hobot_tts recorder_node trigger_node tros_perception_fusion_msgs
16 packages had stderr output: ai_msgs audio_msg base clip_msgs dnn_node dstereo_occnet hbm_img_msgs hobot_cv hobot_mot hobot_shm hobot_stereonet hobot_tts img_msgs recorder_node trigger_node tros_perception_fusion_msgs
46 packages not processed
[ERROR] colcon build failed
[INFO] Running post_function
[INFO] End post_function
执行教程第三步交叉编译,报错
另外:
我执行完第二步“获取tros.b源码”,sysroot_docker目录结构和教程不一样。
root@2e44231c3010:/ros2_ws/sysroot_docker# ls
CHANGELOG.md README.md etc lib usr usr_rdkultra usr_s100 usr_x3 usr_x5 usr_x86 v1.3
我没执行“## 使用 git reset --hard [tag号] 命令指定发布版本。详细说明参考本页面 编译指定版本tros.b 内容”这个步骤,有影响吗?
好的。我重新下载了docker镜像。又有新问题了。执行vcs-import src < ./robot_dev_config/ros2_release.repos时,出现一大堆EEEEEEEEEEEEEEEEE。。这个是网络不通的问题吧?有国内解决办法吗?
拉取github这部分内容就比较通用了,即配置linux系统代理,可以直接网络上搜索通用内容
基础的开发也不需要交叉编译,直接在板端开发即可
交叉编译有教程吗?在哪个路径下创建自己的package,如何执行交叉编译?
交叉编译只是在X86提供 开发X5可直接使用的环境,后面我理解都是正常ROS开发
我理解不是这样。交叉编译是使用了x86的交叉编译工具,而包所需要的依赖需要arm64的库,如果直接编译,默认使用的x86的库,所以关键问题就是如何指定编译所需要的依赖使用arm64版本的库?
您好,您提到的关于“依赖库架构不匹配(x86 vs arm64)”确实是交叉编译中最关键的问题。这正是我们提供专用 Docker 环境和配套构建脚本的原因,文档中其实已经包含了解决方案。
具体来说,在按照文档步骤启动 Docker 并挂载目录后,编译环境通过以下两点解决了依赖问题:
-
Sysroot 环境:我们的工程目录(如
sysroot_docker)中包含了目标平台(ARM64)所需的系统库和依赖库,而非使用宿主机的 x86 库。 -
工具链配置:构建脚本调用的 CMake 工具链文件(
aarch64_toolchainfile.cmake)已经配置好了CMAKE_FIND_ROOT_PATH。这意味着编译器在查找依赖时,会被强制指向上述的 ARM64 sysroot 路径,而不会去链接系统默认的 x86 库。
所以,只要严格按照文档在 Docker 环境中执行 build.sh,这些依赖查找路径的问题都会自动处理,无需手动指定。
