返回

Ubuntu vscode 配置 c++ 开发环境(三): ROS

前言

本篇笔记介绍如何配置 vscode 来方便进行 ROS 项目的代码智能补全,编译和运行。关于如何 CMake 的配置,可以参考我的上一篇笔记:Ubuntu vscode 配置 c++ 开发环境(二): CMake

前提条件

  • 系统需要安装 ROS
  • vscode 需要安装以下插件:
    • C/C++:主要代码补全
    • ROS:主要提供 ROS 的支持

测试项目

为了测试插件,用 ROS 官方教程中的 talker 和 lister 作为测试项目,目录如下:

catkin_ws
└── src
    ├── beginner_tutorials
    │   ├── CMakeLists.txt
    │   ├── msg
    │   │   └── Num.msg
    │   ├── package.xml
    │   ├── src
    │   │   ├── listener.cpp
    │   │   └── talker.cpp
    │   └── srv
    │       └── AddTwoInts.srv
    └── CMakeLists.txt -> /opt/ros/melodic/share/catkin/cmake/toplevel.cmake

vscode 配置

这里主要是利用微软官方的插件 ROS 结合 C/C++ 来进行配置,大部分操作都已经实现好了,比较简单,下面一一进行介绍

代码补全

由于 ROS 很多头文件不在 /usr/local/include 中,所以我们需要更新 vscode 中的 c_cpp_properties.json 文件来提供头文件搜索目录(关于 c_cpp_properties.json 的说明可以参考之前的笔记)。这里可以通过命令面板 (Ctrl + Shift + p) 运行 ROS:update cpp_properties 来自动更新。并且最好在更新之前先通过: catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1 编译一次项目生成 devel 空间和编译信息,这样 ROS 插件也会自动将本项目中的 include 目录添加进去;,如下所示:

更新 c_cpp_properties.json 之后,还需要手动添加一条信息: "compileCommands": "${workspaceFolder}/build/compile_commands.json"至最后,有需要的话可以将自己项目中的头文件路径也添加进去,最后的文件如下所示:

{
    "configurations": [
        {
            "browse": {
                "databaseFilename": "",
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "/opt/ros/melodic/include/**",
                "/usr/include/**",
                "${workspaceFolder}/devel/include/**"
            ],
            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "gnu++14",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

项目编译和运行 — catkin_make

ROS 插件已经预先定义好了一个 task 用于编译项目,直接通过 Ctrl + Shift + b 运行 catkin_make: build 即可。如果你需要更多选项,也可以通过 Ctrl + Shift + p 运行 Tasks: configure tasks 来生成 tasks.json 自己定义一个 task。关于 tasks.json 怎么使用可以参考之前的笔记。运行节点的话目前感觉 ROS 插件支持得还不是很好,我还是倾向于手动运行节点或者同样利用 task 来运行。对于大型项目用 task 运行预先写好的脚本也是一种选择。

GDB 调试

GDB 调试的部分可以参考这篇博客:ROS——vscode配置,我本身用得比较少,等之后有时间的时候再更新。

结语

目前为止已经我总结了如何利用 vscode 来进行 CMake 以及 ROS 项目的相关配置,之后有时间的话可能学习一下如何配置 C++ 的代码检查。

Built with Hugo
Theme Stack designed by Jimmy