ROSについてまとめてみる #1


この記事について

ちょっとROSについてレポートすることになったので、この機会にまとめてみようと思います。
筆者のスペックは、

  • indigo, kinetic, melodicは触ったことある
  • ROS2はまだ触ってない
  • パッケージの自作等はしておらず、落としてきて使う程度
  • Pythonしか書けない
  • 文章読むの苦手

という感じ。
私自身まだまだ未熟なので、ご指摘あればお願いいたします。

ROSはとても面白そうですし、何よりコミュニティーの盛り上がりがすごく楽しそうなので、仲間にはいりたいのですが、なかなかとっつきにくいところがあります。
習得するには使えばいいわけで、業務で使うように仕事で提案すればいいわけです。

しかし、ROSの困ったところは、「ROSってどういうものなの?」って聞かれたときに何なのかうまく説明できないところにあります。統合開発環境や専用の実行環境があるわけではないので、答えにくいですよね。
今回は、「ROSとは何なのか。」をちゃんと伝えられるようになるように、概要をまとめていこうと思います。
*尚、この記事の記載内容はROS1に関するものです。

ROSとは

公式によると、

ROSはオープンソースで提供される, ロボット向けのメタ・オペレーティングシステムです. ハードウェア抽象化, 低レベルなデバイス制御, 一般的な機能性, プロセス間通信, そして, パッケージ管理など, 一般的なオペレーティングシステムに要求されるサービスを提供します. また, コードを複数台のコンピュータにわたって保持・ビルド・記述・実行するためのツールやライブラリも提供しています.

らしいです。なるほどわからんですね。
こういう公式ドキュメントって、英語を愚直に日本語に直したものだったりするので、直感的に分かりづらい日本語だったりします。

この辺に関しては、オライリーの"プログラミングROS"の、まえがきにある記述が一番納得しやすかったです。

ROS(Robot Operating System)はロボットにさまざまな動作をさせるためのオープンソースフレームワークです。ROSはロボットを作る人、使う人、それぞれに必要な共通のプラットフォームを提供することを目的としています。

なるほどですね。
OSって書いてあるけど実はミドルウェアなんだぜ!とかって記述もよく見ます。
まぁミドルウェアであることは間違いないのですが…、実際のところ、フレームワークであると認識するのが一番しっくりくる気がします。人に説明するときも、その方が伝わりやすかったり。
とりあえず、ロボット開発に特化したフレームワークです!と答えておけば話はスムーズに進みそうです。
では、詳しく中身を見ていきましょう。

思想(哲学)

ROS本を見ていると、本によって様々な解釈が見られますが、どれも大まかにはこんな感じです。

ピアツーピア

ROSは分散システムで構築されます。
機能ごとにノードという単位で独立したプロセスを作成し、ノード同士がお互いにメッセージを送りあうことで、ジョブを実行します。
これはルーティングを行うサービスなどを介さずに直接プログラム同士で行われます。
これによってROSは堅牢性(一ヶ所バグっても多勢に影響は少ないという意味で)やプログラムの再利用性を担保しています。

多言語対応

書籍によっては様々な言語が対応言語として挙げられていますが、その内容は時代によって異なります…
ここに関しては、公式にある、

言語の独立性: ROSのフレームワークはどのような現代的プログラミング言語による実装も簡単です. 既にPython, C++, そして, Lispを実装しており, 実験的なJavaとLuaのライブラリもあります.

http://wiki.ros.org/ja/ROS/Introduction
これが、今現在では一番正しい見解だと思います。
要するに、ROSは上に書いたような分散システムで、ノード同士が通信を行うといったような形をとっています。これらの通信に関する部分や、その他の細々したROSの機能を使うためのライブラリが、完全に整備されているのは、現状これらの言語のみ、という理解でいいと思います。

薄い実装

これは複数の文献でこのように書いてあるのですが…
原文には英語で"thin"とだけ書いてあるようです。
ROSでの開発の際、開発者は、まずはスタンドアローンなライブラリを作り、その上にラップする形でROSの通信部分を実装することが推奨されています。
これによって、ROS環境で開発されたコードは、他のフレームワークへの移植が容易になり、かつ他のフレームワークと結合しやすくなっています。
最近はシミュレータをUnityに置き換えたりするのが流行っていたりしますが、これができるのは、こういった思想による恩恵だと思います。

豊富なツール

ROSには様々な開発補助ツールがあります。

  • Rviz ロボット筐体やセンサ値の可視化
  • gazebo 物理シミュレータ
  • Moveit! プランナー
  • catkin ビルドツール
  • ROS graph ノードやトピックの可視化
  • ROS tf 姿勢変換

などです。
これらのツールは全て独立したプログラムで作成されていて、それぞれの用途に見合った方法で実装されています。また、これらのツールもピアツーピアの思想に則って実装されているので、その都度、利用シーンに適したツールに置き換えることができます。

無償かつオープンソース

ROSのすべてのコードは公開されており、BSDライセンスの元、使用できます。

#2へつづく

参考

ROS
http://wiki.ros.org/

プログラミングROS(O'Reilly Japan)
https://www.oreilly.co.jp/books/9784873118093/

ROSプログラミング(森北出版株式会社)
https://www.morikita.co.jp/books/book/3010