https://blog.csdn.net/u012254599/article/details/106143540
https://blog.csdn.net/weixin_42268975/article/details/106021808
前言
之前用RoboWare Studio
,但是它已经很久没有更新了,官网也没有了。Kinect版本也快不用了,趁这个机会,正好开始用VScode.
基本介绍
官方教程:
https://code.visualstudio.com/docs
其他:
https://www.jianshu.com/p/11554732b323
https://www.cnblogs.com/shujuan841019/p/5501083.html
插件及小技巧
插件
https://blog.csdn.net/weixin_45601379/article/details/100550421
https://blog.csdn.net/qq_41139830/article/details/85221330
https://www.jianshu.com/p/3eebde5748a6
小技巧
https://www.cnblogs.com/shujuan841019/p/5501083.html
https://www.jianshu.com/p/0cf2130d1b27
vscode安装与ROS插件相关
从官网下载并安装。
https://code.visualstudio.com/
- 中文模式。在vs code左侧选择Extenxions,输入chinese,安装简体中文包。
- ros插件上。我选择了MS的预览版。
网上人很多选了ajshort的版本,但是这个版本已经deprecated. 并且被MS版兼并,虽然MS版还不是很完善。 - c++配置。在Extenxions里面,输入c++,安装c/c++ 及 C++ Intellisense 这两个。
- 配置CMakeLists.txt文件语法高亮。在Extenxions里面,输入txt,安装Txt Syntax。
- 配置msg, srv, action语法高亮。在Extenxions里面,输入msg,安装Msg Language Support。
参考链接:https://blog.csdn.net/MSNH2012/article/details/100512253
创建工作空间及功能包
工作空间
- 如果已经有工作空间,可以通过
打开文件夹
选项进行打开。 - 如果要新建工作空间,可以先
创建文件夹
输入文件夹名称,例如:test,点击确定。 - 然后再创建文件夹
src
. - 点击"终端"–>“新建终端”,在终端中输入"catkin_make",系统会自动在test文件夹下创建 “build”, "devel"文件夹和其他配置文件。
在新建工作空间
时,会在test目录下自动生成一个.vscode
文件夹,其内自动有2个.json
文件。c_cpp_properties.json
和setting.json
如果没有生成,重启vscode试试。
或者通过按Ctrl + Shift + P,输入c/c++: edit configurations(JSON), 手动生成.
另外,记得把新建的工作空间source一下。
查看工作空间情况
$ echo $ROS_PACKAGE_PATH
功能包
右键
点击"src"文件夹,右键弹出选项中,点击"Create Catkin Package",输入包的名称ros_test,按Enter确认,输入包的依赖“std_msgs roscpp”,空格隔开,按Enter确认。系统自动创建CMakeLists.txt及package.xml文件。
也可通过按Ctrl + Shift + P
,输入ros:Create Catkin Package
配置功能包。
注:没有在创建工作空间时的两个.json文件,是无法生成功能包的。可能会没反应或报错如下:
命令"ROS: Create Catkin Package"导致错误 (command ‘ros.createCatkinPackage’……
运行节点
- 启动roscore:通过按
Ctrl + Shift + P
,输入ros:start core
启动roscore。 - 运行节点:通过按
Ctrl + Shift + P
,输入ros:run a rose executable
,依次输入对应的package及节点,参数。或者直接下终端rosrun ………………
断点调试配置
在未配置过调试前,没有launch.json
文件。通过Ctrl + Shift + D
,下拉添加配置,自动生成该文件。断点调试有如下几种方式,这里主要讲c/c++ gdb启动
:
c/c++ gdb启动
先说一下,使用这种调试方法,不需要先运行节点。
该方式会生成launch.json
:
{
"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
}
]
}
需要修改其中program
为需要调试的可执行程序。更改为编译后的可执行文件的路径下的文件(需要二进制文件),对应ROS通过catkin_make生产可执行文件的路径通常在 /devel/lib/ 下,后面跟上你设置好的package名和可执行文件名例如:
"program": "${workspaceFolder}/devel/lib/ros_test/talker"
需要注意,有些教程用了${workspaceRoot}/devel/lib/ros_test/talker
, 自己看哪个可行。
另外,这里的"request": "launch"
,系统也提示我可以用"request": "attach"
模式,但是我变成attach后,系统又提示我无法识别了。。
然后:
- 启动roscore:通过按
Ctrl + Shift + P
,输入ros:start core
启动roscore。 - 设置断点,运行调试
- 如果系统像没有断点一样运行,需要配置一下。在
CMakeLists.txt(工作空间的,不是功能包的)
中,project
后添加参数SET(CMAKE_BUILD_TYPE Debug)
,然后重新catkin_make:
cmake_minimum_required(VERSION 2.8.3)
project(ros_test)
SET(CMAKE_BUILD_TYPE Debug)
或者是catkin_make在编译功能包时,添加catkin_make的参数
$ catkin_make -DCMAKE_BUILD_TYPE=Debug
如果工作空间下由多个功能包,可以在编译时添加-DCATKIN_WHITELIST_PACKAGES
编译指定功能包
$ catkin_make -DCMAKE_BUILD_TYPE=Debug -DCATKIN_WHITELIST_PACKAGES="package1;package2"
另外,如果开始断点调试时,出现报错:
poll failed with error Interrupted system call
解决方法是:
打开~/.gdbinit(如果没有这个文件则自己新建一个同名文档),然后添加一下三行即可。
set target-async 1
set pagination off
set non-stop on
该报错参考链接:
https://blog.csdn.net/ABC_ORANGE/article/details/102665792
ros_attach调试方法
attach调试方法的优势
https://blog.csdn.net/hello_crayon/article/details/40350291
参考链接:
https://blog.csdn.net/Kalenee/article/details/103828448
- 新建configuration设置. 通过添加配置,在.vscode的launch.josn中添加ROS: Attach
- 编译程序(生成类型必须为RelWithDebInfo)。在
CMakeLists.txt
中,project
后添加参数SET(CMAKE_BUILD_TYPE RelWithDebInfo)
- 通过按
Ctrl + Shift + P
,输入>ros::run运行节点程序(也可以手动运行,需要加载环境) - 运行ROS:Attach,选择运行程序(选择c++/python,及节点名称)进入断点调试模式。可能有个需要有个确认及授权。
我在这里运行时,还是会出现’poll failed with error Interrupted system call’,但是不影响调试。
另外就是,我这里变量显示的不太正常。但上面那种方式就没问题。
注意,使用这种方法,就不需要launch.json
的配置了。
多文件调试ros_launch
参考链接:
https://blog.csdn.net/Kalenee/article/details/103828448
- 创建launch文件,调用调试的节点
- 在.vscode的launch.josn添加ROS: Launch,(Gdb下拉框添加配置,ROS:Launch自动在launch.josn文件中生成),"target"设置为launch文件的绝对路径。可右键launch文件,获得其文件路径。
- 运行ROS:Launch,选择运行程序进入断点调试模式
另外,查到一个比较官方的方法介绍,有兴趣的可以看一下:
http://www.lib4dev.in/info/MrGnomes/VS_Code_ROS/186882206#3-intellisense
其中还对c_cpp_properties.json
里的includePath
做了介绍。
.json文件介绍
在我的使用中,一共用到了三个.json文件:
c_cpp_properties.json、setting.json、launch.json
其中,
c_cpp_properties.json
主要是includePath
参数,当有自定义头文件时,需要在其内添加。setting.json
主要是ROS使用python编程,python相关配置,以及其它配置。我这里没有做出改动。launch.json
是在配置调试模式时需要的,C++ 启动
模式下,需要更改program
参数;ros_launch
模式下,需要更改target
参数。- 另外,其他教程中由
task.json
,我这里并未使用。可能是因为我都是手动catkin_make
参考链接:
https://blog.csdn.net/weixin_35695879/article/details/85254422
https://blog.csdn.net/MSNH2012/article/details/100567640
https://blog.csdn.net/ABC_ORANGE/article/details/102665792
https://code.visualstudio.com/docs/cpp/config-linux