[ROS2]独自インターフェイスの作成 - graspPlugin/wiki GitHub Wiki

はじめに

ROS2における独自インターフェイス(Custom interface)の作成手順を示します.

インターフェイスとはトピック通信においてやり取りを行うメッセージの型と,サービス通信におけるリクエストとレスポンスの型を総称した呼び方です.

環境

- version
Ubuntu 20.04
ROS2 Foxy

使用できる基本データ型

インターフェイスで使用できる基本の型はここに示されているとおりです.

単にintfloatという名前は存在せず,必ずビット数を後ろにつける必要があります(int32float64など).

定義ファイルの作成

ファイル場所

my_pkgパッケージに独自インターフェイスを作成することとします.

トピック用インターフェイスとサービス用インターフェイスの定義ファイルは慣例的にそれぞれmsg/srv/に格納します.

cd my_pkg/
mkdir msg
mkdir srv

ファイルの命名規則

ファイルの命名は以下の規則に従う必要があります.

  • 最初の文字は大文字を使用
  • 単語や意味の区切りには大文字を使用
  • アンダースコアは使用しない

msgファイル(トピック用)

トピック用インターフェイスの定義ファイルの拡張子は.msgです.

今回はSampleMsg.msgという定義ファイルを作成します.

このファイルに通信したいメッセージの中身を定義します.今回はfloat64型変数1つとint32型変数1つを持つメッセージを定義します.

SampleMsg.msgには以下のように変数の型名と変数名を記述します.

float64 f64
int32 i32

srvファイル(サービス用)

サービス用インターフェイスの定義ファイルの拡張子は.srvです.

今回はSampleSrv.srvという定義ファイルを作成します.

このファイルに通信したいサービスの中身(リクエストとレスポンス)を定義します.

今回はfloat64型変数2つをリクエストとして送り,int32型変数1つがレスポンスとして帰ってくるサービスを定義します.

SampleSrv.srvには以下のよう記述します.

float64 f64_1
float64 f64_2
---
int32 i32

はじめにリクエストで送る変数の型名と変数名を記述します.

その下に-(ハイフン)を3つを連ねた行を挿入し,その後ろにレスポンスで帰ってくる変数の型名と変数名を記述します.

package.xmlの編集

独自インターフェイスをビルドするためにpackage.xmlpackage formatタグの下に以下の3行を追記します.

package formatが3でなければ3に変更します.

<package format="3">
  <depend>rosidl_default_generators</depend>
  <depend>rosidl_default_runtime</depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

CMakeLists.txtの編集

find_packageを用いて独自インターフェイス作成用のパッケージrosidl_default_generatorsを読み込みます.

find_package(rosidl_default_generators REQUIRED)

作成した定義ファイルを読み込み,インターフェイスの生成を行います.

set(msg_files
  "msg/SampleMsg.msg"
)
set(srv_files
  "srv/SampleSrv.srv"
)
rosidl_generate_interfaces(${PROJECT_NAME}
  ${msg_files}
  ${srv_files}
)
ament_export_dependencies(rosidl_default_runtime)

ビルドと確認

ワークスペースディレクトリでビルドを行います.

colcon build

local_setup.bashを読み込みます.

source install/local_setup.bash

以下のコマンドで認識されているインターフェイスの一覧を出力することができます.

ros2 interface list

出力が長いのでgrepコマンドを用いて文字列my_pkgが含まれる行だけ抜き出して出力します.

ros2 interface list | grep my_pkg

以下のように出力されたら成功です.

    my_pkg/msg/SampleMsg
    my_pkg/srv/SampleSrv

参考サイト

⚠️ **GitHub.com Fallback** ⚠️