VS Code 调试ROS节点

前提:
安装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"

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值