前言
本篇笔记介绍如何配置 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++ 的代码检查。