前提:
安装VS Code
安装插件,C/C++, ROS

安装插件Txt Syntax, 作用:CMakeLists.txt语法高亮。 参考链接:https://blog.csdn.net/u012254599/article/details/106143540/<br> 安装插件Msg Language Support, 作用:msg,srv,action语法高亮

首先手动建立catkin workspace

1. mkdir ~/catkin_ws

2. cd ~/catkin_ws

3. mkdir src

4. cd src

5. catkin_init_workspace

6. cd ..

7. catkin_make

至此完成工作空间的建立

此时可以用VS Code打开这个工作空间。VS Code会自动识别出这是ROS的catkin workspace。
会自动添加.vscode文件夹。该文件夹下,会有c_cpp_properties.json,settings.json两个文件。

建立功能包的方式:

1.右键src文件夹
2.Create Catkin Package
3.会有提示,要求输入package name
4.提示输入,dependencies
5.输入完成后,会自动生成package.xml,其中的build_depend字段,build_export_depend字段,exec_depend字段,会根据你输入的依赖功能包自动生成。
6.自动生成的CMakeLists.txt,其中已有的内容如下:
cmake_minimum_required(VERSION 2.8.3)
project(test2)

#假设之前输入的依赖功能包是roscpp和std_msgs
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)
7.右键src文件夹->new file->建立自己的节点源文件
8.在CMakeLists.txt中,添加如下内容:
#假设建立的源文件名为,example1_a.cpp,生成的节点名为example1_a
add_executable(example1_a src/example1_a.cpp)
add_dependencies(example1_a ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(example1_a ${catkin_LIBRARIES})

提示找不到ros.h的问题:
参考链接:https://blog.csdn.net/ABC_ORANGE/article/details/102665792<br> 在命令行运行:catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
在c_cpp_properties.json中添加:"compileCommands": "${workspaceFolder}/build/compile_commands.json"

编译

参考链接:
写的非常详细的一篇博文,包含有配置文件中各个参数的含义:https://haoqchen.site/2019/08/15/debug-ros-with-vscode/<br><br><strong>1.建立task.json</strong><br> Terminal->Configure Default Build Task...->catkin_make:build
所生成的默认的task.json如下:
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "catkin_make",
            "problemMatcher": [
                "$catkin-gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "label": "catkin_make: build"
        }
    ]
}
这个生成的task.json应该是不能用的。按快捷键Shift+Ctrl+B没有反应。

修改为如下:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make",
            "type": "shell",
            "command": "catkin_make",
            "args": [
                "-DCMAKE_BUILD_TYPE=Debug"  
            ],
            "problemMatcher": [
                "$catkin-gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
注:
如果不加参数:“-DCMAKE_BUILD_TYPE=Debug”,则编译完之后,是不能debug的。

或者在CMakeLists.txt文件中设置:
set(CMAKE_BUILD_TYPE Debug)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")

2.Debug配置
2.1 将ROS节点当做C++文件来调试
Run->Add Configuration...->C++(GDB/LLDB)
生成的默认的launch.json如下:
{
    // 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<br>     "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "输入程序名称,例如 ${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

修改如下:
{
    // 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<br>     "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) example1_a",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/devel/lib/test/example1_a",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

在调试之前,需要先保证roscore运行。可以手动在终端roscore,或者用ROS插件的集成命令:Shift+Ctrl+P->ROS:Start Core

然后按F5,进入调试。

注:
request:有launch和attach两种方式,前者直接运行,后者将程序绑定到之前启动的程序
program:这里需要写生成的二进制路径。在ROS的cakin功能包下,节点的可执行文件在工作空间的devel/lib/<package>文件夹下

2.2 用ROS:Attach调试,这是ROS扩展插件,所提到的Features中,所建议的调试方法。
https://github.com/ms-iot/vscode-ros/blob/master/doc/debug-support.md<br> 1.在launch.json中,Add Configuration...,选择,ROS:Attach
会在configurations中,生成如下的片段:
{
    "name": "ROS: Attach",
    "type": "ros",
    "request": "attach"
},
2.这种ROS:Attach调试,需要先运行ros节点,然后attach到启动的节点,具体步骤如下:
1)Shift+Ctrl+P->ROS:Run a ROS executable->选功能包->选节点->回车
2)在Debug面板中,选择Run:Attach,点击绿三角运行,选C++,选启动的节点程序
3) 出现提示:Superuser access is required to attach to a process. Attaching as superuser can potentially harm your computer. Do you want to continue? [y/N]
输入y,回车。提示输入密码,输入密码,回车。
4)此时,运行的节点程序会停在设置的断点处,可以进行调试了。

2.3 用ROS:Launch调试
https://github.com/ms-iot/vscode-ros/blob/master/doc/debug-support.md<br> 此时,launch.json应该如下所示:
{
    // 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<br>     "version": "0.2.0",
    "configurations": [
        {
            "name": "ROS: Launch",
            "request": "launch",
            "target": "/home/mumu1408/code/test_ws/src/test/launch/test.launch",
            "type": "ros"
        }
    ]
}
在Debug面板中,选择Run:Launch,点击绿三角运行

错误处理:

1.在调试时,出现的错误如下:
[ERROR] [1598865364.105546929]: poll failed with error Interrupted system call
2.解决方法:参考https://blog.csdn.net/u012254599/article/details/106143540/<br> 建立文件,~/.gdbinit
输入如下内容
set target-async 1
set pagination off
set non-stop on
3.效果:
上面的解决方法可以使得,将节点当做CPP程序调试时,不会再出现错误[ERROR] [1598865364.105546929]: poll failed with error Interrupted system call
但是,将节点先运行,然后再ROS Attach,这种调试方法,还是会出现错误[ERROR] [1598865364.105546929]: poll failed with error Interrupted system call

其他tips:

1.点击VS Code右下角的ROS1.kinetic,会弹出一个窗口。其中包括Topics信息,Services信息。

2.如果工作空间下由多个功能包,可以在编译时添加-DCATKIN_WHITELIST_PACKAGES编译指定功能包,如下:
catkin_make -DCMAKE_BUILD_TYPE=Debug -DCATKIN_WHITELIST_PACKAGES="package1;package2"

VS Code 调试ROS节点相关推荐

  1. visual studio code 调试ROS的插件

    ctrl+p搜索: ext install ros https://marketplace.visualstudio.com/items?itemName=ajshort.ros 进行安装 其他可以调 ...

  2. VS Code创建、调试ROS项目

    前言: 在vs code下配置ROS项目开发的环境 包括catkin创建编译工作空间,创建ROS项目,调试ROS节点 一.创建工作空间 首先创建一个cMake工作空间,用到了catkin_make其实 ...

  3. Ubuntu20.04+gdb/vscode调试ROS(VINS-Mono)程序

    平台Ubuntu20.04 + ROS noetic 程序算法:VINS-mono 在阅读本文之前,建议先行了解基本的vscode调试工具与流程,以及如何安装vscode的ROS扩展,详情请参考博文: ...

  4. ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器

    3.1.2 ROS节点启动时调用gdb调试器 我们需要一个启动文件(launch)去启动节点,如下: 想要在节点启动时调用gdb调试器,需要添加launch-prefix="xterm -e ...

  5. 使用Visual Studio Code 运行ROS

    Visual Studio Code 运行ROS 学习目标: 操作步骤: Visual Studio Code下载 Visual Studio Code安装与卸载 安装 方式1:双击安装即可(或右击选 ...

  6. 理解ROS节点---ROS学习第4篇

    文章目录 1.图概念速览 2.节点 3.客户端库 4.roscore 5.使用rosnode 6.使用rosrun 1.图概念速览 计算图(Computation Graph)是一个由ROS进程组成的 ...

  7. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

  8. 【ROS】学习笔记一 ubuntu16.04下vs code配置ros环境并编写helloworld程序

    [ROS]ubuntu16.04下vs code配置ros环境并编写helloworld程序 一.vs code下载 1.相关配置要求: (1)系统为ubuntu16.04 (2)已安装好kineti ...

  9. ROS节点开机自启动

    在开发ROS项目中我们常常想实现电脑开机以后自动运行一些节点,这里就涉及到了Ubuntu中的一些开机自启动问题,ROS节点的启动与其他脚本的自动运行不一样,不能只写使用rc.local的方式写入,这是 ...

最新文章

  1. TensorFlow搭建垃圾分类系统大师(免费领源码)
  2. NDK编译生成so文件
  3. c语言windows 编程下silder控件,VB6 常用控件 滚动条ScorllBar和Slider控件
  4. linux存储--从内核文件系统看文件读写过程(四)
  5. Create Use Custom Controllers
  6. mysql 显示前三项_详解MySQL三项实用开发知识
  7. 《Unit Testing》1.1 -1.2 单元测试的目的
  8. java文件定时读写_java定时任务及日志的使用
  9. java excel 转pdf
  10. oracle ora 47306,Oracle SQL提示含义与示例 --- 分布式查询和并行提示
  11. python和java哪个好-Python和Java哪个薪资更高、远景更好?
  12. 解二元一次方程组的c语言编程,如何利用C语言求二元一次方程的解
  13. 网络安全应急响应事件一
  14. SharePoint使用CamlQuery查询人员和组
  15. python mysqldb 安装_python MySQLdb安装和使用
  16. 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(三)
  17. 【Codeforces Round #548(Div. 2)】Edgy Trees(数学+bfs求连通块)
  18. matlab中数组的声明,如何使用Matlab声明矩阵数组
  19. 图解:HTTP 范围请求,助力断点续传,多线程下载的核心原理 | 实用HTTP
  20. 远程linux桌面的工具xshell,Xshell如何远程桌面连接Linux系统 Xshell远程桌面连接Linux系统操作流程...

热门文章

  1. img src SVG使用CSS更改样式
  2. 如何在div中垂直对齐图像
  3. Objective-C中的typedef枚举是什么?
  4. Win11如何更改盘符?Win11更改磁盘驱动器号的方法
  5. js获取url上的数据;angularjs获取url上的参数
  6. mybatis与Spring整合配置文件
  7. activiti 定时任务和线程池
  8. 已经发车的票还能取出来吗_网上预订汽车票不知道怎么退票?
  9. scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验
  10. linux共享内存 dest,关于linux 共享内存查看已经完整释放