No. 22-10

ROS を用いたシステム構築技術 2

分散処理に適した ROS の通信機能

キーワード：ROS、ロボット、分散処理

はじめにロボットシステム開発の分野では、開発効率の向上を目指し、システム開発用のソフトウェアやツールの標準化が進められています。なかでも、オープンソースの ROS(Robot Operating System)1)と呼ばれるソフトウェアプラットフォームが関心を集めています。現在、ROS は研究分野で広く利用されていますが、その使いやすさから産業分野での利用も期待されています。そのような動向を受け、大阪技術研では ROS を活用したシステムの研究開発や技術支援を行っています 2,3)。
ROS の特徴の１つとして、ロボットシステムに求められる分散処理に適した通信機能が挙げられます。
本稿では、その代表的な通信機能であるトピック通信を紹介します。また、具体的な事例を通じて、ロボットシステムにおけるトピック通信の使い方について解説します。の名前をトピック名といい、トピック名を付けられたROS メッセージをトピックといいます。
図 1 に示すように、トピック通信はトピックを送信(パブリッシュ)するパブリッシャと、受信(サブスクライブ)するサブスクライバから構成されます。パブリッシ
ャ、サブスクライバはノード内で宣言することで使用でき、単一ノードでの複数のパブリッシャまたは複数のサブスクライバの使用、および、パブリッシャとサブスクライバの両方の使用が可能です。1 つのパブリッシャと 1 つのサブスクライバ間の通信のみならず、複数のパブリッシャと複数のサブスクライバ間でも通信が可能です。

ノード 1

サブスクライブ
トピック A

ノード 2
サブスクライバ

パブリッシャ
サブスクライバ

ROS の通信機能 4)
ROS では、柔軟性と再利用性の高いロボットシステムを構築するため、システム全体の処理を小さな処理単位の組み合わせによって実現します。つまり、要求仕様が変わったときには、それに応じて必要な処理を組み替えて対応できるようになっています。
その小さな処理単位は「ノード」と呼ばれ、各ノードは独立し、並列的に動作します。
ROS は、ノード間でデータを送受信する機能をもち、データを ROS メッセージという形式で通信します。そのメッセージには整数型、浮動小数点型といった一般的なデータ型の他に、画像データ用、関節角度用、加速度センサ用といった、ロボットシステムで頻繁に通信されるデータのためのデータ型が標準データ型としてあらかじめ用意されています。
ROS メッセージを利用した通信方式として、単方向非同期通信のトピック通信、双方向同期通信のサービス通信、双方向非同期通信のアクション通信があります。本稿では、ROS で構築したシステムにおいてよく使われるトピック通信を紹介します。
トピック通信は、センサデータの取得など、主に連続的なデータ通信に使われます。そこで送受信される ROS メッセージには固有の名前が付けられ、そパブリッシュ

サブスク
ライブ

パブリッシュ

トピック B

ノード 3
パブリッシャ

図 1 トピック通信の例
アームロボット制御 2)でのメッセージ通信
トピック通信の具体的な事例として、テクニカルシ
ート No.20-13 2) で示したアームロボット制御におけるノード間のトピック通信を示します。この事例では、テーブル上のペットボトルを、ロボット頭部の深度カメラで認識し、ペットボトルに近い方の腕で拾い、バケツに入れる作業をアームロボットが行います。その様子を図 2 に示します。

図 2 アームロボットによる作業

ROS (Robot Operating System)：パブリッシュ

カメラノード

点群データ
トピック

点群処理
ノード

位置・姿勢データ
トピック

選択ノード

：サブスクライブ

アクション
通信

USB接続

ロボ動作ノード
USB接続

深度カメラ

アームロボット
図 3 アームロボット制御におけるノードの構成

このアームロボットの作業は以下の処理単位に分けることができます。
1. 頭部の深度カメラから、テーブル上にある全ての物体を表す点群データを取得する。
2. 点群全体の中から個別のペットボトルを表す点群を選別し、それぞれの位置と姿勢を算出する。
3. 各ペットボトルの位置と姿勢から把持するペットボトルを 1 つ選択し、動かすアームを決める。
4. 選択したペットボトルの位置と姿勢から、アームロボットの各関節角の軌道を計算し、その通りに動かすための指令を出す。
事例では、上記 1.から 4.の処理を実行するノードを、それぞれ、カメラノード、点群処理ノード、選択ノード、ロボ動作ノードとして作成しています。そして、図3 のようにノード間でトピック通信することで、一連の作業を実現しています。
このノード構成では、まず、カメラノードが深度カメラからの点群データを点群データトピックとしてパブリッシュし、それを点群処理ノードがサブスクライブします。点群処理ノードは、サブスクライブした点群を処理し、複数のペットボトルの位置と姿勢を位置・姿勢データトピックとしてパブリッシュします。選択ノードは位置・姿勢データトピックをサブスクライブし、そのデータを処理してから、ロボットを動作させるアクション通信をロボ動作ノードに対して行います。
カメラノードと点群処理ノードとのトピック通信では、点群データ用の sensor_msgs/PoindCloud2 と呼ばれる標準データ型の ROS メッセージを送受信しています。また、点群処理ノードと選択ノードとの間のトピック通信では、位置・姿勢データに用いられる

geometry_msgs/Pose と 呼 ばれ る標 準 データ 型 のROS メッセージを送受信しています。このように、ROS にはロボットシステムの構築に便利なデータ型があらかじめ用意されており、それらを使うことで、ノード間のトピック通信を容易に構成できます。
ROS のノードは、送信先のノードを指定せず、データをトピックとして送信(パブリッシュ)します。また、トピックを受信(サブスクライブ)するノードは、パブリッシュされているトピック名に着目し、トピックをサブスクライブします。そのため、例えば、図 3 のカメラノードは、その処理を変更することなく、点群データトピックをサブスクライブするノードであれば、どのようなノードとでもトピック通信できます。つまり、他のノードのサブスクライバでも受信できます。この仕組みを利用することで、点群処理ノードとは異なる処理を他のノードによって並列的に行うことができます。
この通信の仕組みと独立した分散処理により、ROSはノードの再利用を容易にしています。
おわりに
本稿では、分散処理に適した ROS の通信機能について解説しました。当研究所では ROS によるシステム開発を支援しております。ご興味のある方はお気軽にお問合せ下さい。
参考文献
1) https://www.ros.org/
2) 大阪産業技術研究所テクニカルシート
No.20-13 「ROS を用いたアームロボット制御１
ツール・ライブラリとその活用事例」
3) 大阪産業技術研究所テクニカルシート
No.20-15 「ROS を用いたアームロボット制御２
モーションキャプチャを用いた動作教示」
4) 表, 鄭, 倉爪, ROS ロボットプログラミングバイ
ブル, オーム社, (2018).

発行日 2022 年 5 月 1 日
作成者 電子・機械システム研究部 知能機械研究室
Phone: 0725-51-2677、0725-51-2678
E-mail: akairyo@orist.jp、miyajima@orist.jp

赤井亮太、宮島健