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"
VS Code 调试ROS节点相关推荐
- visual studio code 调试ROS的插件
ctrl+p搜索: ext install ros https://marketplace.visualstudio.com/items?itemName=ajshort.ros 进行安装 其他可以调 ...
- VS Code创建、调试ROS项目
前言: 在vs code下配置ROS项目开发的环境 包括catkin创建编译工作空间,创建ROS项目,调试ROS节点 一.创建工作空间 首先创建一个cMake工作空间,用到了catkin_make其实 ...
- Ubuntu20.04+gdb/vscode调试ROS(VINS-Mono)程序
平台Ubuntu20.04 + ROS noetic 程序算法:VINS-mono 在阅读本文之前,建议先行了解基本的vscode调试工具与流程,以及如何安装vscode的ROS扩展,详情请参考博文: ...
- ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器
3.1.2 ROS节点启动时调用gdb调试器 我们需要一个启动文件(launch)去启动节点,如下: 想要在节点启动时调用gdb调试器,需要添加launch-prefix="xterm -e ...
- 使用Visual Studio Code 运行ROS
Visual Studio Code 运行ROS 学习目标: 操作步骤: Visual Studio Code下载 Visual Studio Code安装与卸载 安装 方式1:双击安装即可(或右击选 ...
- 理解ROS节点---ROS学习第4篇
文章目录 1.图概念速览 2.节点 3.客户端库 4.roscore 5.使用rosnode 6.使用rosrun 1.图概念速览 计算图(Computation Graph)是一个由ROS进程组成的 ...
- ROS学习笔记四:理解ROS节点
ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...
- 【ROS】学习笔记一 ubuntu16.04下vs code配置ros环境并编写helloworld程序
[ROS]ubuntu16.04下vs code配置ros环境并编写helloworld程序 一.vs code下载 1.相关配置要求: (1)系统为ubuntu16.04 (2)已安装好kineti ...
- ROS节点开机自启动
在开发ROS项目中我们常常想实现电脑开机以后自动运行一些节点,这里就涉及到了Ubuntu中的一些开机自启动问题,ROS节点的启动与其他脚本的自动运行不一样,不能只写使用rc.local的方式写入,这是 ...
最新文章
- TensorFlow搭建垃圾分类系统大师(免费领源码)
- NDK编译生成so文件
- c语言windows 编程下silder控件,VB6 常用控件 滚动条ScorllBar和Slider控件
- linux存储--从内核文件系统看文件读写过程(四)
- Create Use Custom Controllers
- mysql 显示前三项_详解MySQL三项实用开发知识
- 《Unit Testing》1.1 -1.2 单元测试的目的
- java文件定时读写_java定时任务及日志的使用
- java excel 转pdf
- oracle ora 47306,Oracle SQL提示含义与示例 --- 分布式查询和并行提示
- python和java哪个好-Python和Java哪个薪资更高、远景更好?
- 解二元一次方程组的c语言编程,如何利用C语言求二元一次方程的解
- 网络安全应急响应事件一
- SharePoint使用CamlQuery查询人员和组
- python mysqldb 安装_python MySQLdb安装和使用
- 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(三)
- 【Codeforces Round #548(Div. 2)】Edgy Trees(数学+bfs求连通块)
- matlab中数组的声明,如何使用Matlab声明矩阵数组
- 图解:HTTP 范围请求,助力断点续传,多线程下载的核心原理 | 实用HTTP
- 远程linux桌面的工具xshell,Xshell如何远程桌面连接Linux系统 Xshell远程桌面连接Linux系统操作流程...