
清空记录
历史记录
取消
清空记录
历史记录

ROS2的具体版本
Docker编译
tree.├── docker-focal-python38│ └── rosdep.Dockerfile # 制作Docker Image的Dockerfile├── docker-jammy-python310│ └── rosdep.Dockerfile # 制作Docker Image的Dockerfile├── focal-ros2-build.tar.gz # 根据Dockerfile制作好的Docker Image├── jammy-ros2-build.tar.gz # 根据Dockerfile制作好的Docker Image├── linux-sdk-patches│ └── buildroot # RK Linux SDK不同发布版本有可能会缺少的补丁│ ├── 0001-package-add-libasio.patch│ └── 0002-configs-rockchip-add-ros2-build-dependencies.patch├── MD5SUM.txt # 各压缩包的MD5SUM检验码├── ros2-build-scripts.tar.gz # 编译脚本及补丁└── ros2-sources.tar.gz # ROS2及其部分依赖库的源码包
ls buildroot/configs/rockchip/ros2_dep.configbuildroot/configs/rockchip/ros2_dep.config# 如该ros2_dep.config中缺少:LTTNG_TOOLS,手动加上(ROS2 iron有依赖)tail -f buildroot/configs/rockchip/ros2_dep.config# Required by ros2-iron tracetools; With LTTNG foxy/galactic/humble will buildtracetools too.BR2_PACKAGE_LTTNG_TOOLS=yBR2_PACKAGE_LTTNG_LIBUST=y
0001-package-add-libasio.patch0002-configs-rockchip-add-ros2-build-dependencies.patch
编译ROS2的依赖包
git diff--- a/configs/rockchip_rk356x_robot_defconfig+++ b/configs/rockchip_rk356x_robot_defconfig@@ -10,6 +10,7 @@#include "wifi.config"#include "debug.config"#include "bt.config"+#include "ros2_dep.config"BR2_TARGET_GENERIC_HOSTNAME="rk356x_robot"BR2_TARGET_GENERIC_ISSUE="Welcome to RK356X Buildroot For Robot"BR2_ROOTFS_OVERLAY:="board/rockchip/common/robot/baseboard/rockchip/common/wifi"
完整编译rootfs后,进入下一步。
准备Linux 编译环境
Ubuntu PC机上安装docker程序:
sudo apt install docker.iosudo usermod -aG docker $USERnewgrp docker # 登录到docker用户组
./buildroot/output/rockchip_rk3562_robot/host/bin/python --version Python 3.10.5
根据Python版本号,匹配对应的Docker Image 镜像:
选择jammy-ros2-build,导入并进入到Docker Container:
gunzip jammy-ros2-build.tar.gzdocker image load -i jammy-ros2-build.tardocker run -it --mount type=bind,source=/home/zsq/29/linux-sdk/buildroot/output/rockchip_rk3562_robot/,target=/buildroot jammy-ros2-build
其中source=需要修改成相应的Linux SDK 编译的output目录的绝对路径
进入Container后, 默认用户是builder,密码默认是: rockchip
# 首先查找已登录的container IDdocker container lsCONTAINER ID IMAGE COMMAND CREATED STATUSPORTS NAMESc519d9d668f9 jammy-ros2-build "/bin/bash" 15 minutes ago Up 15 minutespedantic_feynmandocker container cp ros2-sources.tar.gz c519d9d668f9:/tmp/docker container cp ros2-sources.tar.gz c519d9d668f9:/tmp/
builder@c519d9d668f9:/opt/ros$ ls /tmp/ros2-build-scripts.tar.gz ros2-sources.tar.gzbuilder@c519d9d668f9:/opt/ros$ tar zxf /tmp/ros2-build-scripts.tar.gz -C /builder@c519d9d668f9:/opt/ros$ tar zxf /tmp/ros2-sources.tar.gz -C /builder@c519d9d668f9:/opt/ros$ lscross-compile foxy galactic humble iron
docker build -t jammy-ros2-build -f rosdep.Dockerfile ./ # "./"不要少拷贝了,表示当前目录
cd /opt/ros/foxymkdir srcvcs-import -w 10 --retry 10 --skip-existing --recursive src < ros2-release-foxy-20230620/ros2.repos
编译ROS2
再次确认RK Linux SDK、已经有加上ros2 dep.config,并且rootfs完整编译通过,并且所选Docker Image与RK Linux SDK编译出来的Python是匹配的。
选择所需ROS2版本,并依次执行以下命令:
ls /opt/roscross-compile foxy galactic humble ironcd /opt/ros/iron./prepare-source.sh./build-ros2.sh# 编译成功后,应有类似提示:...Summary: 317 packages finished [15min 37s]...build ros quit & cleanup
说明:
编译生成的目标文件位于/buildroot/target/opt/ros目录。
编译中间过程存放在/buildroot/build/ros目录。
如build_ros2.sh未提示错误即成功编译。其中,还有部分包在Buildroot SDK环境中,无法编译、执行的,比如:
rviz,依赖于X11/desktop。如果你需要这个功能,直接使用Ubuntu arm镜像,而不是Buildroot。
turtlesim,依赖于UI显示。
如果想要取消某个包的编译,在src对应的路径下,创建一个COLCON_IGNORE即可。比如
touchsrc/ros/ros_tutorials/turtlesim/COLCON_IGNORE
--- stderr: fastrtpsCMake Error: TRY_RUN() invoked in cross-compiling mode, please set the followingcache variables appropriately:SM_RUN_RESULT (advanced)SM_RUN_RESULT__TRYRUN_OUTPUT (advanced)For details see /buildroot/build/ros/fastrtps/TryRunResults.cmake
root@rk3562-buildroot:/# /tmp/cmTC_4f573-SM_RUN_RESULTPTHREAD_RWLOCK_PREFER_READER_NP# 根据上述执行结果,在docker中填入结果:cat /buildroot/build/ros/fastrtps/TryRunResults.cmake....set( SM_RUN_RESULT"0"CACHE STRING "PTHREAD_RWLOCK_PREFER_READER_NP" FORCE)set( SM_RUN_RESULT__TRYRUN_OUTPUT"0"CACHE STRING "PTHREAD_RWLOCK_PREFER_READER_NP" FORCE)
--- stderr: rosbag2_cppCMake Error: TRY_RUN() invoked in cross-compiling mode, please set the followingcache variables appropriately:HAVE_SANITIZERS_EXITCODE (advanced)HAVE_SANITIZERS_EXITCODE__TRYRUN_OUTPUT (advanced)For details see /buildroot/build/ros/rosbag2_cpp/TryRunResults.cmake
set( HAVE_SANITIZERS_EXITCODE"127"CACHE STRING "error while loading shared libraries: liblsan.so.0: cannotopen shared object file: No such file or directory" FORCE)set( HAVE_SANITIZERS_EXITCODE__TRYRUN_OUTPUT"127"CACHE STRING "error while loading shared libraries: liblsan.so.0: cannotopen shared object file: No such file or directory" FORCE)
使用colcon build的参数 --packages-select
打包rootfs并运行ROS2
cd /data/linux-sdk/rk3562./build.sh rootfs # 重新打包rootfs.img
# cd /opt/ros/# export COLCON_CURRENT_PREFIX=/opt/ros# export ROS_HOME=/userdata/# source ./local_setup.sh# ros2 pkg list# ros2 pkg executables# ros2 run demo_nodes_cpp listener &# ros2 run demo_nodes_cpp talker[INFO] [1501839280.834017748] [talker]: Publishing: 'Hello World: 1'[INFO] [1501839280.839280957] [listener]: I heard: [Hello World: 1][INFO] [1501839281.831636015] [talker]: Publishing: 'Hello World: 2'[INFO] [1501839281.835092640] [listener]: I heard: [Hello World: 2][INFO] [1501839282.831618532] [talker]: Publishing: 'Hello World: 3'[INFO] [1501839282.835336782] [listener]: I heard: [Hello World: 3]# ros2 run demo_nodes_py listener &# ros2 run demo_nodes_py talker
好了,今天触觉智能分享就到这里,关注触觉智能,下集为您带来常见编译报错的解决方法。
