ROS(ROS2)- Action - 概要


 クラウディア


1. 概要
2. 動作
3. 備考

1. 概要

 「Topic(node)・Service」いう通信形式を試してきました。  (カタカナで書くと、別のものと混同するおそれがあるので、正式名の英語にすることにしました)  「ROS2」では、他にもありまして、その中のひとつ、「Action」という通信形式を試してみます。  参考サイトによれば。
ROS1 では actionlib として実装されていた機能です。ROS2 からは rclcpp_action としてより強いサポートとなりました。
通常の ROS トピックと同じように msg を定義して、client 側、server 側の ROS ノードの間でやり取りをします。topic とは違い双方向のやり取りをすることが特徴です。
構成が複雑になるために使いすぎは厳禁です。action が必要になる=双方向のやり取りが必要になる=(本来なら)ノードを分けずに一緒に実装すべき です。
 だそうです。  「Topic」や「Service」は、1方向のみあるいは、1回につき1回の送受信しかできないので、単純な動作しかできませんが、「Action」を使えば、少し複雑な動作を実装できそうです。

2. 動作

 参考サイトの「GIF animation」を掲載しておきます。  (著作権の問題が発生したら、すぐに削除します)

 これを読むと、わかりやすいですね。
 クライアント・サーバ間に下記の構成を用意して。

	クライアント			Action			サーバ
	Goal Service Client		Goal Service	Goal Service Server
	Feedback Subscriber		Feedback Topic	Feedback Publisher
	Request Service client	Request Service	Request Service Server

 「Goal Service」は、1「Request」について、1「Responce」を返す。
 「Request Service」は、1「Request」に対して、サーバが、複数回の「Feedback」を返したのち、「Responce」を返すという形式になっているようです。

3. 備考

 本章は、下記のサイトを参考にさせていただきました。
Understanding actions — ROS 2 Documentation: Rolling documentation」
「ROS2 講座18 action を使う #C++

AbemaTV 無料体験