zoukankan      html  css  js  c++  java
  • VScode调试ros代码

    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/

    1. 中文模式。在vs code左侧选择Extenxions,输入chinese,安装简体中文包。
    2. ros插件上。我选择了MS的预览版。
      网上人很多选了ajshort的版本,但是这个版本已经deprecated. 并且被MS版兼并,虽然MS版还不是很完善。
    3. c++配置。在Extenxions里面,输入c++,安装c/c++ 及 C++ Intellisense 这两个。
    4. 配置CMakeLists.txt文件语法高亮。在Extenxions里面,输入txt,安装Txt Syntax。
    5. 配置msg, srv, action语法高亮。在Extenxions里面,输入msg,安装Msg Language Support。

    参考链接:https://blog.csdn.net/MSNH2012/article/details/100512253

    创建工作空间及功能包

    工作空间

    1. 如果已经有工作空间,可以通过打开文件夹选项进行打开。
    2. 如果要新建工作空间,可以先创建文件夹输入文件夹名称,例如:test,点击确定。
    3. 然后再创建文件夹src.
    4. 点击"终端"–>“新建终端”,在终端中输入"catkin_make",系统会自动在test文件夹下创建 “build”, "devel"文件夹和其他配置文件。

    新建工作空间时,会在test目录下自动生成一个.vscode文件夹,其内自动有2个.json文件。c_cpp_properties.jsonsetting.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’……

    运行节点

    1. 启动roscore:通过按Ctrl + Shift + P,输入ros:start core启动roscore。
    2. 运行节点:通过按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后,系统又提示我无法识别了。。

    然后:

    1. 启动roscore:通过按Ctrl + Shift + P,输入ros:start core启动roscore。
    2. 设置断点,运行调试
    3. 如果系统像没有断点一样运行,需要配置一下。在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

    1. 新建configuration设置. 通过添加配置,在.vscode的launch.josn中添加ROS: Attach
    2. 编译程序(生成类型必须为RelWithDebInfo)。在CMakeLists.txt中,project后添加参数SET(CMAKE_BUILD_TYPE RelWithDebInfo)
    3. 通过按Ctrl + Shift + P,输入>ros::run运行节点程序(也可以手动运行,需要加载环境)
    4. 运行ROS:Attach,选择运行程序(选择c++/python,及节点名称)进入断点调试模式。可能有个需要有个确认及授权。

    我在这里运行时,还是会出现’poll failed with error Interrupted system call’,但是不影响调试。
    另外就是,我这里变量显示的不太正常。但上面那种方式就没问题。

    注意,使用这种方法,就不需要launch.json的配置了。

    多文件调试ros_launch

    参考链接:
    https://blog.csdn.net/Kalenee/article/details/103828448

    1. 创建launch文件,调用调试的节点
    2. 在.vscode的launch.josn添加ROS: Launch,(Gdb下拉框添加配置,ROS:Launch自动在launch.josn文件中生成),"target"设置为launch文件的绝对路径。可右键launch文件,获得其文件路径。
    3. 运行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
    其中,

    1. c_cpp_properties.json主要是includePath参数,当有自定义头文件时,需要在其内添加。
    2. setting.json主要是ROS使用python编程,python相关配置,以及其它配置。我这里没有做出改动。
    3. launch.json是在配置调试模式时需要的,C++ 启动模式下,需要更改program参数;ros_launch模式下,需要更改target参数。
    4. 另外,其他教程中由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

  • 相关阅读:
    在现有项目中使用AspNet Identity 2.0 实战
    SQL 带自增长列的表的插入
    在C++中子类继承和调用父类的构造函数方法
    C++继承
    C++中重载、重写(覆盖)和隐藏的区别实例分析
    C++类
    C++中头文件(.h)和源文件(.cpp)都应该写些什么
    C++模板
    C语言字符串操作总结大全
    C++ 标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/Manuel/p/15687005.html
Copyright © 2011-2022 走看看