1. 插件
- C / C++ (vscode官方cpp插件)
- CMake (CMakeLists.txt文件)
- CMake Tools
- vscode-icons (区分不同格式的文件)
- Bracket Pair Colorizer (区分不同的括号)
- ROS (调试ROS)
2.自动补全
ROS自动补全需要在.vscode
文件下配置c_cpp_properties.json
文件。C / C ++扩展使用它来搜索节点引用的所有包含文件夹,其内容如下:
{
"configurations": [
{
"name": "Linux",
"browse": {
"databaseFilename": "",
"limitSymbolsToIncludedHeaders": true
},
"includePath": [
"${workspaceFolder}/devel/include",
"/opt/ros/melodic/include",
"/usr/include/**",
"${workspaceFolder}/**"
],
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
主要配置头文件的查找地址includePath
,"${workspaceFolder}/devel/include"
主要包含ROS中的自定义消息、服务等头文件。
嫌麻烦的,可以在vscode默认的setting.json
文件写入以下内容,那么打开新的ros工程,无需配手动c_cpp_properties.json
文件,系统会自动生成相应的配置项。
"C_Cpp.default.includePath": [
"${workspaceFolder}/**",
"/opt/ros/kinetic/include/**",
"/usr/local/include/**",
"/usr/include/**"
],
"C_Cpp.default.browse.path": [
"${workspaceFolder}/**",
"/opt/ros/kinetic/include/**",
"/usr/local/include/**",
"/usr/include/**"
]
3.编译配置
快捷编译ROS中的包需要配置tasks.json
文件,自己在.vscod
e文件夹下创建tasks.json
文件,其内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "ROS: catkin_make",
"type": "shell",
"command": "catkin_make",
"args": [
// "--pkg",
// "your package name",
"-j8",
"-DCMAKE_BUILD_TYPE=Debug",
// "-DCMAKE_EXPORT_COMPILE_COMMANDS=1",
// "-DCMAKE_CXX_STANDARD=14"
],
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
"label":该任务的名称,随意取;
"type": 任务的类型,可设置成shell
和process
。前者将任务当成命令,启动终端运行,后者直接运行。
"command":命令
"args":command
的参数,"--pkg"
单独编译catkin_ws中的某个包,"-DCMAKE_BUILD_TYPE=Debug"
编译类型为Debug,方便后续的调试,如果需要进行调试,需要设置为Debug
模式,并且要检查相应package
中的CMakeLists.txt
中有没有设置成Release
模式,CMake
中txt的设置优先级是最高的。
可以在需要调试的package
中的CMakeLists.txt
加入以下内容:
# debug
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
4.调试ROS节点
调试ROS节点需要配置.vscode
下的launch.json
,共有两种方式,第一种以ROS中的launch
文件启动节点,主要用于调试的node参数较多,如movebase节点,其launch.json
如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "movebase.launch",
"type": "ros",
"request": "launch",
"target": "/home/chelizi/biyesehji_ws/src/rbx1/rbx1_bringup/launch/movebase.launch"
}
]
}
"target"
:launch
文件所在的绝对路径
第二种方式以二进制文件的方式启动节点,若该节点无需太多的参数可用这种方式,其launch.json
内容如下:
{
"configurations": [
{
"name": "kindynamic_path_node",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/devel/lib/kindynamic_planner/test",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
program
:所调试节点二进制文件所在的绝对位置
参靠文献:
1、https://github.com/RoboGnome/VS_Code_ROS
2、https://haoqchen.site/2019/08/15/debug-ros-with-vscode/
3、https://github.com/ms-iot/vscode-ros/blob/master/doc/debug-support.md#attach