跳到主要内容

在 ROS 2 中,节点之间的通信是构建机器人系统的基础能力。无论是传感器数据采集、状态反馈,还是运动控制与导航规划,其核心都离不开节点之间高效、可靠的数据交换。

ROS 2 提供了多种通信机制,其中话题(Topic)通信是最常用、也是最基础的一种方式。话题通信采用发布者(Publisher)与订阅者(Subscriber)模型,使节点之间无需直接相互依赖,从而实现系统的解耦与模块化设计。

本章将通过一个最小化且完整可运行的 C++ 示例,系统介绍 ROS 2 中话题通信的工作原理,并详细讲解如何创建功能包、编写发布者与订阅者节点、配置构建文件以及运行和调试程序,为后续学习更复杂的 ROS 2 系统打下坚实基础。

安装并配置 VS Code

在开始创建 ROS 2 功能包之前,推荐使用 Visual Studio Code(VS Code) 作为开发工具。VS Code 具有良好的跨平台支持,并可通过插件方便地进行 ROS 2 与 C++/Python 开发。

安装 VS Code

在 Ubuntu 系统中,可以通过以下两种方式安装 VS Code:

  • Ubuntu App Center 中搜索 code 并安装

  • 或在终端中执行以下命令进行安装:

sudo snap install code --classic

安装推荐插件

启动 VS Code 后,点击左侧工具栏中的 扩展(Extensions) 图标,搜索并安装以下插件:

  • Robot Developer Extensions for ROS 2

    该插件会自动安装 C++ 和 Python 相关插件,并为 ROS 项目提供语法高亮、代码补全与调试支持。

  • XML Tools 全功能的 XML 语言支持插件,为 VS Code 提供标准的 XML 文件编辑能力。

  • CMake 微软官方推出的 CMake 构建系统辅助工具,为编写 CMakeLists.txt 提供语法支持和智能提示。

配置 IntelliSense(代码智能提示)

为了让 VS Code 正确识别 ROS 2 的头文件、库路径以及 Python 模块,需要对工作空间进行适当配置。

1. 配置 C++ 自动补全路径

使用 VS Code 打开 ROS 2 工作空间(例如 ~/ros2_ws),可通过以下方式之一完成:

  • 在终端中进入工作空间目录后执行:code .

  • 在 VS Code 中选择“打开文件夹”,手动打开 ros2_ws

随后,按下 Ctrl + Shift + P 打开命令面板,输入并选择:

C/C++: Edit Configurations (JSON)

在生成的 .vscode/c_cpp_properties.json 文件中,将 ROS 2 头文件路径加入 includePath

{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/ros/jazzy/include/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}

说明
本书示例基于 ROS 2 Jazzy 发行版。若读者使用的是其他 ROS 2 版本(如 Iron、Humble),请将路径中的 jazzy 替换为对应版本名称。

2. 配置 Python 自动补全路径

再次打开命令面板(Ctrl + Shift + P),选择:

Preferences: Open Workspace Settings (JSON)

在设置文件中添加如下内容(Jazzy 使用 Python 3.12):

"python.autoComplete.extraPaths": [
"/opt/ros/jazzy/lib/python3.12/site-packages"
]

完成上述配置后,VS Code 即可正确识别 ROS 2 的 C++ 头文件和 Python API,实现代码补全、跳转与提示功能。