はじめに
チュートリアルが一番わかり易いので翻訳します。
https://docs.ros.org/en/galactic/Tutorials/Actions/Creating-an-Action.html
Action定義の作成方法
目標: Ros2 Packageの中にAction定義を追加できるようになる
難易度: 中
時間: 5 分
背景
先のチュートリアル
(https://docs.ros.org/en/galactic/Tutorials/Understanding-ROS2-Actions.html)
ですでにActionについては学んだかと思います。
メッセージ定義(topics/msg)やサービス定義(services/srv)がカスタマイズできたように、
Action定義についても、カスタマイズすることができます。
このチュートリアルでは、どのように定義し、どのようにBuildするかについて、説明します。
Action ServerとAction Client の作成方法については、次のチュートリアルで解説します。
前提条件
- ros2とcolconをインストールしていること
-
action_tutorials_interfaces
という名前でパッケージを作成していること
mkdir -p action_ws\src
cd action_ws\src
ros2 pkg create action_tutorials_interfaces
やり方
1 actionの定義。
actionは .action
という拡張子で下記のように定義していきます:
# Request
---
# Result
---
# Feedback
3つのメッセージを ---
で分けて定義します。
- Request:Action ClientからAction Server に送信され、Serverの応答が開始されます。
- Result:応答が終了するとがAction ServerからAction Clientに送信されます。
- Feedback:定期的にAction ServerからAction Clientに対して、応答が今どうなっているかについてのメッセージが送られます。
ここからフィボナッチ数列 を計算するAction定義を作成してみます。
action_tutorials_interfaces
のパッケージ直下に
action
フォルダを作成します。:
cd action_tutorials_interfaces
mkdir action
action
フォルダの中に
Fibonacci.action
というファイルを作成し、
下記のように定義情報を書きます。:
int32 order
---
int32[] sequence
---
int32[] partial_sequence
Requestは、フィボナッチ数列の項数とします。
Resultは、フィボナッチ数列
Feedbackは、計算途中のフィボナッチ数列とします。
2 action定義のビルド
ここからはビルドする方法について説明します。
action_tutorials_interfaces
パッケージ内、
CMakeLists.txt
の中の
ament_package()
の記載の前に
下記コードを追記します。
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"action/Fibonacci.action"
)
更に package.xml
の中に、下記を追記します。:
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<depend>action_msgs</depend>
<member_of_group>rosidl_interface_packages</member_of_group>
Actionの定義の中にはメタデータが(例えば goal IDs)が含まれているため、
action_msgsに依存する必要があることに注意してください。
これでPackage内に Fibonacci
actionの定義ビルドできる状態となりました。
# Change to the root of the workspace
cd ~/action_ws
# Build
colcon build
慣習として、actionという文言がパッケージ名の前につけることが多く、
Fibonacci actionを参照したい場合は、下記のように書きます。
action_tutorials_interfaces/action/Fibonacci
.
ちゃんと使える状態になっているかを確認するために、下記のようなコマンドが利用できます。
ros2 interface show action_tutorials_interfaces/action/Fibonacci
Fibonacci action の定義を確認できます。
まとめ
このチュートリアルでは、Action定義の構造について学びました。
また、この定義を利用できる状態にするために
CMakeLists.txt
と package.xml
を変更する必要があることを学びました。
うまくできたかを確認する方法について学びました。
次のステップ
次は、この定義を使って、ServerとClientをどのように作るかを学びます。
関連の資料
ROS Actionの詳細が知りたい場合は、
http://design.ros2.org/articles/actions.html
を見てください。