LoginSignup
5
8

More than 3 years have passed since last update.

ROS + VScode の設定 まとめメモ

Last updated at Posted at 2021-03-28

ROS + VScode 設定


本記事は、自己の備忘録のためにVisual studio codeでROSのソースをデバッグするまでの設定方法をまとめる。かなりくどい感じでまとめているので、見ればでもわかると思われる。

1.VS CODE インストール

Vs codeをターミナルよりダウンロードとインストールする。

2.ROS インストール

ROSのチュートリアルを見ればインストールできる。

3.VS CODE エクステンションインストール

エクステンションのメニューから下記のモノをインストールする。

1)ROS Develop Robot Operating System(ROS) with Visual studio Code
2)CMake
3)CMakeTools

image.png

4.catkinのワークスペースディレクトとビルド(初期)

ワークスペースの生成

ホームディレクトリでいいので、そこにワークスペース用のディレクトリを生成する。とくに名前は決まっていないが、
ROSのホームページや他の参考ページの殆どはcatkin_wsとなっている。オプションの-Pをつけて、ソースコードファイルを保管するデイレクトリであるsrcを一気に作成してしまう。

cd ~
mkdir -p catkin_ws/src
cd catkin_ws

ビルド(初期)

catkinでビルドして、ビルド条件など自動構成されるディレクトリやファイルを生成する。

cd ~
cd catkin_ws
catkin build

ビルド成功時のターミナル
image.png

4.VS Codeのビルド条件の設定とソースコード(トピックのパブリッシュとサブスクライバ:ROSのチュートリアルにあるやつ)

VSCode起動

ワークスペースのディレクトリでVsCodeを起動する

cd ~
cd catkin_ws
code .

Catkinのパッケージをエクステンション機能で生成

コマンドパレットより、>ROS -> Create Catkin Package で生成する。
image.png

例えば、パッケージ名:publishierとする。この時、依存関係も聞いてくるので、
基本的には、std_msgs roscppを使用すればよい。**Pythonの場合は、rospyを追加する。
image.png

パッケージ生成後の様子
image.png

パッケージ内のCMakeListsを設定する(シンプルな設定とする)

関係のあるところ以外、全て省略としている。


(省略)

## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++14)

(省略)

## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
## ソースファイルを分割してコンパイルしたい場合は、
#add_executable(${PROJECT_NAME}_node src/publisher_node1.cpp src/publisher_node2.cpp)となる

add_executable(${PROJECT_NAME}_node src/publisher_node.cpp)


(省略)

## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node
   ${catkin_LIBRARIES}
 )

srcディレクトリのソースファイルを生成

ディレクトリは、よく間違いやすいので、注意!!

src/
|-source1.cpp
|-source2.cpp
CMakeLists.txt
package.xml

image.png

ソースコードは、自分で組んでもいいし、動作確認やROSのPUB/SUBを体感する(めんどくさい)場合は、
下記のソースをコピーして使うと良い。

Publisher_node.cpp

#include <ros/ros.h>
#include <std_msgs/String.h>

int main(int argv,char** argc){

   ros::init(argv,argc,"publisher_node");
   ros::NodeHandle nh;
   ros::Rate loop_rate(10);
   ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", 10);

   while (ros::ok())
   {
     std_msgs::String msg;
     std::stringstream ss;
     ss << "hello world ";
     msg.data = ss.str();
    ROS_INFO("%s", msg.data.c_str());

    chatter_pub.publish(msg);
    ros::spinOnce();
    loop_rate.sleep();

   }

}

c_cpp_properties.json の設定

"/src/publisher/include/**"を追記する。
パッケージを追加する時も同様に、そのパッケージのインクルードディレクトリのパスを設定する。

c_cpp_properties.json

{
  "configurations": [
    {
      "browse": {
        "databaseFilename": "",
        "limitSymbolsToIncludedHeaders": true
      },
      "includePath": [
        "/opt/ros/melodic/include/**",
        "/src/publisher/include/**",
        "/usr/include/**"
      ],
      "name": "ROS"
    }
  ],
  "version": 4
}

launchファイルの作成と設定

srcフォルダ直下にlaunchファイルを作成する。名前は何でもより、拡張子を.launchとする
例:nodes.launch

launchファイルの作成

image.png

launchファイルの内容は下記である。


pkg

パッケージ名

name

ノードのエリアシス:ユニークな名前にすること。同じ名前は起動できない。アノニマスにすれば同じパッケージを起動できる。

type

Nodeのプログラム実行ファイル Pythonの場合がスクリプトファイル名(.py)

launchファイル

<launch>
    <node pkg="publisher" name="publisher" type="publisher_node"/>
</launch>

VScodeのビルドタスクファイルの作成と設定

下記の要領で、タスクファイル(テンプレート)を生成する。

タスクファイルの作成

image.png

タスクファイルの内容は下記のように書き換える。
なお、コマンド引数の--cmake-args" "-DCMAKE_BUILD_TYPE=Debug" は、
デバッカを動かく(デバッグ)際に必要で、このオプションがないとブレークポイントが効かないので注意する。

タスクファイル

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "ROS: catkin_build",
            "type": "shell",
            "command": "catkin",
            "args": [
                "build",
                "--cmake-args",
                "-DCMAKE_BUILD_TYPE=Debug",
            ],
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true 
            }
        }
    ]
}

ビルド

Ctrl+Shift+Bでビルドができるようになっている。

また、下記のようにメニュからビルドタスクを実行しても良い。

メニュー>ビルドタスク

image.png
image.png

ビルド成功時の様子

image.png

VScodeのlaunch.Jsonの設定

launch.jsonファイルを作成し、Debug RUNの実行条件に、ROSの.launchファイルを実行するように紐付けを行う。

launch.jsonファイル作成

image.png

launch.jsonファイルを下記のように書き換える。
なお、targetは、、ROSの.launchファイルの絶対パスを指定する。
絶対パスは、下記のようなコマンド調べられる。

絶対パス

cd ~
cd catkin_win
pwd

launch.json

{
    "configurations": [
    {
        "name": "ROS: Launch",
        "type": "ros",
        "request": "launch",
        "target": "/home/rosdevloper/catkin_ws/src/nodes.launch"
    }
    ]
}

5.VSCode 再度立ち上げ

lauch.jsonの作成または変更後、デバックRUN実行しても、上手く起動しないため、一度、VScodeを再度立ち上げしたほうがよい(2021/03/27時点)※良い方法がわかれば記事内容更新します。

6.デバックRUN実行

設定などの誤りがなければF5で実行できる。

デバックRUN実行成功時のターミナルの様子

image.png

デバックRUN実行 失敗時のターミナルの様子

例:ノードが見つからない場合:ROSのLAUNCHファイルの絶対パスが違う
"target": "/home/rosdevloper/catkin_temp_ws/src/nodes.launch"
image.png

7.Subscriber.cppの追加

同様にSubscriberのパッケージをエクステンション機能より生成し、Subscriberのソースコードをsrc/追加する。
下記のソースをコピーして使うと良い。

#include <ros/ros.h>
#include <std_msgs/String.h>

void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
 ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;
    ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
    ros::spin();

    return 0;

}

8. #4−5で該当箇所をもう一度行う。

.launchの変更

<launch>
    <node pkg="publisher" name="publisher" type=publisher_node"/>
    <node pkg="subscriber" name="subscriber" type=subscriber_node"/>
</launch>

c_cpp_properties.json

      "includePath": [
        "/opt/ros/melodic/include/**",
        "/src/publisher/include/**",
        "/src/subscriber/include/**",
        "/usr/include/**"
}

CMakeLists.txt

(省略:内容は同じ)

8.デバック ブレークポイント

任意の場所でブレークポイントを行い、デバックRUN実行で、ブレークポイントが有効になっている!!
image.png

値も参照できる!

image.png

パッケージも切り替えることがきる

image.png

                                                     以上

5
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8