ROS 搭建vscode的debug调试环境笔记


1、新建ROS工作空间并使用VSCode打开

1.1 新建工作空间并打开

首先新建一个文件夹,我命名为test_ros,在该文件夹中打开终端,执行以下命令来创建ROS工作环境:
第一种:标准流程建立空间

mkdir test_ros
cd test_ros
mkdir src
cd src
catkin_init_workspace
cd ../
catkin_make

第二种:简要流程建立空间

mkdir test_ros
cd test_ros
mkdir src
catkin_make

1.2 使用vscode打开工作空间

code .

1.3 vscode安装相关插件

在这里插入图片描述


2、foxy版本的ros相关文件修改

2.1 c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/opt/ros/foxy/include/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c99",
            "cppStandard": "c++14",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}';

2.2 setting.json:

{
    "editor.tabSize": 8,
    "editor.rulers": [
        100
    ],
    "files.associations": {
        "*.repos": "yaml",
        "*.world": "xml",
        "*.xacro": "xml",
        "chrono": "cpp"
    },
    // Autocomplete from ros python packages
    "python.autoComplete.extraPaths": [
        "/opt/ros/foxy/lib/python3.8/site-packages/"
    ],
    // Environment file lets vscode find python files within workspace
    "python.envFile": "${workspaceFolder}/.env",
    // Use the system installed version of autopep8
    "python.formatting.autopep8Path": "/usr/bin/autopep8",
    "python.formatting.autopep8Args": [
        "--max-line-length=100"
    ],
    "C_Cpp.default.intelliSenseMode": "clang-x64",
    "C_Cpp.formatting": "Disabled",
    "uncrustify.useReplaceOption": true,
    "uncrustify.configPath.linux": "/opt/ros/foxy/lib/python3.8/site-packages/ament_uncrustify/configuration/ament_code_style.cfg",
    "cSpell.words": [
        "RTPS",
        "athackst",
        "autopep",
        "cmake",
        "cppcheck",
        "cpplint",
        "deque",
        "devcontainer",
        "ints",
        "noqa",
        "pytest",
        "rclcpp",
        "rclpy",
        "repos",
        "rosdistro",
        "rosidl",
        "uncrustify",
        "xmllint"
    ],
    "search.exclude": {
        "**/node_modules": true,
        "**/bower_components": true,
        "**/*.code-search": true,
        "**/build": true,
        "**/install": true,
        "**/log": true
    },
    "python.analysis.extraPaths": [
        "/opt/ros/foxy/lib/python3.8/site-packages/"
    ],
    "cSpell.allowCompoundWords": true,
    "cSpell.ignorePaths": [
        "**/package-lock.json",
        "**/node_modules/**",
        "**/vscode-extension/**",
        "**/.git/objects/**",
        ".vscode",
        ".vscode-insiders",
        ".devcontainer/devcontainer.json"
    ]
}

2.3 task.json:

使用Ctrl+Shift+P
然后在搜索栏中搜索Configure Default Build Task

  • Terminal -> Configure Default Build Task
  • 选择 -> catkin_make:build
    在这里插入图片描述

生成并修改task.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        // Build tasks
        {
            "label": "colcon make",
            "detail": "Build workspace (default)",
            "type": "shell",
            "command": "colcon build --merge-install --cmake-args '-DCMAKE_BUILD_TYPE=RelWithDebInfo' -Wall -Wextra -Wpedantic",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": "$gcc"
        }
    ]
}

然后再次Ctrl+Shift+B进行编译(此时已经自动),并会在build文件夹下出现compile_commands.json


2.4 launch.json:

单击此处,创建 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
  "version": "0.2.0",
  "configurations": [
    // Example launch of a python file
    {
      "name": "Launch",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/install/${input:package}/bringup/launch/cleaner_gazebo.py",
      "console": "integratedTerminal",
    },
    // Example gdb launch of a ros executable
    {
      "name": "(gdb) Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/install/lib/${input:package}/${input:program}",
      "args": [],
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ],
  "inputs": [
    {
      "id": "package",
      "type": "promptString",
      "description": "Package name",
      "default": "learning_ros2"
    },
    {
      "id": "program",
      "type": "promptString",
      "description": "Program name",
      "default": "ros2_talker"
    }
  ]
}

3、melodic 版本的ros相关文件修改

3.1 c_cpp_properties.json:

可能还有一些头文件找不到,比如ros/ros.h,我们还需要配置一些东西。
用命令行编译我们写的c++代码,同时输出编译信息文件,这里以ROS为例

1、打开终端,输入以下命令:

catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes

2、这个命令会输出一个compile_commands.json文件在ROS工作空间的build文件夹下面
然后在c_cpp_properties.json文件添加下面一段话

"compileCommands": "${workspaceFolder}/build/compile_commands.json"

修改后的 c_cpp_properties.json 如下:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],

    "version": 4
}

3.2 setting.json:

{
    "python.autoComplete.extraPaths": [
        "/opt/ros/melodic/lib/python2.7/dist-packages"
    ],
    "python.analysis.extraPaths": [
        "/opt/ros/melodic/lib/python2.7/dist-packages"
    ],
    "terminal.integrated.cursorBlinking": true,//控制终端光标是否闪烁
    "terminal.integrated.fontSize": 12,//控制终端字号大小
    "terminal.integrated.fontFamily": "monospace"//控制终端字体
}

2.3 task.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        },
    ]
}

2.4 launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在调试配置下拉列表中显示
            "type": "cppdbg",  // 调试器类型 该值自动生成
            "request": "launch",  // 调试方式,还可以选择attach
            "program": "${workspaceRoot}/devel/lib/waypoint_follower/pure_persuit", //要调试的程序(完整路径,支持相对路径)
            "args": [],  // 传递给上面程序的参数,没有参数留空即可
            "stopAtEntry": false,  // 是否停在程序入口点(停在main函数开始)
            "cwd": "${workspaceRoot}",  // 调试程序时的工作目录
            "environment": [], //针对调试的程序,要添加到环境中的环境变量. 例如: [ { "name": "squid", "value": "clam" } ]
            "externalConsole": false,   //如果设置为true,则为应用程序启动外部控制台。 如果为false,则不会启动控制台,并使用VS Code的内置调试控制台。
            "MIMode": "gdb",  // VSCode要使用的调试工具
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

3、测试程序

测试打印 hello world

#include<ros/ros.h>
#include<std_msgs/String.h>
#include<iostream>
#include<string>
#include<sstream>

using namespace std;

int main(int argc, char** argv)
{
    ros::init(argc, argv,"talker");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);

    ros::Rate loop_rate(10);
    int count = 0;

    while( ros::ok() )
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss << "hello world " << count;
        msg.data = ss.str();
        ROS_INFO("%s",msg.data.c_str());
        chatter_pub.publish(msg);
        ros::spinOnce();
        loop_rate.sleep();
        count++;
    }

    return 0;
}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ROS (机器人操作系统) 是一个开源的、用于构建机器人应用软件的框架。Python 是 ROS 中常用的编程语言之一,VS Code 则是一种广泛使用的集成开发环境。 在使用 VS Code 进行 ROS Python 调试时,需要按照以下步骤进行设置: 1. 安装 ROS 扩展:在 VS Code 中打开扩展视图,搜索并安装 "ROS" 扩展。 2. 创建工作空间:在 VS Code 中创建一个文件夹,并打开该文件夹作为你的 ROS 项目的工作空间。 3. 设置工作空间:在 VS Code 中使用快捷键 "Ctrl + Shift + P" 调出命令面板,输入 "ROS: Set Workspaces" 并选择 "ROS: Set Workspace",然后选择你的工作空间文件夹。 4. 创建 launch 文件:在工作空间中创建一个 launch 文件,该文件将用于启动 ROS 节点并配置调试器。 5. 在 launch 文件中添加调试配置:在 launch 文件中添加一个节点配置,包括节点名称、节点类型和节点参数等信息,以便 VS Code 在调试时能正确启动节点。 6. 设置断点:在你的 Python 代码中选择需要设置断点的行,并在调试器视图中点击左边的行号。这样当节点运行到这行时,调试器将会暂停执行。 7. 启动调试:在工作空间中打开 `.vscode/launch.json` 配置文件,在节点配置中添加 `"request": "launch"` 字段。然后按下 F5 键或在调试菜单中选择启动调试,VS Code 将会连接 ROS 节点并进行调试。 8. 调试过程中的操作:在调试过程中,你可以使用调试器界面中的控件,如继续、暂停、下一步、单步跳入、单步跳过等,来控制代码的执行流程和查看变量的值等信息。 通过以上步骤,你可以在 VS Code 中使用调试器来调试你的 ROS Python 代码,以便更好地理解和修复代码中的错误和问题。 ### 回答2: 在使用ROS、Python和VSCode进行调试时,我们可以按照以下步骤进行操作: 1. 安装ROS:首先,确保已正确安装并配置ROS开发环境。在安装完成后,可以使用`roscd`命令进入ROS工作空间。 2. 安装VSCode:从VSCode的官方网站上下载并安装VSCode;然后,安装ROS插件,如"ROS"、"Python"和"Remote - Containers"等。 3. 创建工作空间:打开VSCode,点击"打开文件夹",然后选择ROS工作空间的路径。VSCode会自动加载ROS插件以支持ROS功能。 4. 创建和编辑ROS节点:在VSCode中,打开一个新的终端并导航到ROS工作空间。使用ROS命令创建和运行ROS节点,比如`rosrun <package_name> <node_name>`。 5. 编写Python代码:在VSCode中创建或编辑Python代码文件,实现ROS节点的功能。在代码中,可以使用ROS提供的Python库来访问ROS消息、服务和参数等。 6. 配置调试器:在VSCode中,点击"调试"选项卡,然后在调试配置文件中选择"Python"。这将创建一个新的"launch.json"文件。 7. 配置调试选项:在"launch.json"文件中,配置调试器的选项,指定要运行和调试的Python脚本、启动节点的参数等。 8. 运行和调试:点击调试工具栏中的"开始调试"按钮,VSCode将运行ROS节点并自动启动调试器。可以设置断点、观察变量、单步执行等操作来调试代码。 9. 观察输出:在VSCode的"调试控制台"中,可以看到ROS节点的输出信息,包括ROS消息、调试信息等。可以使用打印语句或ROS的日志库来记录输出。 10. 停止调试调试完成后,点击调试工具栏中的"停止"按钮,停止ROS节点的运行和调试会话。 总结,使用VSCode进行ROS和Python的调试是一种便捷的方法。通过正确设置调试配置文件,我们可以轻松地调试ROS节点并观察输出信息,提高调试效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值