vscode での ROS プロジェクトのデバッグ、ノード デバッグ、マルチノード デバッグ、roslauch デバッグ

この記事には、デバッグ環境の構築、ノードまたは起動ファイルの操作、単一ノードのデバッグ、マルチノード/起動ファイル (roslaunch) のデバッグ、各プロセスでの最も一般的な問題と解決策など、vscode での環境が含まれています。

1. 関連プラグインのインストール

  • ROSプラグイン。
  • C++ 構成: 2 つのプラグインc/c++およびC++ Intellisenseをインストールします。
  • CMakeLists.txt ファイルの構文強調表示を構成します。[拡張機能] に「txt」と入力して、Txt Syntaxをインストールします。
  • msg、srv、アクションの構文の強調表示を構成します。[拡張機能] に 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 TaskCompile をクリックする前に、コンパイル済みパッケージが配置されているワークスペースのフォルダーを 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、 Enter を押してros:run a rose executable、対応するパッケージとノード、およびパラメータを順番に入力します。

5.2 方法 2: コマンドラインを使用する

vscode を使用するには手順が多すぎるため、コマンド ラインを使用することをお勧めします。ターミナルの直下にありますrosrun <package> <node> <args>


6. デバッグ

6.1 単一プログラムのデバッグ

ROS: アタッチモード

このモードは一般的に単一プログラムに使用されattach、設定は次のとおりです。

  • 新しい構成の作成: 図内のアイコンを順番にクリックし、 を選択して、ROSフォルダーの下にファイルを自動的に生成しますROS: Attach(または、Ctrl + Shift + D を使用してドロップダウン リストから構成を追加し、ファイルを自動的に生成します)。 。デフォルトの構成は次のとおりです。.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.txtadd inSET(CMAKE_BUILD_TYPE "RelWithDebInfo")またはtask.jsonadd in args "-DCMAKE_BUILD_TYPE=RelWithDebInfo"(一部のブログ投稿には、必ずそうする必要があると書かれていますRelWithDebInfoが、ROS プラグインの公式 Web サイトには、デバッグ モードを使用して、デバッグ セッションを開始する前に自動的にビルドするタスクを使用することもでき、両方をテストできると記載されています。)

  • C++ のデバッグ: 最初にブレークポイントを設定し、次にノードを実行し、次に ROS を実行します: 構成のアタッチ

  • Pythonをデバッグする

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>
    
  • ROS: Launch構成を.vscodeフォルダー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 と似ています。

プロセス全体には 4 つの json ファイルが含まれます。

  • c_cpp_properties.json、主に includePath パラメーターで、カスタム ヘッダー ファイルがある場合に追加する必要があります。
  • setting.json, 主にROSはPythonプログラミング、Python関連の設定、その他の設定を使用します。C++ を使用している場合は、変更する必要はありません。
  • launch.jsonは、デバッグ モードを設定するときに必要です。C++ スタートアップ モードでは、プログラム パラメーターを変更する必要があります。ros_launch モードでは、ターゲット パラメーターを変更する必要があります。
  • task.jsonコンパイルに関連するものは、コマンド ラインを使用してコンパイルする場合は無視できます。

7. 発行

  • ROS コードなしプロンプト/スマート プロンプト

コード プロンプトが表示されない場合は、Ctrl+スペースを使用します (表示されない場合は、下の括弧内の内容を実行します)
(ワークスペースの .vscode フォルダーにある c_cpp_properties.json ファイルを編集し、"name": "ROS",下にintelliSenseMode": "gcc-x64")。


参考リンク:

おすすめ

転載: blog.csdn.net/lyh458/article/details/115711357