目录一、前言二、为什么要配置 VS Code 开发 ROS 2三、ROS 2 开发常用 VS Code 插件推荐3.1 基础开发类插件3.2 效率增强类插件3.3 可选插件四、解决 ROS 2 头文件报红问题4.1 找不到头文件4.2 解决方法五、推荐的 .vscode 配置文件5.1 c_cpp_properties.json5.2 settings.json5.3 tasks.json六、安装终端工具 Terminator6.1 安装命令6.2 启动方式七、安装 Git7.1 安装命令7.2 查看帮助八、使用Vscode编写Python代码8.1 打开终端并进入工作空间8.2 创建 Python 功能包8.3 编写 Python 节点代码8.4 编译功能包8.5 运行 Python 节点8.6 在已有 Python 功能包中继续添加可执行文件8.6.1 新建 Python 文件8.6.2 修改 setup.py8.6.3 重新编译并运行九、使用 Vscode 编写 C 代码9.1 打开终端并进入工作空间9.2 创建 C 功能包9.3 编写 C 节点代码9.4 配置 CMakeLists.txt9.5 编译功能包9.6 运行 C 节点9.7 在已有 C 功能包中继续添加可执行文件9.7.1 新建 C 文件9.7.2 修改 CMakeLists.txt9.7.3 重新编译并运行十、总结一、前言在 ROS 2 学习与开发过程中虽然理论上只需要一个文本编辑器和终端就能编写、编译并运行程序但如果想要提升开发效率、减少配置问题、增强代码补全与跳转能力那么搭建一套完整的集成开发环境就非常有必要。在 Ubuntu 22.04 ROS 2 Humble 的开发场景下VS Code是一个非常合适的选择。它轻量、免费、跨平台、插件丰富并且能够很好地支持 Python、C、CMake、Git 以及 ROS 2 项目开发。除此之外终端工具和版本控制工具也是日常开发中不可缺少的部分。这篇文章就结合实际配置过程系统整理一套ROS 2 集成开发环境搭建方案包括 VS Code 安装、插件推荐、配置文件编写、终端工具安装、Git 安装以及使用 VS Code 创建并运行 ROS 2 功能包的完整流程。二、为什么要配置 VS Code 开发 ROS 2ROS 2 项目通常会同时涉及Python 节点开发C 节点开发CMake / colcon 编译package.xml / setup.py / CMakeLists.txt 配置多终端运行与调试Git 版本管理如果不做额外配置VS Code 在打开 ROS 2 工程时往往会出现以下问题#include rclcpp/rclcpp.hpp报红Python 包无法自动补全无法正确跳转到 ROS 2 接口定义编译命令需要每次手动输入工作区中的build / install / log目录影响搜索体验因此提前把 VS Code 配置好可以明显提升编码、调试和维护效率。三、ROS 2 开发常用 VS Code 插件推荐为了让 VS Code 更适合 ROS 2 开发建议至少安装以下几类插件。3.1 基础开发类插件Python用于 Python 语法高亮、调试、补全和格式化。C/C用于 C 语法分析、头文件跳转、智能提示。CMake用于识别和辅助编辑CMakeLists.txt。CMake Tools更方便管理 CMake 工程。3.2 效率增强类插件IntelliSense提供智能补全与跳转支持是写 ROS 2 代码时非常重要的能力来源。Code Runner适合快速执行一些独立代码片段不过在 ROS 2 项目里更多还是配合终端和 colcon 使用。ROS提供对 ROS / ROS 2 工程的额外支持便于识别相关文件类型和开发场景。3.3 可选插件根据个人习惯还可以安装autopep8Python 代码格式化GitLens增强 Git 历史查看能力Error Lens更直观显示报错信息XML / YAML方便编辑 launch、参数、配置文件如果平时 ROS 2 开发以 Python C 混合为主那么Python、C/C、CMake、ROS、IntelliSense这几类插件基本是必装的。四、解决 ROS 2 头文件报红问题4.1 找不到头文件很多人在 VS Code 中打开 ROS 2 C 工程后最常见的问题就是#include rclcpp/rclcpp.hpp会提示找不到头文件。本质原因在于VS Code 没有正确配置 includePath因此 IntelliSense 不知道去哪里查找 ROS 2 的头文件。4.2 解决方法当鼠标移动到报错语句时通常会出现“快速修复”提示可以选择编辑includePath设置。也可以直接在配置文件中加入以下路径includePath: [ ${workspaceFolder}/**, /opt/ros/humble/include/**, /usr/include/** ]如果希望配置更完整一些也可以加入本地安装路径/usr/local/**, /usr/local/include/**这些路径能够让 VS Code 正确识别 ROS 2 的头文件和系统库文件。相关配置思路也与你提供的资料一致。五、推荐的 .vscode 配置文件为了让 ROS 2 工作空间在 VS Code 中具备更好的补全、跳转和编译体验建议在工程根目录下新建.vscode文件夹并配置以下文件。5.1 c_cpp_properties.json这个文件主要用于配置 C/C 头文件搜索路径和编译器信息。{ configurations: [ { browse: { databaseFilename: ${default}, limitSymbolsToIncludedHeaders: false }, includePath: [ /usr/include/**, /usr/local/**, /usr/local/include/**, /opt/ros/humble/include/**, ${workspaceFolder}/** ], name: ROS2, intelliSenseMode: gcc-x64, compilerPath: /usr/bin/gcc, cStandard: gnu11, cppStandard: c17 } ], version: 4 }该配置可以让 VS Code 更好地识别ROS 2 的 C 工程结构与系统头文件。5.2 settings.json这个文件主要用于配置编辑器行为、Python 补全路径、代码格式化以及搜索忽略规则。{ editor.tabSize: 8, editor.rulers: [ 100 ], files.associations: { *.repos: yaml, *.world: xml, *.xacro: xml, chrono: cpp }, python.autoComplete.extraPaths: [ /opt/ros/humble/lib/python3.8/site-packages/ ], python.envFile: ${workspaceFolder}/.env, python.formatting.autopep8Path: /usr/bin/autopep8, python.formatting.autopep8Args: [ --max-line-length100 ], C_Cpp.default.intelliSenseMode: gcc-x64, C_Cpp.formatting: Enabled, search.exclude: { **/node_modules: true, **/bower_components: true, **/*.code-search: true, **/build: true, **/install: true, **/log: true }, python.analysis.extraPaths: [ /opt/ros/humble/lib/python3.8/site-packages/ ], C_Cpp.default.includePath: [ /usr/include/**, /opt/ros/humble/include/**, ${workspaceFolder}/** ], editor.definitionLinkOpensInPeek: true, editor.gotoLocation.alternativeDeclarationCommand: editor.action.goToImplementation, editor.gotoLocation.alternativeImplementationCommand: editor.action.goToImplementation, editor.gotoLocation.alternativeReferenceCommand: editor.action.goToReferences }这一部分配置的核心作用有三点让 VS Code 能识别ROS 2 的 Python 包路径屏蔽build / install / log等无关目录提升搜索体验强化代码跳转、声明跳转和实现跳转能力5.3 tasks.json如果希望在 VS Code 中直接通过快捷键编译 ROS 2 工作空间可以配置任务文件。{ version: 2.0.0, tasks: [ { label: colcon make, detail: Build workspace (default), type: shell, command: colcon build, group: { kind: build, isDefault: true }, problemMatcher: $gcc } ] }之后按下Ctrl Shift B就可以直接触发编译。六、安装终端工具 TerminatorROS 2 开发中经常需要同时打开多个终端例如一个终端运行ros2 daemon一个终端编译工程一个终端启动节点一个终端查看 topic / service / node 信息这时候推荐安装Terminator。6.1 安装命令sudo apt update sudo apt install terminator6.2 启动方式可以在应用菜单中搜索Terminator也可以继续使用默认终端快捷键Ctrl Alt TTerminator 的优点在于支持终端分屏和多标签管理比较适合 ROS 2 这种经常多进程联调的开发场景。七、安装 GitGit 是日常开发中必不可少的工具尤其是 ROS 2 学习过程中经常要从 GitHub 或 Gitee 拉取源码仓库。7.1 安装命令sudo apt install git7.2 查看帮助git --help八、使用Vscode编写Python代码在完成 ROS2 环境安装之后下一步就是正式开始编写代码。本节主要介绍如何在 VS Code 中进入工作空间、创建功能包、编写 Python 节点程序以及在已有功能包中继续添加新的可执行文件。8.1 打开终端并进入工作空间在 VS Code 中可以直接使用快捷键Ctrl ~打开内置终端。这样就不需要频繁切换到系统外部终端开发过程会更加流畅。打开终端后先进入自己的 ROS2 工作空间再切换到src目录。例如cd ~/ros2_ws/src这里的ros2_ws是工作空间名称具体以自己的实际目录为准。之所以进入src目录是因为ROS2 的功能包通常都创建在工作空间下的src文件夹中。后续无论是新建功能包还是管理已有工程代码基本都会在这里完成。8.2 创建 Python 功能包在src目录下可以通过下面的命令创建一个 Python 类型的 ROS2 功能包ros2 pkg create pkg_hellovscode_py --build-type ament_python --dependencies rclpy --node-name helloworld这条命令的含义如下pkg_hellovscode_py功能包名称--build-type ament_python指定该功能包使用 Python 构建方式--dependencies rclpy声明依赖rclpy库--node-name helloworld自动生成一个名为helloworld的节点入口文件执行完成后ROS2 会自动在当前src目录下生成该功能包的标准目录结构。pkg_hellovscode_py/ ├── package.xml ├── setup.py ├── setup.cfg ├── resource/ │ └── pkg_hellovscode_py ├── test/ │ ├── test_copyright.py │ ├── test_flake8.py │ └── test_pep257.py └── pkg_hellovscode_py/ ├── __init__.py └── helloworld.py其中各部分作用如下package.xml功能包的说明文件用于声明功能包名称、版本、依赖关系等信息。setup.pyPython 功能包的安装与入口配置文件后续新增可执行节点时通常需要修改这里。setup.cfgPython 安装相关配置文件。resource/功能包资源标识文件所在目录。test/存放测试相关文件。pkg_hellovscode_py/Python 模块目录实际编写的节点代码通常放在这里。__init__.py用于标识该目录是一个 Python 包。helloworld.py通过--node-name helloworld自动生成的节点文件。8.3 编写 Python 节点代码创建好功能包之后可以在 VS Code 左侧资源管理器中找到该包并打开自动生成的 Python 文件进行编辑。这里编写一个最简单的 ROS2 Python 节点用来输出一条日志信息。helloworld.py示例代码如下import rclpy def main(argsNone): # 初始化 ROS2 rclpy.init(argsargs) # 创建节点 node rclpy.create_node(helloworld_vscode_node) # 输出日志信息 node.get_logger().info(hello vscode!) # 关闭 ROS2 rclpy.shutdown() if __name__ __main__: main()这段代码的功能比较简单执行后会创建一个名为helloworld_vscode_node的节点并在终端中输出hello vscode!对于初学者来说可以先重点理解以下几个部分rclpy.init(argsargs)初始化 ROS2 Python 接口rclpy.create_node(...)创建一个节点对象node.get_logger().info(...)输出日志信息rclpy.shutdown()程序结束时关闭 ROS28.4 编译功能包在完成代码编写之后需要返回到工作空间根目录进行编译。假设当前位于src目录那么可以先执行cd .. // 然后使用 colcon build 进行编译 colcon build // 如果功能包没有报错说明编译成功。8.5 运行 Python 节点编译完成后还需要先刷新环境变量source install/setup.bash然后通过ros2 run命令运行刚刚编写的节点ros2 run pkg_hellovscode_py helloworld运行成功后就可以在终端中看到节点输出的信息。8.6 在已有 Python 功能包中继续添加可执行文件在实际开发中一个功能包往往不只包含一个节点程序。例如前面已经有一个helloworld现在还想在同一个功能包里再增加一个新的可执行文件helloworld2这时就需要额外进行配置。8.6.1 新建 Python 文件可以先复制已有的helloworld.py然后重命名为helloworld2.py。修改后的代码如下import rclpy def main(argsNone): # 初始化 ROS2 rclpy.init(argsargs) # 创建节点 node rclpy.create_node(helloworld_vscode_node) # 输出日志信息 node.get_logger().info(hello vscode!111) # 关闭 ROS2 rclpy.shutdown() if __name__ __main__: main()这个文件本质上也是一个独立的 ROS2 Python 节点只不过输出内容不同。8.6.2 修改 setup.py如果只是新增了 Python 文件但没有在setup.py中注册入口那么 ROS2 是无法直接运行它的。因此需要打开功能包中的setup.py文件找到entry_points部分并修改为entry_points{ console_scripts: [ helloworld pkg_hellovscode_py.helloworld:main, helloworld2 pkg_hellovscode_py.helloworld2:main ], },这里的含义是helloworld对应helloworld.py中的main函数helloworld2对应helloworld2.py中的main函数也就是说每增加一个可执行 Python 节点都要在setup.py的console_scripts中增加一条映射关系。8.6.3 重新编译并运行修改完成后重新在工作空间根目录执行编译colcon build然后刷新环境变量source install/setup.bash最后运行新的节点ros2 run pkg_hellovscode_py helloworld2如果终端正常输出对应内容就说明新的可执行文件已经配置成功。九、使用 Vscode 编写 C 代码在完成 ROS2 环境安装之后除了可以使用 Python 编写节点程序外也可以使用 C 进行开发。在 ROS2 中C 通常通过rclcpp接口完成节点创建、消息通信和功能扩展。相较于 PythonC 在执行效率、工程部署和大型项目开发中也更加常见。本节主要介绍如何在 VS Code 中进入工作空间、创建 C 功能包、编写 C 节点程序以及在已有功能包中继续添加新的可执行文件。9.1 打开终端并进入工作空间在 VS Code 中可以直接使用快捷键Ctrl ~打开内置终端。这样就不需要频繁切换到系统外部终端开发过程会更加方便。打开终端后先进入自己的 ROS2 工作空间再切换到src目录。例如cd ~/ros2_ws/src这里的ros2_ws是工作空间名称具体以自己的实际目录为准。之所以进入src目录是因为 ROS2 的功能包通常都创建在工作空间下的src文件夹中。后续无论是新建功能包还是管理已有工程代码基本都会在这里完成。9.2 创建 C 功能包在src目录下可以通过下面的命令创建一个 C 类型的 ROS2 功能包ros2 pkg create pkg_hellovscode_cpp --build-type ament_cmake --dependencies rclcpp这条命令的含义如下pkg_hellovscode_cpp功能包名称--build-type ament_cmake指定该功能包使用 CMake 构建方式--dependencies rclcpp声明依赖rclcpp库执行完成后ROS2 会自动在当前src目录下生成该功能包的标准目录结构。pkg_hellovscode_cpp/ ├── CMakeLists.txt ├── package.xml ├── include/ │ └── pkg_hellovscode_cpp/ └── src/其中各部分作用如下CMakeLists.txtC 功能包最核心的构建配置文件用于配置编译规则、依赖项和安装目标等内容。package.xml功能包的说明文件用于声明功能包名称、版本、依赖关系等信息。include/头文件目录后续如果有自定义类或接口文件通常放在这里。src/源文件目录实际编写的 C 节点代码通常放在这里。与 Python 功能包不同C 功能包默认不会自动生成节点源文件因此需要我们自己在src目录下新建.cpp文件。9.3 编写 C 节点代码创建好功能包之后可以在 VS Code 左侧资源管理器中找到该包并在src目录下新建一个hellovscode.cpp文件。这里编写一个最简单的 ROS2 C 节点用来输出一条日志信息。hellovscode.cpp示例代码如下#include rclcpp/rclcpp.hpp int main(int argc, char ** argv) { rclcpp::init(argc, argv); auto node rclcpp::Node::make_shared(hello_vscode_node_cpp); RCLCPP_INFO(node-get_logger(), hello vscode......); rclcpp::shutdown(); return 0; }这段代码的功能比较简单执行后会创建一个名为hello_vscode_node_cpp的节点并在终端中输出hello vscode......对于初学者来说可以先重点理解以下几个部分rclcpp::init(argc, argv)初始化 ROS2 C 接口rclcpp::Node::make_shared(...)创建一个节点对象RCLCPP_INFO(...)输出日志信息rclcpp::shutdown()程序结束时关闭 ROS29.4 配置 CMakeLists.txt由于 C 节点需要通过 CMake 进行编译因此在编写完源文件后还需要修改功能包中的CMakeLists.txt文件。在文件中增加以下内容add_executable(hellovscode src/hellovscode.cpp) ament_target_dependencies( hellovscode rclcpp ) install(TARGETS hellovscode DESTINATION lib/${PROJECT_NAME} )这几部分的作用分别如下add_executable(hellovscode src/hellovscode.cpp)声明生成一个名为hellovscode的可执行文件对应源文件为src/hellovscode.cppament_target_dependencies(...)为该可执行文件添加依赖库这里依赖的是rclcppinstall(...)指定编译后可执行文件的安装路径ROS2 运行节点时会从这个位置查找也就是说在 ROS2 的 C 功能包中每增加一个节点源文件通常都需要在CMakeLists.txt中增加对应的编译和安装配置。9.5 编译功能包在完成代码编写和CMakeLists.txt配置之后需要返回到工作空间根目录进行编译。假设当前位于src目录那么可以先执行cd ..然后使用colcon build进行编译colcon build如果功能包没有报错说明编译成功。9.6 运行 C 节点编译完成后还需要先刷新环境变量source install/setup.bash然后通过ros2 run命令运行刚刚编写的节点ros2 run pkg_hellovscode_cpp hellovscode运行成功后就可以在终端中看到节点输出的信息。9.7 在已有 C 功能包中继续添加可执行文件在实际开发中一个功能包往往不只包含一个节点程序。例如前面已经有一个hellovscode现在还想在同一个功能包里再增加一个新的可执行文件hellovscode2这时就需要额外进行配置。9.7.1 新建 C 文件可以先在src目录下再新建一个hellovscode2.cpp文件。代码如下#include rclcpp/rclcpp.hpp int main(int argc, char ** argv) { rclcpp::init(argc, argv); auto node rclcpp::Node::make_shared(hello_vscode_node_cpp); RCLCPP_INFO(node-get_logger(), hello vscode2......); rclcpp::shutdown(); return 0; }这个文件本质上也是一个独立的 ROS2 C 节点只不过输出内容不同。9.7.2 修改 CMakeLists.txt如果只是新增了.cpp文件但没有在CMakeLists.txt中注册对应的可执行文件那么 ROS2 是无法直接运行它的。因此需要打开功能包中的CMakeLists.txt文件加入新的配置内容add_executable(hellovscode src/hellovscode.cpp) add_executable(hellovscode2 src/hellovscode2.cpp) ament_target_dependencies( hellovscode rclcpp ) ament_target_dependencies( hellovscode2 rclcpp ) install(TARGETS hellovscode DESTINATION lib/${PROJECT_NAME} ) install(TARGETS hellovscode2 DESTINATION lib/${PROJECT_NAME} )这里的含义是hellovscode对应hellovscode.cpphellovscode2对应hellovscode2.cpp也就是说每增加一个可执行 C 节点都要在CMakeLists.txt中增加一组对应的配置包括add_executable(...)ament_target_dependencies(...)install(...)9.7.3 重新编译并运行修改完成后重新在工作空间根目录执行编译colcon build然后刷新环境变量source install/setup.bash最后运行新的节点ros2 run pkg_hellovscode_cpp hellovscode2如果终端正常输出对应内容就说明新的可执行文件已经配置成功。十、总结在 Ubuntu 22.04 下进行 ROS 2 Humble 开发时VS Code 完全可以作为一款高效且实用的主力 IDE。它本身足够轻量配合 Python、C/C、CMake、ROS 等常用插件并结合合理的.vscode配置文件能够较好地解决 ROS 2 开发过程中常见的头文件报红、代码跳转失效、Python 包无法识别以及编译操作繁琐等问题。其中c_cpp_properties.json、settings.json和tasks.json等配置文件的完善对于提升工程开发体验尤为重要。除此之外如果再结合 Terminator 进行多终端管理、使用 Git 管理项目版本并掌握 Python 与 C 功能包的创建方法以及多可执行文件的配置方式就基本能够搭建起一套较为完整的 ROS 2 本地开发环境。这样的环境不仅能够满足入门阶段的学习需求也能够为后续更深入的项目开发、系统调试和工程管理打下良好基础。对于刚开始接触 ROS 2 的同学来说开发环境的配置虽然在前期会花费一定时间但这一步非常值得。因为一旦环境搭建完善后续无论是编写节点、调试接口、管理工程还是阅读源码、开展功能扩展整体效率都会明显提高。建议尽量在学习初期把开发环境、工具链和基本工作流一次性整理清楚这样在后续学习 ROS 2 节点通信机制、功能包开发以及系统集成时就可以把更多精力集中在技术本身而不是反复被环境问题干扰。
Ubuntu 22.04 下使用 VS Code 搭建 ROS 2 Humble 集成开发环境
目录一、前言二、为什么要配置 VS Code 开发 ROS 2三、ROS 2 开发常用 VS Code 插件推荐3.1 基础开发类插件3.2 效率增强类插件3.3 可选插件四、解决 ROS 2 头文件报红问题4.1 找不到头文件4.2 解决方法五、推荐的 .vscode 配置文件5.1 c_cpp_properties.json5.2 settings.json5.3 tasks.json六、安装终端工具 Terminator6.1 安装命令6.2 启动方式七、安装 Git7.1 安装命令7.2 查看帮助八、使用Vscode编写Python代码8.1 打开终端并进入工作空间8.2 创建 Python 功能包8.3 编写 Python 节点代码8.4 编译功能包8.5 运行 Python 节点8.6 在已有 Python 功能包中继续添加可执行文件8.6.1 新建 Python 文件8.6.2 修改 setup.py8.6.3 重新编译并运行九、使用 Vscode 编写 C 代码9.1 打开终端并进入工作空间9.2 创建 C 功能包9.3 编写 C 节点代码9.4 配置 CMakeLists.txt9.5 编译功能包9.6 运行 C 节点9.7 在已有 C 功能包中继续添加可执行文件9.7.1 新建 C 文件9.7.2 修改 CMakeLists.txt9.7.3 重新编译并运行十、总结一、前言在 ROS 2 学习与开发过程中虽然理论上只需要一个文本编辑器和终端就能编写、编译并运行程序但如果想要提升开发效率、减少配置问题、增强代码补全与跳转能力那么搭建一套完整的集成开发环境就非常有必要。在 Ubuntu 22.04 ROS 2 Humble 的开发场景下VS Code是一个非常合适的选择。它轻量、免费、跨平台、插件丰富并且能够很好地支持 Python、C、CMake、Git 以及 ROS 2 项目开发。除此之外终端工具和版本控制工具也是日常开发中不可缺少的部分。这篇文章就结合实际配置过程系统整理一套ROS 2 集成开发环境搭建方案包括 VS Code 安装、插件推荐、配置文件编写、终端工具安装、Git 安装以及使用 VS Code 创建并运行 ROS 2 功能包的完整流程。二、为什么要配置 VS Code 开发 ROS 2ROS 2 项目通常会同时涉及Python 节点开发C 节点开发CMake / colcon 编译package.xml / setup.py / CMakeLists.txt 配置多终端运行与调试Git 版本管理如果不做额外配置VS Code 在打开 ROS 2 工程时往往会出现以下问题#include rclcpp/rclcpp.hpp报红Python 包无法自动补全无法正确跳转到 ROS 2 接口定义编译命令需要每次手动输入工作区中的build / install / log目录影响搜索体验因此提前把 VS Code 配置好可以明显提升编码、调试和维护效率。三、ROS 2 开发常用 VS Code 插件推荐为了让 VS Code 更适合 ROS 2 开发建议至少安装以下几类插件。3.1 基础开发类插件Python用于 Python 语法高亮、调试、补全和格式化。C/C用于 C 语法分析、头文件跳转、智能提示。CMake用于识别和辅助编辑CMakeLists.txt。CMake Tools更方便管理 CMake 工程。3.2 效率增强类插件IntelliSense提供智能补全与跳转支持是写 ROS 2 代码时非常重要的能力来源。Code Runner适合快速执行一些独立代码片段不过在 ROS 2 项目里更多还是配合终端和 colcon 使用。ROS提供对 ROS / ROS 2 工程的额外支持便于识别相关文件类型和开发场景。3.3 可选插件根据个人习惯还可以安装autopep8Python 代码格式化GitLens增强 Git 历史查看能力Error Lens更直观显示报错信息XML / YAML方便编辑 launch、参数、配置文件如果平时 ROS 2 开发以 Python C 混合为主那么Python、C/C、CMake、ROS、IntelliSense这几类插件基本是必装的。四、解决 ROS 2 头文件报红问题4.1 找不到头文件很多人在 VS Code 中打开 ROS 2 C 工程后最常见的问题就是#include rclcpp/rclcpp.hpp会提示找不到头文件。本质原因在于VS Code 没有正确配置 includePath因此 IntelliSense 不知道去哪里查找 ROS 2 的头文件。4.2 解决方法当鼠标移动到报错语句时通常会出现“快速修复”提示可以选择编辑includePath设置。也可以直接在配置文件中加入以下路径includePath: [ ${workspaceFolder}/**, /opt/ros/humble/include/**, /usr/include/** ]如果希望配置更完整一些也可以加入本地安装路径/usr/local/**, /usr/local/include/**这些路径能够让 VS Code 正确识别 ROS 2 的头文件和系统库文件。相关配置思路也与你提供的资料一致。五、推荐的 .vscode 配置文件为了让 ROS 2 工作空间在 VS Code 中具备更好的补全、跳转和编译体验建议在工程根目录下新建.vscode文件夹并配置以下文件。5.1 c_cpp_properties.json这个文件主要用于配置 C/C 头文件搜索路径和编译器信息。{ configurations: [ { browse: { databaseFilename: ${default}, limitSymbolsToIncludedHeaders: false }, includePath: [ /usr/include/**, /usr/local/**, /usr/local/include/**, /opt/ros/humble/include/**, ${workspaceFolder}/** ], name: ROS2, intelliSenseMode: gcc-x64, compilerPath: /usr/bin/gcc, cStandard: gnu11, cppStandard: c17 } ], version: 4 }该配置可以让 VS Code 更好地识别ROS 2 的 C 工程结构与系统头文件。5.2 settings.json这个文件主要用于配置编辑器行为、Python 补全路径、代码格式化以及搜索忽略规则。{ editor.tabSize: 8, editor.rulers: [ 100 ], files.associations: { *.repos: yaml, *.world: xml, *.xacro: xml, chrono: cpp }, python.autoComplete.extraPaths: [ /opt/ros/humble/lib/python3.8/site-packages/ ], python.envFile: ${workspaceFolder}/.env, python.formatting.autopep8Path: /usr/bin/autopep8, python.formatting.autopep8Args: [ --max-line-length100 ], C_Cpp.default.intelliSenseMode: gcc-x64, C_Cpp.formatting: Enabled, search.exclude: { **/node_modules: true, **/bower_components: true, **/*.code-search: true, **/build: true, **/install: true, **/log: true }, python.analysis.extraPaths: [ /opt/ros/humble/lib/python3.8/site-packages/ ], C_Cpp.default.includePath: [ /usr/include/**, /opt/ros/humble/include/**, ${workspaceFolder}/** ], editor.definitionLinkOpensInPeek: true, editor.gotoLocation.alternativeDeclarationCommand: editor.action.goToImplementation, editor.gotoLocation.alternativeImplementationCommand: editor.action.goToImplementation, editor.gotoLocation.alternativeReferenceCommand: editor.action.goToReferences }这一部分配置的核心作用有三点让 VS Code 能识别ROS 2 的 Python 包路径屏蔽build / install / log等无关目录提升搜索体验强化代码跳转、声明跳转和实现跳转能力5.3 tasks.json如果希望在 VS Code 中直接通过快捷键编译 ROS 2 工作空间可以配置任务文件。{ version: 2.0.0, tasks: [ { label: colcon make, detail: Build workspace (default), type: shell, command: colcon build, group: { kind: build, isDefault: true }, problemMatcher: $gcc } ] }之后按下Ctrl Shift B就可以直接触发编译。六、安装终端工具 TerminatorROS 2 开发中经常需要同时打开多个终端例如一个终端运行ros2 daemon一个终端编译工程一个终端启动节点一个终端查看 topic / service / node 信息这时候推荐安装Terminator。6.1 安装命令sudo apt update sudo apt install terminator6.2 启动方式可以在应用菜单中搜索Terminator也可以继续使用默认终端快捷键Ctrl Alt TTerminator 的优点在于支持终端分屏和多标签管理比较适合 ROS 2 这种经常多进程联调的开发场景。七、安装 GitGit 是日常开发中必不可少的工具尤其是 ROS 2 学习过程中经常要从 GitHub 或 Gitee 拉取源码仓库。7.1 安装命令sudo apt install git7.2 查看帮助git --help八、使用Vscode编写Python代码在完成 ROS2 环境安装之后下一步就是正式开始编写代码。本节主要介绍如何在 VS Code 中进入工作空间、创建功能包、编写 Python 节点程序以及在已有功能包中继续添加新的可执行文件。8.1 打开终端并进入工作空间在 VS Code 中可以直接使用快捷键Ctrl ~打开内置终端。这样就不需要频繁切换到系统外部终端开发过程会更加流畅。打开终端后先进入自己的 ROS2 工作空间再切换到src目录。例如cd ~/ros2_ws/src这里的ros2_ws是工作空间名称具体以自己的实际目录为准。之所以进入src目录是因为ROS2 的功能包通常都创建在工作空间下的src文件夹中。后续无论是新建功能包还是管理已有工程代码基本都会在这里完成。8.2 创建 Python 功能包在src目录下可以通过下面的命令创建一个 Python 类型的 ROS2 功能包ros2 pkg create pkg_hellovscode_py --build-type ament_python --dependencies rclpy --node-name helloworld这条命令的含义如下pkg_hellovscode_py功能包名称--build-type ament_python指定该功能包使用 Python 构建方式--dependencies rclpy声明依赖rclpy库--node-name helloworld自动生成一个名为helloworld的节点入口文件执行完成后ROS2 会自动在当前src目录下生成该功能包的标准目录结构。pkg_hellovscode_py/ ├── package.xml ├── setup.py ├── setup.cfg ├── resource/ │ └── pkg_hellovscode_py ├── test/ │ ├── test_copyright.py │ ├── test_flake8.py │ └── test_pep257.py └── pkg_hellovscode_py/ ├── __init__.py └── helloworld.py其中各部分作用如下package.xml功能包的说明文件用于声明功能包名称、版本、依赖关系等信息。setup.pyPython 功能包的安装与入口配置文件后续新增可执行节点时通常需要修改这里。setup.cfgPython 安装相关配置文件。resource/功能包资源标识文件所在目录。test/存放测试相关文件。pkg_hellovscode_py/Python 模块目录实际编写的节点代码通常放在这里。__init__.py用于标识该目录是一个 Python 包。helloworld.py通过--node-name helloworld自动生成的节点文件。8.3 编写 Python 节点代码创建好功能包之后可以在 VS Code 左侧资源管理器中找到该包并打开自动生成的 Python 文件进行编辑。这里编写一个最简单的 ROS2 Python 节点用来输出一条日志信息。helloworld.py示例代码如下import rclpy def main(argsNone): # 初始化 ROS2 rclpy.init(argsargs) # 创建节点 node rclpy.create_node(helloworld_vscode_node) # 输出日志信息 node.get_logger().info(hello vscode!) # 关闭 ROS2 rclpy.shutdown() if __name__ __main__: main()这段代码的功能比较简单执行后会创建一个名为helloworld_vscode_node的节点并在终端中输出hello vscode!对于初学者来说可以先重点理解以下几个部分rclpy.init(argsargs)初始化 ROS2 Python 接口rclpy.create_node(...)创建一个节点对象node.get_logger().info(...)输出日志信息rclpy.shutdown()程序结束时关闭 ROS28.4 编译功能包在完成代码编写之后需要返回到工作空间根目录进行编译。假设当前位于src目录那么可以先执行cd .. // 然后使用 colcon build 进行编译 colcon build // 如果功能包没有报错说明编译成功。8.5 运行 Python 节点编译完成后还需要先刷新环境变量source install/setup.bash然后通过ros2 run命令运行刚刚编写的节点ros2 run pkg_hellovscode_py helloworld运行成功后就可以在终端中看到节点输出的信息。8.6 在已有 Python 功能包中继续添加可执行文件在实际开发中一个功能包往往不只包含一个节点程序。例如前面已经有一个helloworld现在还想在同一个功能包里再增加一个新的可执行文件helloworld2这时就需要额外进行配置。8.6.1 新建 Python 文件可以先复制已有的helloworld.py然后重命名为helloworld2.py。修改后的代码如下import rclpy def main(argsNone): # 初始化 ROS2 rclpy.init(argsargs) # 创建节点 node rclpy.create_node(helloworld_vscode_node) # 输出日志信息 node.get_logger().info(hello vscode!111) # 关闭 ROS2 rclpy.shutdown() if __name__ __main__: main()这个文件本质上也是一个独立的 ROS2 Python 节点只不过输出内容不同。8.6.2 修改 setup.py如果只是新增了 Python 文件但没有在setup.py中注册入口那么 ROS2 是无法直接运行它的。因此需要打开功能包中的setup.py文件找到entry_points部分并修改为entry_points{ console_scripts: [ helloworld pkg_hellovscode_py.helloworld:main, helloworld2 pkg_hellovscode_py.helloworld2:main ], },这里的含义是helloworld对应helloworld.py中的main函数helloworld2对应helloworld2.py中的main函数也就是说每增加一个可执行 Python 节点都要在setup.py的console_scripts中增加一条映射关系。8.6.3 重新编译并运行修改完成后重新在工作空间根目录执行编译colcon build然后刷新环境变量source install/setup.bash最后运行新的节点ros2 run pkg_hellovscode_py helloworld2如果终端正常输出对应内容就说明新的可执行文件已经配置成功。九、使用 Vscode 编写 C 代码在完成 ROS2 环境安装之后除了可以使用 Python 编写节点程序外也可以使用 C 进行开发。在 ROS2 中C 通常通过rclcpp接口完成节点创建、消息通信和功能扩展。相较于 PythonC 在执行效率、工程部署和大型项目开发中也更加常见。本节主要介绍如何在 VS Code 中进入工作空间、创建 C 功能包、编写 C 节点程序以及在已有功能包中继续添加新的可执行文件。9.1 打开终端并进入工作空间在 VS Code 中可以直接使用快捷键Ctrl ~打开内置终端。这样就不需要频繁切换到系统外部终端开发过程会更加方便。打开终端后先进入自己的 ROS2 工作空间再切换到src目录。例如cd ~/ros2_ws/src这里的ros2_ws是工作空间名称具体以自己的实际目录为准。之所以进入src目录是因为 ROS2 的功能包通常都创建在工作空间下的src文件夹中。后续无论是新建功能包还是管理已有工程代码基本都会在这里完成。9.2 创建 C 功能包在src目录下可以通过下面的命令创建一个 C 类型的 ROS2 功能包ros2 pkg create pkg_hellovscode_cpp --build-type ament_cmake --dependencies rclcpp这条命令的含义如下pkg_hellovscode_cpp功能包名称--build-type ament_cmake指定该功能包使用 CMake 构建方式--dependencies rclcpp声明依赖rclcpp库执行完成后ROS2 会自动在当前src目录下生成该功能包的标准目录结构。pkg_hellovscode_cpp/ ├── CMakeLists.txt ├── package.xml ├── include/ │ └── pkg_hellovscode_cpp/ └── src/其中各部分作用如下CMakeLists.txtC 功能包最核心的构建配置文件用于配置编译规则、依赖项和安装目标等内容。package.xml功能包的说明文件用于声明功能包名称、版本、依赖关系等信息。include/头文件目录后续如果有自定义类或接口文件通常放在这里。src/源文件目录实际编写的 C 节点代码通常放在这里。与 Python 功能包不同C 功能包默认不会自动生成节点源文件因此需要我们自己在src目录下新建.cpp文件。9.3 编写 C 节点代码创建好功能包之后可以在 VS Code 左侧资源管理器中找到该包并在src目录下新建一个hellovscode.cpp文件。这里编写一个最简单的 ROS2 C 节点用来输出一条日志信息。hellovscode.cpp示例代码如下#include rclcpp/rclcpp.hpp int main(int argc, char ** argv) { rclcpp::init(argc, argv); auto node rclcpp::Node::make_shared(hello_vscode_node_cpp); RCLCPP_INFO(node-get_logger(), hello vscode......); rclcpp::shutdown(); return 0; }这段代码的功能比较简单执行后会创建一个名为hello_vscode_node_cpp的节点并在终端中输出hello vscode......对于初学者来说可以先重点理解以下几个部分rclcpp::init(argc, argv)初始化 ROS2 C 接口rclcpp::Node::make_shared(...)创建一个节点对象RCLCPP_INFO(...)输出日志信息rclcpp::shutdown()程序结束时关闭 ROS29.4 配置 CMakeLists.txt由于 C 节点需要通过 CMake 进行编译因此在编写完源文件后还需要修改功能包中的CMakeLists.txt文件。在文件中增加以下内容add_executable(hellovscode src/hellovscode.cpp) ament_target_dependencies( hellovscode rclcpp ) install(TARGETS hellovscode DESTINATION lib/${PROJECT_NAME} )这几部分的作用分别如下add_executable(hellovscode src/hellovscode.cpp)声明生成一个名为hellovscode的可执行文件对应源文件为src/hellovscode.cppament_target_dependencies(...)为该可执行文件添加依赖库这里依赖的是rclcppinstall(...)指定编译后可执行文件的安装路径ROS2 运行节点时会从这个位置查找也就是说在 ROS2 的 C 功能包中每增加一个节点源文件通常都需要在CMakeLists.txt中增加对应的编译和安装配置。9.5 编译功能包在完成代码编写和CMakeLists.txt配置之后需要返回到工作空间根目录进行编译。假设当前位于src目录那么可以先执行cd ..然后使用colcon build进行编译colcon build如果功能包没有报错说明编译成功。9.6 运行 C 节点编译完成后还需要先刷新环境变量source install/setup.bash然后通过ros2 run命令运行刚刚编写的节点ros2 run pkg_hellovscode_cpp hellovscode运行成功后就可以在终端中看到节点输出的信息。9.7 在已有 C 功能包中继续添加可执行文件在实际开发中一个功能包往往不只包含一个节点程序。例如前面已经有一个hellovscode现在还想在同一个功能包里再增加一个新的可执行文件hellovscode2这时就需要额外进行配置。9.7.1 新建 C 文件可以先在src目录下再新建一个hellovscode2.cpp文件。代码如下#include rclcpp/rclcpp.hpp int main(int argc, char ** argv) { rclcpp::init(argc, argv); auto node rclcpp::Node::make_shared(hello_vscode_node_cpp); RCLCPP_INFO(node-get_logger(), hello vscode2......); rclcpp::shutdown(); return 0; }这个文件本质上也是一个独立的 ROS2 C 节点只不过输出内容不同。9.7.2 修改 CMakeLists.txt如果只是新增了.cpp文件但没有在CMakeLists.txt中注册对应的可执行文件那么 ROS2 是无法直接运行它的。因此需要打开功能包中的CMakeLists.txt文件加入新的配置内容add_executable(hellovscode src/hellovscode.cpp) add_executable(hellovscode2 src/hellovscode2.cpp) ament_target_dependencies( hellovscode rclcpp ) ament_target_dependencies( hellovscode2 rclcpp ) install(TARGETS hellovscode DESTINATION lib/${PROJECT_NAME} ) install(TARGETS hellovscode2 DESTINATION lib/${PROJECT_NAME} )这里的含义是hellovscode对应hellovscode.cpphellovscode2对应hellovscode2.cpp也就是说每增加一个可执行 C 节点都要在CMakeLists.txt中增加一组对应的配置包括add_executable(...)ament_target_dependencies(...)install(...)9.7.3 重新编译并运行修改完成后重新在工作空间根目录执行编译colcon build然后刷新环境变量source install/setup.bash最后运行新的节点ros2 run pkg_hellovscode_cpp hellovscode2如果终端正常输出对应内容就说明新的可执行文件已经配置成功。十、总结在 Ubuntu 22.04 下进行 ROS 2 Humble 开发时VS Code 完全可以作为一款高效且实用的主力 IDE。它本身足够轻量配合 Python、C/C、CMake、ROS 等常用插件并结合合理的.vscode配置文件能够较好地解决 ROS 2 开发过程中常见的头文件报红、代码跳转失效、Python 包无法识别以及编译操作繁琐等问题。其中c_cpp_properties.json、settings.json和tasks.json等配置文件的完善对于提升工程开发体验尤为重要。除此之外如果再结合 Terminator 进行多终端管理、使用 Git 管理项目版本并掌握 Python 与 C 功能包的创建方法以及多可执行文件的配置方式就基本能够搭建起一套较为完整的 ROS 2 本地开发环境。这样的环境不仅能够满足入门阶段的学习需求也能够为后续更深入的项目开发、系统调试和工程管理打下良好基础。对于刚开始接触 ROS 2 的同学来说开发环境的配置虽然在前期会花费一定时间但这一步非常值得。因为一旦环境搭建完善后续无论是编写节点、调试接口、管理工程还是阅读源码、开展功能扩展整体效率都会明显提高。建议尽量在学习初期把开发环境、工具链和基本工作流一次性整理清楚这样在后续学习 ROS 2 节点通信机制、功能包开发以及系统集成时就可以把更多精力集中在技术本身而不是反复被环境问题干扰。