有多少人工,就有多少智能

Ros2 vscode 调试运行

1. 编译调试版本: 在使用 colcon build 编译工作区时,你需要确保以调试模式编译,添加 --cmake-args -DCMAKE_BUILD_TYPE=Debug 参数:

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug

2. 使用 gdb 进行调试

gdb 是一个常用的调试工具,可以帮助你在命令行中调试 ROS 2 节点。

步骤:

  1. 编译调试版本: 在使用 colcon build 编译工作区时,你需要确保以调试模式编译,添加 --cmake-args -DCMAKE_BUILD_TYPE=Debug 参数:

     
    colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug
  2. 使用 gdb 调试节点: 在调试节点时,使用 gdb 来启动节点。例如:

    gdb --args ros2 run <package_name> <node_name>
  3. 设置断点并运行:gdb 中启动后,你可以设置断点:

    break main

    然后开始运行:

    run

    当程序遇到断点时,你可以使用 gdb 的命令来检查变量、栈帧、内存等。

2. 在 VSCode 中调试 ROS 2

VSCode 提供了图形化的调试工具,非常适合 ROS 2 开发。

配置 VSCode:

  1. 安装必要的扩展:

    • C/C++ (by Microsoft)
    • ROS (optional, by Microsoft)
  2. 配置 launch.json 文件: 在工作区中创建 .vscode/launch.json 文件,配置 ROS 2 节点的调试信息。下面是一个简单的 launch.json 示例:

     
    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "ROS2 Debug",
          "type": "cppdbg",
          "request": "launch",
          "program": "${workspaceFolder}/install/<your_package_name>/lib/<your_package_name>/<your_node_name>",
          "args": [],
          "stopAtEntry": false,
          "cwd": "${workspaceFolder}",
          "environment": [],
          "externalConsole": false,
          "MIMode": "gdb",
          "setupCommands": [
            {
              "description": "Enable pretty-printing for gdb",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
            }
          ],
          "preLaunchTask": "build",
          "miDebuggerPath": "/usr/bin/gdb",
          "setupCommands": [
            {
              "text": "set follow-fork-mode child"
            }
          ],
          "logging": {
            "moduleLoad": false,
            "trace": true
          }
        }
      ]
    }

     


  3. 启动调试:

    • 打开你的 ROS 2 源代码文件,设置断点。
    • 点击左侧调试图标,选择 "ROS2 Debug" 配置,然后点击 "启动调试" 按钮。

3. 使用 ros2 launch 调试

如果你使用 ros2 launch 来启动多个节点,你也可以调试其中的一个或多个节点。

步骤:

  1. 添加 launch-prefix: 在你的 launch 文件中,可以通过添加 launch-prefix="xterm -e gdb --args" 来启动节点时附加调试器。例如:

    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():
        return LaunchDescription([
            Node(
                package='your_package',
                executable='your_node',
                name='your_node',
                output='screen',
                prefix='xterm -e gdb --args'
            )
        ])
    

      

  2. 启动调试: 使用 ros2 launch 命令启动这个 launch 文件,xterm 会启动并附带 gdb,你可以在其中设置断点并运行调试。

4. 使用 rclcpp::Logger 进行日志调试

在调试过程中,使用 ROS 2 提供的日志工具可以帮助你快速定位问题。

#include "rclcpp/rclcpp.hpp"

RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "This is an info message");
RCLCPP_WARN(rclcpp::get_logger("rclcpp"), "This is a warning message");
RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "This is an error message");

 

posted @ 2024-08-24 22:37  lvdongjie-avatarx  阅读(21)  评论(0编辑  收藏  举报