本文包含vscode下环境包括调试环境的搭建、节点或launch文件运行、单节点调试、多节点/launch文件(roslaunch)调试,及各个过程中最常见的问题及解决方法。
1. 相关插件安装
- ROS插件。
- C++配置:安装c/c++ 及 C++ Intellisense 这两个插件。
- 配置CMakeLists.txt文件语法高亮。在Extenxions里面,输入txt,安装Txt Syntax。
- 配置msg, srv, action语法高亮。在Extenxions里面,输入msg,安装Msg Language Support。
2. 导入或者新建工作空间
2.1 导入工作空间
直接在vscode中打开之前已建好的workspace文件夹。
2.2 新建工作空间
通过命令行新建:
- 新建文件夹``mkdir p /src
- 然后编译
catkin_make
,系统会自动在test文件夹下创建 “build”, "devel"文件夹和其他配置文件。
在新建工作空间时,会在工作空间根目录下自动生成一个.vscode文件夹,其内自动有2个.json文件。c_cpp_properties.json和setting.json。如果没有生成,重启vscode试试。或者通过按Ctrl + Shift + P,输入c/c++: edit configurations(JSON), 手动生成。
3. 环境配置
- 编译输出信息文件,执行:
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
这个命令会输出一个compile_commands.json
文件在ROS工作空间的build文件夹下面
- 添加以下信息文件到
c_cpp_properties.json
文件中的相应位置:
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++11",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
其中部分也可以替换为:
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
4. vscode中编译ros
Ctrl+Shift+P
,然后键入tasks: Configure Task
,- 选择
catkin_make:build
,会在.vscode
文件夹下自动生成文件task.json
。 - 然后
Ctrl+Shift+B
就可以编译(其实默认使用的是catkin_make
)
自动生成的内容如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "catkin_make",
"args": [
"--directory",
"/home/lyh/MyFiles/Codes/catkin_ws"
],
"problemMatcher": [
"$catkin-gcc"
],
"group": "build", //代表将我们定义的这个task添加到build组里面,这样就可以中Ctrl+Shift+B快捷键来找到编译命令
"label": "catkin_make: build" //代表提示的描述性信息(该组命令的名称)
}
]
}
另外还可以添加其他一些使用的参数,例如:
"group": {"kind":"build","isDefault":true},"isDefault":
true代表直接执行command,如果为false还需要在build下拉里面选一下;及其他catkin_make命令后加的变量参数。简单例子:
{
"version": "2.0.0",
"tasks": [
{
"type": "catkin_make",
"args": [
"--directory",
"/home/lyh/MyFiles/Codes/catkin_ws",
"-j4", //使用4个线程编译
"-DCMAKE_BUILD_TYPE=Debug",
"-DCATKIN_WHITELIST_PACKAGES=<package_name>"
],
"problemMatcher": [
"$catkin-gcc"
],
"group": {
"kind":"build",
"isDefault":true
},
"label": "catkin_make: build"
}
]
}
注意:利用ctrl + shif + b快捷键编译,或者点击Terminal-> Run Build Task编译前,需要将所需编译包所在的workspace的文件夹放到vscode workspace的第一位,否则无法选择到需要编译的包。
重要提示:一定要确保CMakeList.txt中#set(CMAKE_BUILD_TYPE Release)这句有的话被注释掉,否则即使在编译的时候设置了-DCMAKE_BUILD_TYPE=Debug,调试时一样会无法进入断点。
6. 调试
6.1 单程序调试
单程序常用的是attach
模式,设置如下:
新建配置:依次点击图中图标,然后选择ROS
, ROS: Attach
,便会在.vscode
文件夹下自动生成launch.json
文件(或通过Ctrl + Shift + D,下拉添加配置,自动生成该文件)。
其默认配置如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "ROS: Attach", //调试配置的名称,此处为ROS: Attach
"request": "attach",
"type": "ros"
}
]
}
也可以通过点击右下方的Add configuration按钮添加:
编译程序(确保生成类型为RelWithDebInfo或者Debug):在Cmakelists.txt中添加SET(CMAKE_BUILD_TYPE "RelWithDebInfo")或者在task.json的args中添加"-DCMAKE_BUILD_TYPE=RelWithDebInfo"。(有些博文说必须是RelWithDebInfo,但是ROS插件的官网说用debug模式也可以 Use tasks to automatically build before starting debug session,亲测两个都可以)。
GDB调试
设置编译模式为debug,配置launch文件如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在调试配置下拉列表中显示
"type": "cppdbg", // 调试器类型 该值自动生成
"request": "launch", // 调试方式,还可以选择attach
"program": "${workspaceRoot}/devel/lib/waypoint_follower/pure_persuit", //要调试的程序(完整路径,支持相对路径)
"args": [], // 传递给上面程序的参数,没有参数留空即可
"stopAtEntry": false, // 是否停在程序入口点(停在main函数开始)
"cwd": "${workspaceRoot}", // 调试程序时的工作目录
"environment": [], //针对调试的程序,要添加到环境中的环境变量. 例如: [ { "name": "squid", "value": "clam" } ]
"externalConsole": false, //如果设置为true,则为应用程序启动外部控制台。 如果为false,则不会启动控制台,并使用VS Code的内置调试控制台。
"MIMode": "gdb", // VSCode要使用的调试工具名称
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
6.2 多程序/多node调试,launch文件调试
创建launch文件:新建launch文件夹,在其中添加launch文件。
<launch>
<node name="talker" pkg="beginner_tutorials" type="talker" output="screen" />
<node name="listener" pkg="beginner_tutorials" type="listener" output="screen" />
</launch>
在.vscode
文件夹中的launch.josn
添加ROS: Launch配置,其中"target"设置为launch文件的绝对路径,新的配置如下(包含ROS: Attach):
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "ROS: Launch",
"type": "ros",
"request": "launch",
"target": "/home/lyh/MyFiles/Codes/catkin_ws/src/beginner_tutorials/launch/launch_debug_test.launch"
},
{
"name": "ROS: Attach",
"request": "attach",
"type": "ros"
}
]
}
其他运行及调试方法与ROS: Attach类似
整个过程中涉及到了4个json文件:
- c_cpp_properties.json,主要是includePath参数,当有自定义头文件时,需要在其内添加。
- setting.json,主要是ROS使用python编程,python相关配置,以及其它配置。如果是使用C++无需改动。
- launch.json,是在配置调试模式时需要的,C++ 启动模式下,需要更改program参数;ros_launch模式下,需要更改target参-
- task.json,编译相关,如果采用命令行编译可以忽略。
7. issue
ROS无代码提示/智能提示
若无代码提示显示,使用Ctrl+space(如不行,执行下面括号内容)
(编辑workspace的.vscode文件夹中的c_cpp_properties.json"文件,在"name": "ROS",下添加intelliSenseMode": "gcc-x64")
参考链接:
- Step By Step Integration of ROS in VS Code
- ROS——vscode配置
- 使用VScode调试ROS
- ros项目调试:vscode下配置开发ROS项目
- vscode中c++工程cmake断点调试(解决无法命中断点)