犀牛派 X1 初体验:在 Ubuntu 22.04 上运行第一个 ROS 2 C++ 节点

是婷婷呀335 2026-09-21 13:35:24

title: "犀牛派 X1 初体验:在 Ubuntu 22.04 上运行第一个 ROS 2 C++ 节点"
date: 2026-09-21
tags:

  • 犀牛派 X1
  • ROS 2
  • Ubuntu 22.04
  • C++

犀牛派 X1 初体验:在 Ubuntu 22.04 上运行第一个 ROS 2 C++ 节点

最近开始上手犀牛派 X1。这块板卡已经成功启动 Ubuntu 22.04.2 LTS,终端显示系统架构为 aarch64。本文记录如何在板卡上创建、编译并运行一个最简单的 ROS 2 C++ 节点,为后续接入传感器、底盘和机器人算法做好准备。

犀牛派 X1 开发板

1. 运行环境

本次使用的环境如下:

  • 硬件:犀牛派 X1
  • 系统:Ubuntu 22.04.2 LTS
  • 架构:ARM64(aarch64
  • ROS 2:Humble
  • 构建工具:colcon
  • 客户端库:rclcpp

犀牛派 X1 上运行的 Ubuntu 终端

开始前,先加载 ROS 2 环境并确认发行版:

source /opt/ros/humble/setup.bash
echo $ROS_DISTRO

终端输出 humble 即可继续。如果希望每次打开终端时自动加载,可以执行:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

2. 创建工作空间和功能包

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

3. 编写 Hello World 节点

打开源文件:

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()

4. 编译功能包

回到工作空间根目录并安装可能缺少的依赖:

cd ~/ws_helloworld
rosdep install --from-paths src --ignore-src -r -y

编译当前功能包:

colcon build --packages-select pkg_helloworld_cpp

看到 Summary: 1 package finished,说明编译成功。此时工作空间中会出现 buildinstalllog 三个目录。

5. 运行节点

每次完成编译后,都需要加载当前工作空间的环境:

source ~/ws_helloworld/install/setup.bash

运行节点:

ros2 run pkg_helloworld_cpp helloworld

正常情况下,终端会输出类似内容:

[INFO] [helloworld]: Hello, Rhino Pi X1!

这说明犀牛派 X1 上的 ROS 2 C++ 开发链路已经跑通:功能包可以创建,源码可以编译,生成的节点也可以被 ROS 2 正确发现和执行。

6. 常见问题

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

7. 小结

至此,我们已经在犀牛派 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
...全文
24 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

7,697

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、IoT、PC 、XR、Auto等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
物联网人工智能开源 企业社区 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧