ROS2 C++开发系列01:在ROS2上编写第一个C++ hello word

📺 配套视频ROS2 C++开发系列01:在ROS2上编写第一个C++ hello word

ROS2 C++ 开发基础:环境配置与第一个 Hello World 程序

在开始 ROS 2 的 C++ 开发之旅前,建立规范的编码习惯和稳定的开发环境至关重要。本教程将引导你完成从风格指南学习、编译器安装到编写并运行第一个 C++ 程序的全过程。我们将严格遵循 ROS 2 社区推荐的代码规范,确保你的代码具备良好的可读性和兼容性,为后续复杂的机器人算法开发打下坚实基础。

ROS 2 C++ 风格指南核心规范

ROS 2 的 C++ 风格指南主要基于 Google C++ Style Guide。遵循这一标准不仅能保证代码整洁,还能确保你的项目与 Nav2、MoveIt 2 等主流 ROS 2 包保持风格一致,便于社区协作与维护。

在命名与格式上,需严格遵守以下规则:

  • 缩进与行宽:使用两个空格进行缩进,每行代码字符数限制在 100 个以内。
  • 文件扩展名 :头文件必须使用 .hpp 扩展名,实现文件使用 .cpp 扩展名。
  • 命名约定
    • 变量名采用蛇形命名法(snake_case),例如 robot_speed
    • 类名采用驼峰命名法(CamelCase),例如 RobotController
    • 函数名可使用驼峰命名法或蛇形命名法,具体取决于所依赖的主要开发包风格。

小结:在大型项目中,请优先遵循该项目既有的代码风格。若独立开发,则默认遵循上述 ROS 2 通用规范。

开发环境搭建与编译器检查

首先,我们需要创建一个专门用于存放 C++ 教程代码的工作目录,并验证系统中是否安装了必要的编译工具链。

创建工作目录

打开终端,执行以下命令创建目录并进入:

bash 复制代码
# 创建层级目录 ~/Documents/cpp_tutorial
mkdir -p ~/Documents/cpp_tutorial

# 进入该目录
cd ~/Documents/cpp_tutorial

若你使用 Visual Studio Code (VS Code) 作为编辑器,可在该目录下输入 code . 直接启动编辑器。

检查与安装 C++ 编译器

C++ 代码需要通过编译器转换为机器可执行的二进制文件。大多数 Linux 发行版预装了 GCC (GNU Compiler Collection)。在终端输入以下命令检查版本:

bash 复制代码
# 检查 GCC 版本,若已安装会输出详细版本信息
gcc -v

如果未安装 GCC 或缺少相关构建工具,请执行以下命令进行安装:

bash 复制代码
# 更新软件包列表
sudo apt-get update

# 安装构建必备工具包,包含 gcc, g++, make 等
sudo apt-get install build-essential gdb

在 VS Code 中,还需确保安装了微软官方提供的 C/C++ 扩展插件。通过侧边栏扩展商店搜索 "C++" 并安装由 Microsoft 发布的插件,以支持代码高亮、智能提示及调试功能。

编写第一个 C++ 程序:Hello World

现在我们来编写第一个 C++ 程序。在 VS Code 资源管理器中,右键点击左侧文件区域,选择"新建文件",命名为 hello_world.cpp

代码解析

以下是标准的 Hello World 代码结构:

cpp 复制代码
// 引入输入输出流库,用于使用 cout 打印信息
#include <iostream>

// 主函数,程序的入口点
int main() {
    // std::cout 用于向控制台输出内容
    // << 是插入运算符,std::endl 表示换行并刷新缓冲区
    std::cout << "Hello Automatic Addison" << std::endl;
    
    // 返回 0 表示程序正常结束
    return 0;
}

关键点说明:

  1. #include <iostream> :这是标准输入输出库,允许我们使用 std::cout 进行屏幕输出。
  2. int main() :每个 C++ 程序必须有且仅有一个 main 函数,它是程序执行的起点。
  3. 分号 ;:与 Python 不同,C++ 语句末尾必须加分号,否则编译会报错。
  4. return 0;:按照惯例,主函数返回 0 代表程序成功执行。

编译与运行

方法一:使用 VS Code 内置任务

点击编辑器右上角的"播放"按钮,首次运行时选择 g++ build and debug active file。VS Code 会自动生成 .vscode/tasks.json 配置文件,记录编译命令。此后只需点击播放即可运行。控制台将输出 Hello Automatic Addison

方法二:手动编译运行

在终端中,我们可以直接使用 g++ 命令进行编译:

bash 复制代码
# 编译 hello_world.cpp,-o 指定输出文件名为 hello_world
g++ hello_world.cpp -o hello_world

# 运行生成的可执行文件
./hello_world

优化开发体验:配置 Code Runner

为了更便捷地运行代码,推荐安装 Code Runner 扩展。它允许通过右键菜单快速编译并运行代码片段,无需手动配置复杂的任务文件。

安装与配置

  1. 在 VS Code 扩展商店搜索 "Code Runner" (作者: Jun Han) 并安装。
  2. 打开设置:点击 File -> Preferences -> Settings,点击右上角图标打开 settings.json 文件。
  3. 在花括号内添加以下配置,以优化运行体验:
json 复制代码
{
    // 其他已有配置...
    
    // 运行前自动切换到文件所在目录
    "code-runner.fileDirectoryAsCwd": true,
    
    // 运行前自动保存文件
    "code-runner.saveFileBeforeRun": true,
    
    // 不显示执行消息,保持输出干净
    "code-runner.showExecutionMessage": false,
    
    // 运行前清除之前的输出
    "code-runner.clearPreviousOutput": true,
    
    // 不在集成终端中运行,而是在输出面板显示结果
    "code-runner.runInTerminal": false
}

配置完成后,在 hello_world.cpp 文件中右键选择 "Run Code",即可在底部 "Output" 面板看到运行结果。这种方式比手动编译更快捷,适合日常测试小段代码。

代码注释规范与实战示例

在机器人开发中,代码的可读性与逻辑正确性同等重要。良好的注释能帮助开发者(包括未来的你自己)理解代码意图、变量含义及算法逻辑。

注释类型

C++ 支持两种注释方式:

  1. 单行注释 :使用 //,适用于简短说明。
  2. 多行注释 :使用 /* ... */,适用于段落解释或临时屏蔽代码块。

实战:机器人距离计算

创建一个新文件 robot_commenting.cpp,演示如何结合注释编写逻辑代码:

cpp 复制代码
#include <iostream>

int main() {
    // 定义机器人速度,单位:米/秒
    double speed = 0.5;
    
    // 定义行驶时间,单位:秒
    double time = 10.0;
    
    /* 
     * 计算行驶距离
     * 公式:距离 = 速度 × 时间
     */
    double distance = speed * time;
    
    // 输出计算结果
    std::cout << "The robot moved " << distance << " meters." << std::endl;
    
    return 0;
}

注意事项:

  • 变量声明时需指定类型(如 double),并赋予初始值。
  • 每次修改代码后务必保存(Ctrl + S)。
  • 若使用 Code Runner,确保输出面板清晰;若发现输出异常,检查是否遗漏了分号或拼写错误。

运行上述代码,终端将显示:The robot moved 5 meters.。这表明程序正确读取了变量并执行了乘法运算。

速查表

  • 文件规范 :头文件用 .hpp,源文件用 .cpp;变量用蛇形命名,类名用驼峰命名。
  • 编译命令g++ source.cpp -o output_name 用于手动编译;./output_name 用于运行。
  • 必要库 :使用 #include <iostream>std::cout 进行控制台输出。
  • 语法细节 :每条语句末尾必须加分号 ;main 函数需返回 int 类型(通常为 0)。
  • 工具推荐:安装 VS Code 的 "C/C++" 插件用于调试,安装 "Code Runner" 插件用于快速运行。
  • 注释习惯 :善用 ///* */ 解释复杂逻辑,提升代码可维护性。
相关推荐
我才是一卓6 小时前
2026 Python 入门教程,结合 vscode 和 miniforge/miniconda
开发语言·vscode·python
代码中介商6 小时前
Linux多线程编程完全指南(续):条件变量、读写锁与线程安全函数
linux·开发语言
其实防守也摸鱼6 小时前
CTF密码学综合教学指南--第二章
开发语言·网络·python·安全·网络安全·密码学·ctf
jimy16 小时前
C 语言的 static 关键字作用
c语言·开发语言·算法
FIT2CLOUD飞致云7 小时前
集成MiniMax,移动端适配,SQLBot开源智能问数系统v1.8.0版本发布
ai·数据分析·开源·智能问数·sqlbot
枫叶丹47 小时前
【HarmonyOS 6.0】Camera Kit白平衡API深度解析:让三方应用真正“掌控”色彩
开发语言·华为·harmonyos·视频编解码
xyq20247 小时前
C# 运算符重载
开发语言
echome8887 小时前
Python 生成器与 yield 关键字实战:5 个节省内存的高级用法与性能优化技巧
开发语言·python
starvapour7 小时前
CUDA_VISIBLE_DEVICES与nvidia-smi显卡序号不一致的问题
python·ai·cuda