僕がROSよりもRTMを使う11の理由 (2016年バージョン)

まず言っとくと,タイトルは釣りです.ざっと書いたら11個になった(笑)そのうちNAVERまとめにでも転載しよっか.

別に僕はアンチROSではないし,むしろROS使って仕事もしてる.
ただ,よく聞かれるし,へぇ〜,とは言われるので,「お客様がROS指定じゃなければできればRTミドルウェア (RTM) 使いたいんですけど・・・という時にいう決まり文句」をここにまとめとく.

3つのカテゴリに分けとく.というか大きな理由は3つだ.

  • 手離れが良い
  • 仕事としてまとめやすい
  • その他,いいわけがしやすい

手離れが良い

ホント,どうやってお客様の現場に行かないで済むかってのは誰もが思ってるテーマだと思うんだけど,ROSだとつまんないところでつまづく場合が少なくない.いくらか失敗して,RTMの方がこの方向の心配は少ないんだな,と思うようになった.

1. Windowsでも使える

これがかなりデカい.ROSもWindowsで動くけどグダグダ.

まず,Unixの技術者を抱えてる会社が少ない.仮にいてもソフトウェア部門のエンジニアだったりして,お客様のロボット部には応援で来るだけ,という状況が多い.ロボットは電機だけじゃないんだけどね.こういう会社は多い.
こうなると設定ファイルを少し編集するだけで一苦労になる.Windowsなら「どこそこにあるファイルをメモ帳で」になるのですが,Linuxとなるとlsやcdの使い方からレクチャーが必要な場合があるわけです.ツリー状のファイル構造とかね.Windowsもツリー状なんですがねぇ・・・これだとデータを吸い出したりするだけでも大変.

あと手離れとは関係ないけど,現場で動くロボットを作る時にWindowsでしか動かないハードウェアってのが多い.BtoB製品で特に.
まあ,どういう分野で,というのは仕事してる内容を言っちゃうことになるから言えないんだけど,とにかくWindowsじゃないと,という場合が多いのです.

2. バイナリで配信がしやすい

ソフトウェアを継続的に配信したいというのは統一されたテーマなんだけど,ネットに繋がない機器だったりするし,ネットにつなぐと自動アップデートして不具合が出る,という問題もある.
でも,〇〇した時の動きをこうしたいんだけど・・・というときに,それをパラメータやコンフィグレーションにしておいて設定ファイルで変更できれば良いんだけど,できないときはバイナリをアップデートするしかない.
そんな時,お客様の所へは行きたくないです.そしてロボットはネットに繋がっていない!

Windowsだと,実行形式にコンパイルしてから配信ができる.もちろんLinuxでもできるけど,メールに添付して「このdllとexeを入れ替えてください」でバージョンアップができる.インストーラも簡単に作れるし.
(もちろんLinuxでもできるんだよ.でも/usr/binにファイルコピーするのをLinuxを一度も触ったことがない人にメールだけで説明することを想像してくださいなっと.)

そもそもRTMだと,ロボットにインストールしてもらうことすら必要ない.実行ファイルとDLLを同じフォルダに入れときゃ良い.すごいコンパクトなのがいいんです.

3. Visual Studioが使える

相手がソフトハウスさんだと,このメリットが大きい.僕よりうまくVC使う人たちですから.
VC使えれば.NETも使えるし,インテリセンスでコード保管使いながら開発する方が便利だって人は多い.
そもそもVCで開発して,デプロイはLinuxで,なんてのも準備があればできるわけです.
.NET Frameworkを使ってGUIを作るとか,SQLサーバーと連携ももさらりとやってもらえる.僕はロボットに集中するわけです.助かる.

4. わかりやすいGUIのツールがある

いやROSにもあるし,という人は正しい.ただ,ROSの場合は問題が起こった場合にそれを追跡するためのツールが分かれているのが不便だ.
いや,「その方が軽いツールが作れるし,そもそもツールとはUNIXである」というのがROSであり,その気持ちはわかるんだけど,多分多くの人が期待しているのはIDEです.

とりあえずRT System Editorを開いてください.RTコンポーネント(RTC, ソフトウェア要素)が動いていますか?RTCがエラー状態になってませんか?
コンフィグレーションは適切ですか?きちんとポートが接続されていますか?なんてのが全部RTSEでできる.
一目でエラーがわかるってのは結構大事だ.これでリモートで問題追跡をして,バイナリをアップデートしたりコンフィグを変更して様子を見てもらったりできるわけです.

お仕事としてまとめやすい

これは仕様を検討して,納品時に検品しやすいってこと.ドキュメント作ったりとか,そういうところが作業時間が掛かったりするわけです.

5. 図にして検討しやすい

分散システムで開発すると、後からシステムに機能追加するのが楽になる。仕事の時は、先にどんな機能をどのように追加するか、の同意を得てから見積もり出して仕事を始めるわけですが、この時にRTMだとSysMLの内部ブロック図と1対1対応させて図にできるのが嬉しい.
SysMLはハード・ソフト全部を含めた設計図ってことで,UMLの拡張版とでも考えてくれればいい.
SysMLは自動車メーカーなんかでも導入が始まってるらしいけど,海外だと軍関連だろか.飛行機とかね.
複数の図でシステムを表現するんだけど,それぞれの図が表現しているものの関連が決まっているので,検証を自動的に行う,なんてのもできるツールがある.
これは便利.

UMLを知ってる人なら,あの複雑さというのもよくわかってると思うけど,RTMはSysMLのブロック図・内部ブロック図との相性がすごく良い.そしてこの図は,エンジニアならぱっと見でだいたいの意味が取れるわかりやすい図.だからSysMLを知らない人が相手でも大丈夫なのです。
SysMLの内部ブロック図は、コンポーネントの機能とそれらの接続を表している図なんだけど,これだけでコンポーネントベースで開発する時の説明がある程度できる.仕様書に詳しく書くなら,あとはシーケンス図があると良いか.

ROSだと,SysMLで検討しようとしてもうまく表現できない部分が少なくない.出版購読モデルだったり,サービスの考え方だったり.あとtf.このせいで図化するのに苦しめられるんだけど,移動ロボットだとtfを避けられない.便利なんだが困るんだ.

現状のシステムはこうなっていて,この部分にこのコンポーネントを追加してこのような性能を追加します.お値段はこれだけです.こっちを追加すると追加料金が・・・というのを図で説明するのに使うわけです.こういう同意がないうちに仕事を始めるのは危険だよね.

6. ドキュメンテーションが楽

RTコンポーネント(ソフトウェア要素)のドキュメント化が楽だ.
まず,RTCのスケルトンコードをRTC Builderというツールで自動生成する.この作業が面倒だという人もいるけど,この作業によって設計図(RTCプロファイル)が残るし,コメントなども入れられる.
HTMLに変換してWordで作るソフトウェアの説明書に貼り付けるなんてのも僕はやってる.そもそもXMLだからスタイルだけ書けば文書化できるはずだが,僕は専用ソフトを作ってる.

RTCを接続した図も自動生成ができるし,RT System Editorの画面をスクリーンキャプチャすればオーケーな場合も多い.
とにかく楽.

ROSだとラウンチに書かれていることを図化するのがしんどい.Launch読め,というのがROSだし.
ドキュメントがそれほどいらない相手だったらいいけど,そういう相手がいたら紹介して欲しい.

7. 完成したバイナリから設計図を逆生成できる

さらに,どうしても現場でコンフィグレーションを追加したりポートを追加したりすることがある.
ウォーターフォール開発だと,一回設計過程にもどるんだろうけど,大体ソフトウェアの開発期間なんてハードや電気の開発に圧縮されちゃって,現場合わせでなんとかするしかない.
それにSysMLで設計要件を固めようにも,形が出来てからいろいろ言われちゃうことも多い.
これに対して,RTMはRTCの設計図(RTCプロファイル)を逆生成できる.
コメントまで自動生成はしないけど,少なくとも設計図と実装があっているかの確認が自動的にできる.

これと同じツールはROSでは作れなかった.サービスのコンシューマーが見えない.パラメータのコンシューマーも見えない.
そもそもそういう考えとは遠いのがROSだ,と言われた.

結果として,こういう状況になりました,というのを現場合わせした後に自動生成して出せるわけだから,ドキュメントとバイナリとの整合性を保証できる上に楽.
最後に最初の要求と突き合わせることもできるわけです.

その他いろいろ

とりあえず安心というか,いろいろ説明がつきやすいのがRTM.いいわけしやすい(笑)

8. 後方互換性が高い

RTMの方が後方互換性は高い.「規格」を決めてからやろうとしている人たちなので.
そもそもRTMというのはOMGできめられた規格の総称であって,産総研が作ってるOpenRTM-aistは,その実装の一つ,ということになる.
株式会社セックなんかがRTM on AndroidやOpenRTM.NETを作ってるし,CANopenノードを再利用できるRTC-CANopenなんてのもある.
それぞれが変換ブリッジなんかで接続できるようになってるのも「規格」が決まってるから.
そういうところは信用してる.

RTC仕様も2.0になるらしいが,どうなるだろうね.頼みますよ.

9. ライセンスが産総研とご相談できる

大体,メーカーだと開発部隊ってのも製品化というのを見越して,コストやスケジュールの見積もりをしたりする.
この時,ライセンス的に既存のROSノードやツールがダメだ,ということが多い.その結果,ROS使えないじゃん,となることがある.
そうなると0から作るならRTMだよね,となる.

その理由がこれ.ライセンスがなんとかなる.金で解決できる.

株式会社セックみたいなミドルウェア自体売ってる会社もあるから.金で解決できるんだ.それは大きい.

10. うちの会社以外でサポートしてくれる会社がある

これもセックにお願いすることがある.
他にもグローバルアシストさんとか,後をなんとか頼める会社がある.僕が死んでも大丈夫(笑)

11. 作ってる人が近くにいる

日本のつくばにいる.文句があればつくばに行けばいい.聞きたいこともすぐ聞ける.いろいろ言い訳するだろうけど(笑)