[ROS2]独自インターフェイスの作成 - graspPlugin/wiki GitHub Wiki
ROS2における独自インターフェイス(Custom interface)の作成手順を示します.
インターフェイスとはトピック通信においてやり取りを行うメッセージの型と,サービス通信におけるリクエストとレスポンスの型を総称した呼び方です.
- | version |
---|---|
Ubuntu | 20.04 |
ROS2 | Foxy |
インターフェイスで使用できる基本の型はここに示されているとおりです.
単にint
やfloat
という名前は存在せず,必ずビット数を後ろにつける必要があります(int32
やfloat64
など).
my_pkg
パッケージに独自インターフェイスを作成することとします.
トピック用インターフェイスとサービス用インターフェイスの定義ファイルは慣例的にそれぞれmsg/
とsrv/
に格納します.
cd my_pkg/
mkdir msg
mkdir srv
ファイルの命名は以下の規則に従う必要があります.
- 最初の文字は大文字を使用
- 単語や意味の区切りには大文字を使用
- アンダースコアは使用しない
トピック用インターフェイスの定義ファイルの拡張子は.msg
です.
今回はSampleMsg.msg
という定義ファイルを作成します.
このファイルに通信したいメッセージの中身を定義します.今回はfloat64
型変数1つとint32
型変数1つを持つメッセージを定義します.
SampleMsg.msg
には以下のように変数の型名と変数名を記述します.
float64 f64
int32 i32
サービス用インターフェイスの定義ファイルの拡張子は.srv
です.
今回はSampleSrv.srv
という定義ファイルを作成します.
このファイルに通信したいサービスの中身(リクエストとレスポンス)を定義します.
今回はfloat64
型変数2つをリクエストとして送り,int32
型変数1つがレスポンスとして帰ってくるサービスを定義します.
SampleSrv.srv
には以下のよう記述します.
float64 f64_1
float64 f64_2
---
int32 i32
はじめにリクエストで送る変数の型名と変数名を記述します.
その下に-
(ハイフン)を3つを連ねた行を挿入し,その後ろにレスポンスで帰ってくる変数の型名と変数名を記述します.
独自インターフェイスをビルドするためにpackage.xml
のpackage 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>
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