在 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,实现代码补全、跳转与提示功能。