vscode에서 ROS 프로젝트 디버그, 노드 디버깅, 다중 노드 디버깅, roslauch 디버깅

이 문서에는 디버깅 환경 구축, 노드 또는 실행 파일 작업, 단일 노드 디버깅, 다중 노드/실행 파일(roslaunch) 디버깅, 각 프로세스에서 가장 일반적인 문제 및 해결 방법을 포함한 vscode 환경이 포함되어 있습니다.

1. 관련 플러그인 설치

  • ROS 플러그인.
  • C++ 구성: 두 개의 플러그인 c/C++C++ Intellisense를 설치합니다.
  • CMakeLists.txt 파일 구문 강조를 구성합니다. Extensions에 txt를 입력하여 Txt Syntax를 설치합니다 .
  • msg, srv, 작업 구문 강조를 구성합니다. Extensions에 msg를 입력하여 Msg Language Support를 설치합니다 .

2. 새 작업공간 가져오기 또는 만들기

2.1 작업공간 가져오기

이전에 빌드된 작업 공간 폴더를 vscode에서 직접 엽니다.

2.2 새 작업공간 만들기

명령줄을 통해 새로 만들기

  • 새 폴더mkdir -p <workspace>/src
  • 그런 다음 컴파일하면 catkin_make시스템이 테스트 폴더 아래에 "build", "devel" 폴더 및 기타 구성 파일을 자동으로 생성합니다.

vscode를 통한 새로운 기능

  • 새 폴더 만들기 mkdir -p <workspace>/src(또는 vscode를 통해 새 폴더 만들기)
  • 바로 가기 키를 누른 ctrl+shif+p다음 를 입력 catkin_make하고 선택하세요.ROS Create Catkin Package

.vscode새 작업 공간을 생성하면 작업 공간의 루트 디렉터리 아래에 폴더가 자동으로 생성되고 그 안에 2개의 .json 파일이 있게 됩니다. c_cpp_properties.json그리고 setting.json. 생성되지 않으면 vscode를 다시 시작해 보세요. Ctrl + Shift + P또는 , Enter , 를 눌러 수동으로 생성하세요 c/c++: edit configurations(JSON).


3. 환경 구성

3.1 스마트 코드 프롬프트

  • 출력 정보 파일을 컴파일하고 실행합니다. 이 명령은 ROS 작업 공간의 빌드 폴더 아래에 파일을
    catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
    출력합니다.compile_commands.json

  • 다음 정보 파일을 c_cpp_properties.json파일의 적절한 위치에 추가합니다.

    "name": "ROS",
    "intelliSenseMode": "gcc-x64",
    "compilerPath": "/usr/bin/g++",
    "cStandard": "c11",
    "cppStandard": "c++11",
    "compileCommands": "${workspaceFolder}/build/compile_commands.json"
    

    그 중 일부는 다음으로 대체될 수도 있습니다.

    "compilerPath": "/usr/bin/gcc",
    "cStandard": "c11",
    "cppStandard": "c++17",
    "intelliSenseMode": "clang-x64",
    

    참고: 코드 힌트가 표시되지 않으면 Ctrl+스페이스바를 사용하세요.
    기본적으로 모든 헤더 파일을 찾을 수 있으며, 코드 힌트를 사용하여 코드를 코딩할 수 있습니다.


4. vscode에서 ros 컴파일

  • Ctrl+Shift+P을 입력한 다음 tasks: Configure Task,
  • catkin_make:build선택 하면 .vscode폴더 아래에 파일이 자동으로 생성됩니다 task.json.
  • 그런 다음 Ctrl+Shift+B컴파일할 수 있습니다(실제로 기본값은 을 사용하는 것입니다 catkin_make).

자동으로 생성되는 콘텐츠는 다음과 같습니다.

{
    
    
  "version": "2.0.0",
  "tasks": [
    {
    
    
      "type": "catkin_make",
      "args": [
        "--directory",
        "/home/lyh/MyFiles/Codes/catkin_ws"
      ],
      "problemMatcher": [
        "$catkin-gcc"
      ],
      "group": "build", //代表将我们定义的这个task添加到build组里面,这样就可以中Ctrl+Shift+B快捷键来找到编译命令
      "label": "catkin_make: build" //代表提示的描述性信息(该组命令的名称)
    }
  ]
}

또한, 사용된 다른 매개변수를 추가할 수 있습니다(예: 는 "group": {"kind":"build","isDefault":true}명령 "isDefault":true을 직접 실행한다는 의미이며, false인 경우 빌드 드롭다운에서 선택해야 함). catkin_make명령 뒤에 추가된 기타 변수 매개변수. 간단한 예:

{
    
    
  "version": "2.0.0",
  "tasks": [
    {
    
    
      "type": "catkin_make",
      "args": [
        "--directory",
        "/home/lyh/MyFiles/Codes/catkin_ws",
        "-j4", //使用4个线程编译
        "-DCMAKE_BUILD_TYPE=Debug",
        "-DCATKIN_WHITELIST_PACKAGES=<package_name>"
      ],
      "problemMatcher": [
        "$catkin-gcc"
      ],
      "group": {
    
    
        "kind":"build",
        "isDefault":true
        },
      "label": "catkin_make: build"
    }
  ]
}

참고 : ctrl + shif + b단축키를 사용하여 컴파일하거나 Terminal-> Run Build Task컴파일을 클릭하기 전에 컴파일된 패키지가 있는 작업 공간의 폴더를 vscode 작업 공간의 첫 번째 위치에 넣어야 합니다. 그렇지 않으면 컴파일해야 하는 패키지를 선택할 수 없습니다.
중요 사항 : CMakeList.txt의 이 문장을 주석 처리했는지 확인하세요 #set(CMAKE_BUILD_TYPE Release). 그렇지 않으면 컴파일 중에 설정하더라도 -DCMAKE_BUILD_TYPE=Debug디버깅 중에 중단점을 입력할 수 없습니다.


5. 노드 실행

5.1 방법 1: vscode로 실행

  • roscore를 시작하려면 를 눌러 roscore를 시작하고 를 Ctrl + Shift + P입력하세요 .ros:start core
  • 노드 실행: 을 눌러 을 Ctrl + Shift + P입력하고 ros:run a rose executable해당 패키지와 노드, 매개변수를 차례로 입력합니다.

5.2 방법 2: 명령줄 사용

vscode를 사용하려면 단계가 너무 많습니다. 명령줄을 사용하는 것이 좋습니다. 터미널 바로 아래에 있습니다 rosrun <package> <node> <args>.


6. 디버깅

6.1 단일 프로그램 디버깅

ROS: 연결 모드

이 모드 는 일반적으로 단일 프로그램에 사용되며 attach설정은 다음과 같습니다.

  • 새 구성 만들기: 그림의 아이콘을 차례로 클릭한 후 을 선택하면 폴더 아래에 파일이 자동 생성 됩니다 ROS. (또는 Ctrl + Shift + D를 사용하여 드롭다운 목록에서 구성을 추가하면 파일이 자동 생성됩니다.) . 기본 구성은 다음과 같습니다.ROS: Attach.vscodelaunch.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": [
          {
          
          
              "name": "ROS: Attach", //调试配置的名称,此处为ROS: Attach
              "request": "attach",
              "type": "ros"
          }
      ]
    }
    

    오른쪽 하단에 있는 구성 추가 버튼을 클릭하여 추가할 수도 있습니다 .

  • 프로그램을 컴파일합니다(빌드 유형이 RelWithDebInfo 또는 Debug인지 확인): Cmakelists.txt추가 SET(CMAKE_BUILD_TYPE "RelWithDebInfo")또는 task.jsonargs 를 추가합니다 "-DCMAKE_BUILD_TYPE=RelWithDebInfo". (일부 블로그 게시물에서는 반드시 그래야 한다고 말하지만 RelWithDebInfoROS 플러그인 공식 웹사이트에서는 디버그 모드를 사용하여 디버그 세션을 시작하기 전에 자동으로 빌드하는 작업을 사용할 수도 있고 두 가지를 모두 테스트할 수도 있다고 나와 있습니다.)

  • C++ 디버깅: 먼저 중단점을 설정한 다음 노드를 실행하고 ROS를 실행합니다. 구성 연결

  • 디버그 파이썬

GDB 디버깅

컴파일 모드를 디버그로 설정하고 다음과 같이 시작 파일을 구성합니다.

{
    
    
    "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
                }
            ]
        }
    ]
}

노드가 매개변수로 실행되는 경우 rosrun이 노드를 실행할 때 노드 뒤에 추가하여 실행할 수 있다는 점을 언급할 가치가 있습니다. 많은 수의 매개변수를 입력해야 하며 yaml 파일을 작성하고 다음과 같이 할 수 있습니다 rosparam load <your_yaml_file> <namespace>.rosparam load test_name.yaml /workspace

6.2 다중 프로그램/다중 노드 디버깅, 실행 파일 디버깅

  • 시작 파일 만들기: 새 시작 폴더를 만들고 여기에 시작 파일을 추가합니다.

    <launch>
      <node name="talker" pkg="beginner_tutorials" type="talker" output="screen" />
      <node name="listener" pkg="beginner_tutorials" type="listener" output="screen" />
    </launch>
    
  • .vscode폴더 ROS: 실행 구성을 launch.josn추가합니다 . 여기서 "target"은 실행 파일의 절대 경로로 설정되고 새 구성은 다음과 같습니다(ROS: Attach 포함).

{
    
    
    // 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": [
        {
    
    
            "name": "ROS: Launch",
            "type": "ros",
            "request": "launch",
            "target": "/home/lyh/MyFiles/Codes/catkin_ws/src/beginner_tutorials/launch/launch_debug_test.launch"
        },        
        {
    
    
            "name": "ROS: Attach",
            "request": "attach",
            "type": "ros"
        }
    ]
}
  • 다른 실행 및 디버깅 방법은 ROS: Attach와 유사합니다.

전체 프로세스에는 4개의 json 파일이 포함됩니다.

  • c_cpp_properties.json, 주로 사용자 정의 헤더 파일이 있을 때 추가해야 하는 includePath 매개변수입니다.
  • setting.json, 주로 ROS는 Python 프로그래밍, Python 관련 구성 및 기타 구성을 사용합니다. C++를 사용하는 경우에는 변경할 필요가 없습니다.
  • launch.json디버그 모드를 구성할 때 필요한 , C++ 시작 모드에서는 프로그램 매개변수를 변경해야 하며, ros_launch 모드에서는 대상 매개변수를 변경해야 합니다.
  • task.json, 컴파일과 관련된 명령줄을 사용하여 컴파일하는 경우 무시할 수 있습니다.

7. 문제

  • ROS 코드 없음 프롬프트/스마트 프롬프트

코드 프롬프트가 표시되지 않으면 Ctrl+space를 사용합니다. (그렇지 않으면 아래 괄호 안의 내용을 실행합니다.)
(작업 공간의 .vscode 폴더에 있는 c_cpp_properties.json" 파일을 편집하고 "name": "ROS",아래에 intelliSenseMode": "gcc-x64")


참조 링크:

추천

출처blog.csdn.net/lyh458/article/details/115711357