本文適用于瑞芯微RK3562、RK3566、RK3568、RK3576、RK3588等Arm64位SoC,適配開發ROS2系統。各型號觸覺智能均有配套核心板及開發板,實現了百分百全國產。
ROS2的具體版本
版本說明
Rockchip Linux SDK基于Buildroot系統構建, 并持續在更新升級工具鏈、軟件包到較新的版本。 因此最新的SDK在編譯ROS2時,可能會遇到一些小的錯誤,建議將版本固定。ROS2發行版本號如下(下載鏈接可通過截圖轉文字獲?。?br />

已經編譯通過的RK Linux SDK版本:

Docker編譯
補丁、Docker 鏡像、源碼下載
https://console.zbox.filez.com/l/iJBMWZ
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及其部分依賴庫的源碼包
在RK Linux SDK的Buildroot目錄中,檢查是否存在ros2_dep.config文件
ls buildroot/configs/rockchip/ros2_dep.config buildroot/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 build tracetools too. BR2_PACKAGE_LTTNG_TOOLS=y BR2_PACKAGE_LTTNG_LIBUST=y
如不存在該文件,則需要在Buildroot目錄中打上如下2個補丁
0001-package-add-libasio.patch 0002-configs-rockchip-add-ros2-build-dependencies.patch
檢查lttng-tools(2.12.3)、lttng-libust(2.12.3)、liburcu(0.13.0)是否滿足版本要求。
編譯ROS2的依賴包
RK Linux SDK 中的Buildroot工程里,ros2_dep.config提供了編譯、運行ROS2所需要的依賴包,需要添加并編譯到rootfs。
例如,將ros2_dep.config添加到rockchip_rk356x_robot_defconfig中:
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/base board/rockchip/common/wifi"
完整編譯rootfs后,進入下一步。
準備Linux 編譯環境
Ubuntu PC機上安裝docker程序:
sudo apt install docker.io sudo usermod -aG docker $USER newgrp docker # 登錄到docker用戶組
導入Docker Image
首先檢查RK Linux SDK 編譯出來的Python版本,例如:
./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.gz docker image load -i jammy-ros2-build.tar docker 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
拷貝編譯腳本及源碼包
通過docker container cp命令,拷貝所需文件:
# 首先查找已登錄的container ID docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c519d9d668f9 jammy-ros2-build "/bin/bash" 15 minutes ago Up 15 minutes pedantic_feynman docker container cp ros2-sources.tar.gz c519d9d668f9:/tmp/ docker container cp ros2-sources.tar.gz c519d9d668f9:/tmp/
在Container 中,將其解壓:
builder@c519d9d668f9:/opt/ros$ ls /tmp/ ros2-build-scripts.tar.gz ros2-sources.tar.gz builder@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$ ls cross-compile foxy galactic humble iron
修改腳本中的Python版本號
檢查/opt/ros/cross-compile/cross-compile.mixin及build_ros2.sh, 將其中的Python版本號修改成RK LinuxSDK對應的版本號,例如:310修改成38,其中310表示Python3.10版本,以此類推~3.10修改成3.8。
(可選)使用Docker編譯ROS2
如果想要從頭開始制作Docker Image,可使用RK提供的
rosdep.Dockerfile:
docker build -t jammy-ros2-build -f rosdep.Dockerfile ./ # "./"不要少拷貝了,表示當前目錄
(可選)下載源碼
如需要自己下載其它版本的源碼,進入docker后,可使用vcs-import:
cd /opt/ros/foxy mkdir src vcs-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/ros cross-compile foxy galactic humble iron cd /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
TRY_RUN需要手動執行并記錄結果
fastrtps TRY_RUN提示:
--- stderr: fastrtps CMake Error: TRY_RUN() invoked in cross-compiling mode, please set the following cache 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_RESULT
PTHREAD_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)
rosbag2_cpp TRY_RUN提示:
--- stderr: rosbag2_cpp CMake Error: TRY_RUN() invoked in cross-compiling mode, please set the following cache 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: cannot open 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: cannot open shared object file: No such file or directory" FORCE)
單獨編譯某個ROS2 package 及應用程序
使用colcon build的參數 --packages-select 可單獨編譯包,可參考 colcon build --help 。
打包rootfs并運行ROS2
在上述ROS2完整編譯結束后,進入到buildroot sdk,重新打包rootfs即可。ROS2安裝在/opt/ros目錄下。
cd /data/linux-sdk/rk3562 ./build.sh rootfs # 重新打包rootfs.img
燒錄rootfs.img后,進入rk3562板端,執行Hello World Demo:
# 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
好了,今天觸覺智能分享就到這里,關注觸覺智能,下集為您帶來常見編譯報錯的解決方法。
-
瑞芯微
+關注
關注
25文章
570瀏覽量
52362 -
ROS
+關注
關注
1文章
287瀏覽量
17681 -
RK3588
+關注
關注
7文章
417瀏覽量
5786 -
rk3576
+關注
關注
1文章
166瀏覽量
667 -
RK3562
+關注
關注
0文章
72瀏覽量
337
發布評論請先 登錄
ROS讓機器人開發更便捷,基于RK3568J+Debian系統發布!
米爾RK3576和RK3588怎么選?-看這篇就夠了
探索 RK3576 方案:卓越性能與靈活框架,誠邀開發定制合作!
RK3576 vs RK3588:為何越來越多的開發者轉向RK3576?
Mpp支持RK3576么
【ROS RIKIBOT基礎--使用系列 第一章節】ROS機器人硬件系統 精選資料分享
ArmSoM規劃開發基于RK3576的開發套件
ROS讓機器人開發更便捷,基于RK3568J+Debian系統發布!
新品體驗 | RK3576開發板

RK3576單板發布倒計時:RK3399與RK3576對比

RK3588與RK3576區別解析

評論