7,697
社区成员
发帖
与我相关
我的任务
分享title: "犀牛派 X1 初体验:在 Ubuntu 22.04 上运行第一个 ROS 2 C++ 节点"
date: 2026-09-21
tags:
最近开始上手犀牛派 X1。这块板卡已经成功启动 Ubuntu 22.04.2 LTS,终端显示系统架构为 aarch64。本文记录如何在板卡上创建、编译并运行一个最简单的 ROS 2 C++ 节点,为后续接入传感器、底盘和机器人算法做好准备。

本次使用的环境如下:
aarch64)colconrclcpp
开始前,先加载 ROS 2 环境并确认发行版:
source /opt/ros/humble/setup.bash
echo $ROS_DISTRO
终端输出 humble 即可继续。如果希望每次打开终端时自动加载,可以执行:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
ROS 2 工作空间通常将所有功能包统一放在 src 目录中。先创建工作空间:
mkdir -p ~/ws_helloworld/src
cd ~/ws_helloworld/src
然后创建一个使用 ament_cmake 构建的 C++ 功能包:
ros2 pkg create \
--build-type ament_cmake \
--license Apache-2.0 \
--dependencies rclcpp \
--node-name helloworld \
pkg_helloworld_cpp
这里各参数的作用是:
--build-type ament_cmake:使用 CMake 构建 C++ 包;--license Apache-2.0:写入许可证信息并生成许可证文件;--dependencies rclcpp:添加 ROS 2 C++ 客户端库依赖;--node-name helloworld:同时生成名为 helloworld 的示例节点;pkg_helloworld_cpp:功能包名称。创建完成后,主要目录结构如下:
ws_helloworld/
└── src/
└── pkg_helloworld_cpp/
├── CMakeLists.txt
├── package.xml
└── src/
└── helloworld.cpp
打开源文件:
nano ~/ws_helloworld/src/pkg_helloworld_cpp/src/helloworld.cpp
将内容修改为:
#include "rclcpp/rclcpp.hpp"
int main(int argc, char ** argv)
{
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("helloworld");
RCLCPP_INFO(node->get_logger(), "Hello, Rhino Pi X1!");
rclcpp::shutdown();
return 0;
}
程序的执行过程很简单:初始化 ROS 2,创建一个名为 helloworld 的节点,输出一条日志,然后关闭 ROS 2。
使用 --node-name helloworld 创建功能包时,工具会自动在 CMakeLists.txt 中配置可执行文件和安装规则。关键内容应类似下面这样:
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
add_executable(helloworld src/helloworld.cpp)
ament_target_dependencies(helloworld rclcpp)
install(TARGETS
helloworld
DESTINATION lib/${PROJECT_NAME}
)
ament_package()
回到工作空间根目录并安装可能缺少的依赖:
cd ~/ws_helloworld
rosdep install --from-paths src --ignore-src -r -y
编译当前功能包:
colcon build --packages-select pkg_helloworld_cpp
看到 Summary: 1 package finished,说明编译成功。此时工作空间中会出现 build、install 和 log 三个目录。
每次完成编译后,都需要加载当前工作空间的环境:
source ~/ws_helloworld/install/setup.bash
运行节点:
ros2 run pkg_helloworld_cpp helloworld
正常情况下,终端会输出类似内容:
[INFO] [helloworld]: Hello, Rhino Pi X1!
这说明犀牛派 X1 上的 ROS 2 C++ 开发链路已经跑通:功能包可以创建,源码可以编译,生成的节点也可以被 ROS 2 正确发现和执行。
ros2: command not found当前终端尚未加载 ROS 2 环境,执行:
source /opt/ros/humble/setup.bash
Package 'pkg_helloworld_cpp' not found通常是编译后没有加载工作空间环境。执行:
cd ~/ws_helloworld
source install/setup.bash
也可以用下面的命令确认 ROS 2 是否已经发现可执行文件:
ros2 pkg executables pkg_helloworld_cpp
TODO创建包时加入 --license Apache-2.0。如果包已经创建,需要同步修改 package.xml 中的 <license> 字段,并在包目录中补充对应的 LICENSE 文件。
将它移动到 src 后重新编译:
mv ~/ws_helloworld/pkg_helloworld_cpp ~/ws_helloworld/src/
cd ~/ws_helloworld
rm -rf build install log
colcon build --packages-select pkg_helloworld_cpp
至此,我们已经在犀牛派 X1 上完成了第一个 ROS 2 C++ 节点。虽然程序只输出了一行日志,但它验证了系统环境、ROS 2、rclcpp、CMake 和 colcon 整条开发流程。接下来可以在这个功能包的基础上继续实现定时发布、话题通信、服务调用,以及 GPIO 和外部传感器接入。
source /opt/ros/humble/setup.bash
mkdir -p ~/ws_helloworld/src
cd ~/ws_helloworld/src
ros2 pkg create \
--build-type ament_cmake \
--license Apache-2.0 \
--dependencies rclcpp \
--node-name helloworld \
pkg_helloworld_cpp
cd ~/ws_helloworld
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select pkg_helloworld_cpp
source install/setup.bash
ros2 run pkg_helloworld_cpp helloworld