陈工-创龙科技 发表于 2026-5-12 13:54:35

RK3576 单板机玩转 ROS2:通信测试 + 编译部署全流程详解

前言本文是创龙科技针对 RK3576 单板机编写的 ROS2 开发手册,基于 ROS2 Humble 版本提供完整的机器人操作系统开发与测试指引。文档详细讲解 ROS2 环境配置、Python/C++ 通信测试、小海龟仿真演示,以及 ROS2 软件包交叉编译、部署与运行流程。开发环境Windows开发环境:Windows7 64bit、Windows10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitsysroot:rk3576-Tronlong-Desktop-22.04-sysroot-[版本号].tar.gz系统版本:Tronlong-Desktop 22.04(类Ubuntu)、Linux-6.1.115、U-Boot-2017.09ROS:ROS2 Humble备注:本文基于2GByte LPDDR4X、16GByte eMMC配置单板机进行演示。术语表为便于阅读,下表对文中出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnWqAHxYtAAArB1eur-k053.png1 ROS系统测试执行如下命令,配置单板机测试环境。Target# export COLCON_CURRENT_PREFIX=/opt/ros/humble //设置COLCON_CURRENT_PREFIX环境变量,并将其值指向ROS2 Humble的安装目录Target# source /opt/ros/humble/local_setup.sh //执行ROS2 Humble的环境设置脚本,从而将ROS2的命令、库路径、功能包信息等加载到当前的Shell会话中https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnbKAcE1QAAAKnarI10Q480.png1.1基于Python的通信功能测试执行如下命令,创建Log目录,用于保存ROS程序运行的Log。Target# mkdir -p /root/.ros/loghttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnbuAVkjXAAAFC8CqeKs243.png
执行如下命令,启动ROS节点订阅消息。Target# ros2 run demo_nodes_py listener &https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCncCADlYfAAAHVsiPuVg323.png
执行如下命令,启动ROS节点发布消息,实现订阅消息节点与发布消息节点之间的通信。此时单板机串口调试终端将会打印两节点间通信的信息,如下图所示。按"Ctrl + C"可退出测试程序,即让发布消息的节点退出。Target# ros2 run demo_nodes_py talkerhttps://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCncWAH51DAAA_Q39xaOc863.png
执行如下命令,查看并根据系统进程号关闭所有ROS节点。进程号请以实际情况为准。Target# ps -aTarget# kill 1569Target# kill 1570https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCncuAfWCRAAAXW5GW9Kw057.png1.2基于C++的通信功能测试执行如下命令,创建Log目录,用于保存ROS程序运行的Log。备注:若已创建Log目录,可跳过此步骤。Target# mkdir -p /root/.ros/loghttps://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCndKAOZpqAAAFCf0VH8k412.png
执行如下命令,启动ROS节点订阅消息。Target# ros2 run demo_nodes_cpp listener &https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCndeACfR3AAAHVU9dsBU723.png
执行如下命令,启动ROS节点发布消息,实现订阅消息节点与发布消息节点之间的通信。此时单板机串口调试终端将会打印两节点间通信的信息,如下图所示。按"Ctrl + C"可退出测试程序,即让发布消息的节点退出。Target# ros2 run demo_nodes_cpp talkerhttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCndyAYfXjAAA_-y5BAbo525.png
执行如下命令,根据系统进程号关闭所有ROS节点。进程号请以实际情况为准。Target# ps -aTarget# kill 1659Target# kill 1660https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnfKAQk9pAAAdOGDWyCo965.png1.3turtlesim(小海龟)测试执行如下命令,配置单板机测试环境。备注:若已配置单板机测试环境,可跳过此步骤。Target# export COLCON_CURRENT_PREFIX=/opt/ros/humble //设置COLCON_CURRENT_PREFIX环境变量,并将其值指向ROS2 Humble的安装目录Target# source /opt/ros/humble/local_setup.sh //执行ROS2 Humble的环境设置脚本,从而将ROS2的命令、库路径、功能包信息等加载到当前的Shell会话中https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnfiAeea2AAAKpAKdGeg012.png
执行如下命令,创建Log目录,用于保存ROS程序运行的Log。备注:若已创建Log目录,可跳过此步骤。Target# mkdir -p /root/.ros/loghttps://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnf6Ae_aaAAAFDwxcYU4202.png
执行如下命令,后台运行小海龟程序。Target# ros2 run turtlesim turtlesim_node &https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCngeAd3zrAAAcvra47sY919.png

https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCngqAOXUOAIScQzVS3oA491.png
执行如下命令,发布话题消息,使小海龟转圈。Target# ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnoGARdCDAAA4wrEK6ao583.png
参数解析:ros2 topic pub:发布消息到主题;--rate 1:发布消息速率,设置为1次每秒;/turtle1/cmd_vel:主题名称;geometry_msgs/msg/Twist:发布消息类型;{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}:发布消息的内容,线速度(linear)为x方向上的2.0、角速度(angular)为z轴方向上的1.8。https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnoiAXW0CAIh96zotECg599.png
2 ROS开发请先参考《开发环境搭建》文档进行VMware虚拟机与Ubuntu安装,并参考《应用开发手册》文档正确安装sysroot。本小节主要演示基于上位机Ubuntu的ROS系统编译与镜像制作方法。2.1开发环境搭建打开Ubuntu终端,执行如下命令,安装编译所需的colcon工具。Host# sudo apt install curlHost# sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpghttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnouARIkoAACXsEFAS3s997.png
因网络问题,下载GPP密钥可能会失败,若无法下载,可将产品资料“4-软件资料/Demo/other”目录下的ros-archive-keyring.gpg文件拷贝到Ubuntu系统"/usr/share/keyrings/"目录。执行如下命令,安装ros工具。Host# sudo cp ros-archive-keyring.gpg /usr/share/keyrings/Host# sudo echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullHost# sudo apt updateHost# sudo apt install ros-humble-ros-base -y
https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnpSAbw0BAAGB0uJ6UTU242.png
https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnp6AdRc0AAE3sNj_OUI157.png
https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnpSAXRBDAAC44huTjFI366.png
执行如下命令,安装编译所需的colcon工具。Host# curl -s https://packagecloud.io/install/repositories/dirk-thomas/vcstool/script.deb.sh | sudo bashHost# sudo apt updateHost# sudo apt-get install -y python3-pip python3-rosdep2 python3-rosinstall-generator python3-vcstool build-essentialHost# pip3 install -U colcon-common-extensionsHost# pip3 uninstall empyHost# pip3 install empy==3.3.4https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnrOAHfXYAAH8a_t_Bsc865.png
https://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnrOAZGWjAAHYonyUjDk731.png
https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnrOAbQ1WAAJB2P7yqxU275.png
https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnrOAQQSOAAGuSZ3WEz8940.png
执行如下命令,配置环境变量。Host# export PATH=${PATH}:/home/tronlong/.local/binhttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnsGAAynwAAAnQZrPbtM902.png
2.2编译ROS软件包请根据交叉编译工具链实际解压路径,执行如下命令,配置交叉编译工具链。Host# source /home/tronlong/RK3576/environmentHost# source /opt/ros/humble/local_setup.bashhttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnseAYlIaAAA8V6fF2Bk814.png
执行如下命令,创建ROS软件包的工作目录,并进入该目录,目录可命名为任意名称。Host# mkdir ros2_project_testHost# cd ros2_project_testhttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnsyAaCdYAAA59d9Mb0M786.png
执行如下命令,创建ROS软件包源码目录,并进入该目录。Host# mkdir srcHost# cd srchttps://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCntGAUc0iAAA901P1tgU178.png
执行如下命令,在源码目录下生成my_package包。本案例以构建CPP功能包为例,如需构建Python功能包可将参数ament_cmake改为ament_python。Host# ros2 pkg create --build-type ament_cmake --node-name my_node my_packagehttps://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnteAIusqAAFnJAULcCM731.png
参数解析:--build-type ament_cmake :指定软件包的构建类型为ament_cmake;--node-name my_node:为软件包指定了一个my_node节点;--my_package:软件包的名称为my_package。完成构建后,ROS软件包源码目录结构如下所示。可根据实际需要对"my_package/src/my_node.cpp"进行修改。https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnt2AOJkTAABZ8jJ4Zms462.png
返回ROS软件包工作目录,编译软件包。Host# cd ..Host# colcon buildhttps://file1.elecfans.com/web3/M00/5E/E8/wKgZPGoCnueAQApiAABjHjrFg_M655.png
编译完成后在当前目录下生成如下目录,目录内容如下表所示。https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnvCAflLeAAAtSyIdlpE342.png

https://file1.elecfans.com/web3/M00/5E/E6/wKgZO2oCnviAKgx5AAAbzZPri8Q224.png

页: [1]
查看完整版本: RK3576 单板机玩转 ROS2:通信测试 + 编译部署全流程详解