이 문서에는 디버깅 환경 구축, 노드 또는 실행 파일 작업, 단일 노드 디버깅, 다중 노드/실행 파일(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
.vscode
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": [ { "name": "ROS: Attach", //调试配置的名称,此处为ROS: Attach "request": "attach", "type": "ros" } ] }
오른쪽 하단에 있는 구성 추가 버튼을 클릭하여 추가할 수도 있습니다 .
-
프로그램을 컴파일합니다(빌드 유형이 RelWithDebInfo 또는 Debug인지 확인):
Cmakelists.txt
추가SET(CMAKE_BUILD_TYPE "RelWithDebInfo")
또는task.json
args 를 추가합니다"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
. (일부 블로그 게시물에서는 반드시 그래야 한다고 말하지만RelWithDebInfo
ROS 플러그인 공식 웹사이트에서는 디버그 모드를 사용하여 디버그 세션을 시작하기 전에 자동으로 빌드하는 작업을 사용할 수도 있고 두 가지를 모두 테스트할 수도 있다고 나와 있습니다.) -
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"
)
참조 링크: