本教程将带你从零开始,动手编写、编译并运行第一个 ROS 程序——经典的'Hello World',用两种主流语言(C++和 Python)分别实现。
一、ROS 开发:两种语言,一套流程
ROS 程序主要使用 C++ 和 Python 实现,两者在 ROS 中地位相当:
- C++:运行效率高,常用于对性能要求高的模块(如传感器处理、核心控制)。
- Python:开发效率高,语法简洁,常用于算法原型验证、工具脚本等。
无论使用哪种语言,编写一个 ROS 程序的核心流程都是固定的,就像一套标准化的'建房子'工序:
- 打地基 -> 创建工作空间(Workspace)并初始化
- 划区域 -> 创建功能包(Package)
- 砌砖块 -> 编写源代码(.cpp 或 .py)
- 画图纸 -> 配置编译规则(CMakeLists.txt 或 package.xml)
- 盖房子 -> 编译并运行
接下来,我们就严格按照这五步,完成我们的第一个 ROS 程序。本文将以 C++ 实现为例,详解每一步,并在最后对比给出 Python 的实现差异。
二、五步搭建:C++版'Hello ROS'
第 1 步:创建工作空间并初始化
工作空间(Workspace)是你存放所有 ROS 代码项目的'项目总文件夹'。 打开终端(Ctrl+Alt+T),执行以下命令创建并进入一个名为 demo01_ws 的工作空间:
mkdir -p ~/demo01_ws/src
cd ~/demo01_ws/
mkdir -p 命令会递归创建目录。src 目录是存放所有功能包源代码的必备子文件夹。
在工作空间根目录(demo01_ws/)下,使用 ROS 内置命令初始化工作空间:
catkin_make
这个命令会自动在 demo01_ws 下创建 build 和 devel 两个文件夹,并生成一系列配置文件。看到大量编译日志并以 100% 结束,即表示初始化成功。
此时你的工作空间结构如下:
demo01_ws/
├── build/ # 编译中间文件,无需关心
├── devel/ # 生成的目标文件和环境设置脚本
└── src/ # 【核心】你的所有功能包源码都放这里
第 2 步:创建功能包
功能包(Package)是 ROS 中软件组织的基本单元,可以理解为你的一个'具体项目'或'功能模块'。 进入 src 目录:
cd src
使用 catkin_create_pkg 命令创建功能包:
catkin_create_pkg helloworld roscpp rospy std_msgs
- helloworld:你的功能包名称。
- roscpp rospy std_msgs:此功能包所依赖的其他 ROS 包。
roscpp:C++ 客户端库,用 C++ 写 ROS 程序必须。rospy:Python 客户端库,用 Python 写 ROS 程序必须。std_msgs:标准消息库,定义了常见的数据类型(如 Int32,String)。
创建成功后,src 目录下会生成一个以你的功能包名命名的文件夹(helloworld/),里面包含了默认的文件结构。


