SWEST21 インタラクティブセッション
研究発表部⾨

ROS２のためのノードの再利⽤性を⾼めるパッケージ設計⽀援ツール構築に向けて後藤 孝⾏†1

井上 弘⼠†1倉⽖ 亮†1

九州⼤学⼤学院システム情報科学研究院†1
概要： ROS が実現するロボットソフトウェアの共同開発をより推進していくには，パッケージを構成するノードの再利⽤性を⾼め，それらノードを組み合わせることで最⼩限のコーディングで新たなパッケージを簡単に作れることが必要である．我々は，ノード探索⽀援やパッケージ構成⽀援，コーディング⽀援，テスト⽀援，共有⽀援によって，ノードの再利⽤性を⾼め簡単にノードを組み替えられる，より効率的にパッケージを作成可能な設計⽀援ツールを提案する．

1. はじめにロボットソフトウェアプラットフォームである ROS1は，ロボットソフトウェアの共同開発を全世界的に推進するため，分散プロセス，パッケージ管理，公開リポジトリ，API の整備，多数のプログラミング⾔語をサポート，といった特徴を備えている[1]．この特徴から，ROS はソフトウェアの共同開発が容易であり，また，コードの再利⽤も活発にして，ロボット研究を加速させている．
しかし，多くのパッケージが公開されている⼀⽅で，ROS ソフトウェア検索サイト（ROSIndex2）においてパッケージの説明が詳細に記述されていないこともあって，欲しい機能を持つパッケージを⾒つけるのは簡単ではない．また，基本的にパッケージが検索対象になっており，ノード単位での検索の仕組みはまだ⽤意されていない．⽬的のパッケージを⾒つけるためには ROS Index に登録するパッケージ説明の記述が重要だが，⾃由記述のため開発者によって詳しさにバラツキがある．パッケージで利⽤可能な ROS ノードやその ROS インターフェースを登録する場合は，XML の記述が必要でメタデータ記述の⼿間は少なくない．
ノード⾃体の開発においても，ノードが実現する機能の粒度は開発者に依存しているため，そのままノードを流⽤できないことも多い．ノードを細かくすることで特定の機能に特化した再利⽤性の⾼いノードが作れるが，ソースコードの記述が増え（例えば，ノードごとに必要な
1
2

http://www.ros.org/
https://index.ros.org/

ノード間を繋げるための記述など），作成コストが⼤きくなる．また，ノード間でデータを送受信するには，メッセージのデータ構造を同じにする必要があるが，⽤途に応じたメッセージの共通化はとくにおこなわれていない．
以上のことから，既存のノードを組み合わせて，最⼩限のコーディングで新たなパッケージ作成するといった効率的な開発は，現在の ROS開発環境においては難しいといえる．しかし，ロボットソフトウェアの共同開発をより推進していくには，ノードの再利⽤性を向上させ既存のノードだけでも簡単に新たなパッケージを作成可能にして，多様なユーザを呼び込むことができる開発環境を実現することが重要である．
そこで我々は，ノード作成やメタデータ記述などを⽀援することによってノードの再利⽤性を⾼め，これらノードを簡単に組み合わせられることで，より効率的にパッケージを作成できる ROS2 向け設計⽀援ツールを提案する．

2. ノードの再利⽤性を⾼めるパッケージ設計
⽀援ツール
提案するパッケージ設計⽀援ツールには，検索，作成，テスト，共有，の⼤きく４つの機能があり，これらがほぼシームレスに⾏えることで，効率的なパッケージ作成を可能にする（表１）．これを実現にするために，「ノード探索⽀援」，「パッケージ構成⽀援」，「コーディング⽀援」，「テスト⽀援」，「共有⽀援」といった提案をおこない実装していく．

機能
現状提案

検索作成

テスト

共有

パッケージを作成する上で必要な機能を実装している既存のノードを探す．

ノードを組み合わせてパッケージを構成．またノードのパラメタを設定．

作成したパッケージやそれを構成するノードが正しく動作するかテスト．

パッケージに関する情報を共有する．

基本的にパッケージを対象に検索を⾏う．ノード単位での検索は困難．

launch ファイルによるパッケージ構成，パラメタ設定．

テストに応じてモック機能をもつノードなどを⽤意．

ノード単位の検索を⾏い，⽬的の機能をもつ既存のノードがあれば，パッケージに組み込む．

ビジュアルなデータフロープ
ログラミング環境でパッケージを構成． 新規ノードの作成⽀援．

モック機能を組み込み，ノードのデバッグを容易に．またダミーデータを出⼒する仮想的なテスト環境を提供．

パッケージ検索サイトにてメタデータや各種情報を⼊⼒．
詳細なメタデータは XML の記述が必要．
設定情報からメタデータを⾃動抽出．また，⼊⼒候補の提⽰によって表記揺れを防ぐ．

表 1. 提案するパッケージ設計⽀援ツール

2.1 提案例
ノード探索⽀援 ノード単位の検索を実現して，検索結果からシームレスにパッケージへ取り込めるようにする．パッケージを構成するノードやノードで使われているメッセージから関連するノードを提⽰する．
パッケージ構成⽀援 ノードを視覚的なオブジ
ェクトで表現して，そのノード同⼠をつなげてパッケージを構成していく．新規にノードを作る場合は送受信で⽤いるメッセージ選択などノードの定義を⾏う．ROS の開発にデータフロープログラミングを導⼊する試みはいくつかあるが（例えば[2]），ROS２に対応しているものはまだなく，また，launch ファイルの⽣成と編集が主な⽬的に対して，提案ツールではダイナミックリマッピングを実現して，ノードを実⾏しながらのパッケージ開発を可能にする．これによってパッケージ設計の試⾏錯誤がよりしやすくなる．
コーディング⽀援 パッケージ構成⽀援で作られたノードのつながりや定義に応じて，新規ノードのソースコードの雛形を⽣成する．定型的なコードを⾃動⽣成することで，ロジック部分に集中してコーディングができる．
テスト⽀援 パッケージを構成するノードの起動，停⽌などの管理を⾏う．モック機能を組み込み，ノードのデバックを⽀援．またダミーデータを出⼒する仮想的なテスト環境を提供する
ことで，物理デバイスを⽤意しなくてもデータが必要なノードのテストを可能にする．

共有⽀援 設定情報などからパッケージやノードに関するメタデータを抽出して，メタデータの記述の負担を軽減する．また抽出したメタデータを収集してノードの新規作成時に提⽰することで，メッセージの再利⽤などをユーザに促す．これによって，ノードの再利⽤性を向上させる．
2.2 進捗
パッケージ構成⽀援の開発を中⼼に⾏っており，ダイナミックリマッピングは，ハブとなるノードを⽤意することで実現して，ノードのプロセスを動かしたままのノードの組み換えを可能した．データフロープログラミング環境はウェブアプリケーションとして実装して，多様な運⽤環境に対応可能にした．
3. おわりにノードの再利⽤性を⾼め効率的にパッケージを作成できる設計⽀援ツールを提案した．2019 年度内に，第⼀バージョンをオープンソースとして公開する予定である．
謝辞
本研究（の⼀部）は，内閣府が進める「戦略的イノベーション創造プログラム（SIP）第 2 期／フィジカル空間デジタルデータ処理基盤」（管理法⼈：NEDO）において実施中．

参考⽂献[1] 表 允晳, 倉⽖ 亮 , じょん りょうん. ROS ロボットプ
ログラミングバイブル. オーム社, 2018, 12p.
[2] F. Müllers, D. Holz, S. Behnke, "rxDeveloper: GUIAided Software Development in ROS", SDIR VII - ICRA,
2012.