ROS開発におけるエディタ選択 ( Visual Studio Code + ROS 編 )(2)

著者:Yumiko Suzuki

ROS開発におけるエディタ選択 ( Visual Studio Code + ROS 編 )(2)

前回は, Visual Studio Code にROSのプラグインをインストールした環境でパッケージ作成するお話をしました.
今回はこの環境を使ってC++プログラムを作成していきます.

 

C++でコード作成

今回はros wikiのチュートリアルで用いられているコードを元に進めます.コードの詳細についてはこちらからお願いします.

パッケージが作成されていると左側のエクスプローラーのcatkin_ws/src/sample_vs_code以下にsrc,includeディレクトリが作成されています.srcディレクトリを選択し右クリックで「新しいファイル」を選択し,talker.cpp,listener.cppを作成します.

talker.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"

#include 

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");

  ros::NodeHandle n;

  ros::Publisher chatter_pub = n.advertise("chatter", 1000);

  ros::Rate loop_rate(10);

  int count = 0;
  while (ros::ok())
  {
    std_msgs::String msg;

    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
    ++count;
  }

  return 0;
}

listener.cpp

#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;
}

 
この時のCMakeListは以下のようになります.
CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(sample_vs_code)

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs genmsg)

## Generate added messages and services
generate_messages(DEPENDENCIES std_msgs)

## Declare a catkin package
catkin_package()

## Build talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})

add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})

これらはROS Wikiのチュートリアルをそのまま引用しています.上記のコードをコピーアンドペーストしたらCtrl+sで保存します.

 

catkin_make

それではコンパイルしてみます.コンパイルはcatkin_makeコマンドにより行います.VS Codeでは上記のメニューバーから「タスク」➡︎「ビルドタスクの実行」(もしくはCtrl+Shift+b)で「catkin: make」を選択します.すると下部にターミナルが生成され,catkin_makeが実行されます.

 

rosrun & roslaunch

コンパイルが完了したら実際に実行します.catkin_makeによりtalkerとlistenerというノードが作成されましたので,これらを起動します.

まずはroscoreを立ち上げます.roscoreはコマンドパレットを起動し,「ROS: Start Core」を選択して起動します.起動ができていると左下のROS Masterという項目にチェックが入ります.

roscoreが立ち上がったら試しにrosrunコマンドでtalkerノードを起動してみます.VS Codeからrosrunコマンドを使用するには,F5を押して「ROS」➡︎「rosrun」でパッケージ名,ノード名を入力し起動します.そうすると下部にデバッグコンソールが立ち上がり,hello worldと回数が表示されます.

続いて複数ノードの起動ですが,VS Codeでは元々複数の実行ファイルの起動ができないので,talker,listenerノードをlaunchファイルでまとめて起動します.sample_vs_codeディレクトリ以下にlaunchディレクトリを作成し,以下のコードをchatter.launchというファイル名で保存します.

chatter.launch

<?xml version="1.0"?>
<launch>
    <node pkg="sample_vs_code" name="talker" type="talker" />
    <node pkg="sample_vs_code" name="listener" type="listener" />
</launch>

 
roslaunchコマンドはrosrunコマンドの時と同じくF5を押して「ROS」➡︎「roslaunch」でパッケージ名,launchファイル名を入力して起動します.これらはターミナルに結果を出力するのでVS Code上で表示の確認ができないのですが,ここではきちんとノードが起動されているかどうかの確認のみを行います.一旦別途ターミナルを起動してrosnode listにより起動できているか確認します.

/listener
/rosout
/talker

と出ていればOKです.

 

終わりに

VS Codeのプラグインを使用することによってIDEを使用する感覚でROSプログラミングをすることができました.シミュレータや可視化ツールなどを同時に起動しているとPCの挙動が重くなってしまうのですが,VS Codeはそのものが高速かつ軽量なため,バックグラウンドで立ち上げっぱなしにしていても問題ないのが魅力です.

段々とLinux環境での開発に慣れてくるとコマンドラインベースでrosrunやroslaunchをした方が早く感じるかもしれませんが,それでもエディタやコンパイルツールとしてVS Codeを使うのは比較的おすすめなやり方だと思うので是非使ってみてください.

--
CIT 山本龍

著者について

Yumiko Suzuki administrator