(訳注:最新の情報は原文を参照してください. )

はじめに: コンセプト | 上位概念 | クライアント ライブラリ | Technical Overview

ROSとは?

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

ROSのランタイム"グラフ"は, ROSの通信基盤を用いて疎結合されたプロセス同士のPeer-to-Peerネットワークです. ROSは, サービスを通じた同期式のRPC型通信, トピックを通じた非同期式のデータストリーミング, そして, パラメータサーバーのデータストレージを数種類の異なる形で実装しています. これらの詳細はコンセプトの概要で説明されています.

ROSはリアルタイム処理のフレークワークではありませんが, ROSをリアルタイム処理のコードと統合することは可能です. WillowGarageのPR2ロボットはpr2_etherCATと呼ばれるシステムを使用しており, リアルタイム処理プロセスにおけるROSメッセージの送受信を行っています. また, ROSはOrocosリアルタイムツールキットとのシームレスな統合も有しています.

目的

大勢の人が, "ROSはXとどう違うのか?"と質問することがあります(ここでは, Xは他のロボットソフトウェアプラットホームのことを指します). ROSの目的がほとんどの特徴を備えたフレームワークになるということでは"ない" ため, 回答が難しいところです. その代わり, ROSの本来の目的には, ロボット工学分野の研究・開発におけるコードの"再利用"を支援するというものがあります. ROSは, プロセスを個別に設計, ランタイムに疎結合して実行可能とする分散型フレームワークです. これらのプロセスは"パッケージ"や"スタック"にグループ化することができ, 簡単に共有と配布を行うことができます. また, ROSは配布と同時にコラボレーションを可能にするコード"レポジトリ"の協力システムをサポートしています. ファイルシステムレベルからコミュニティレベルにいたるまでのこのような設計は, 開発と実装について独立した意志決定を可能としますが, すべてがROSの基盤ツールと共存することも可能となっています.

配布とコラボレーションという本来の目的を支援するため, 他にもROSフレームワークの目的がいくつかあります.

  • 薄さ: ROSは可能な限り薄くなるよう設計されています -- メイン関数を包み隠したりすることはありません -- そのため, ROSのために書かれたコードが他のロボットソフトウェアフレームワークとも使用できます. これに対する帰結はROSが簡単に他のロボットソフトウェアフレームワークと統合できるということで: ROSは既にOpenRAVE, Orocos, そして, Playerと統合されています.

  • ROS依存のライブラリ: 好ましい開発モデルは, 明快で機能性のあるインタフェースと併せてROS依存のライブラリを記述することです.

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

  • 簡単なテスト: ROSはrostestというビルトインされた単体/全体テストのフレームワークを有し, 決まりきったテストの作成と破棄を簡単なものにしています.

  • スケーリング: ROSは大規模のランタイムシステムと大規模開発プロセスに向いています.

結局, "ROSはXとどう違うのか" という質問に関しては, すべてのXについて回答することは困難ですが, まず最初に, 仮にXを使うことを選択した場合でも, ROSにより配布されている多くのライブラリを使用することができるでしょう. より詳細に関しては, OpenCVとの統合を含めて, ROSとPlayerとの間の違いに関連したros-usersメーリングリスト宛のBrian Gerkeyのこのeメールがいくつかの比較を挙げています:

通常, 回答は場合によります. 特に, 何をしようとしているかによります. Playerは単純で, 多関節構造を持たない移動プラットホームに適しています. レーザを装備したPioneerのセンサやモータに簡単なアクセスを提供できるように, 設計されています.

その一方でROSは, 作動機能を備えたセンシング(チルトレーザ, パン/チルトセンサヘッド, 腕部装着型センサ)を備えた複雑な移動マニピュレーションプラットホームに向けて設計されています. Playerと比較した時, ROSは分散型コンピューティング環境の恩恵を受けるのがより容易で, 高レベル側のものはPlayerよりROSで開発されていると言えるでしょう. Playerがより多くのハードウェアドライバの提供を行っているのに対し, ROSはより多くのアルゴリズムの実装を提供しています.

ROSがPlayerより強力かつ自由度が高いということは適切でしょうが, 通常, より強力で自由度が高いということは, より複雑であるということに値します. ROSを簡単に使えることに注力しながらも, 未だに大きな学習曲線が存在します. もちろん, 多くの根本的なコンセプトは似通っているため, Playerに対する習熟はROSの使い方の学習の助けとなるに違いありません.

OpenCVとの統合に関する質問については, OpenCVを使用したPlayerのコードよりもROSのコードに多少なりとも興味深い使い方があるということを見い出せるでしょう. ROSとOpenCVの開発チームの間には密接な協力体勢があるため, 将来的に, さらにより多くのコードが見られるようになるに違いないでしょう.

ROSはPlayerプロジェクトからコードを利用していることも挙げるべきでしょう. 多くのPlayerドライバからコードを最利用しているROSノードがあり, StageとGazeboのサポートが充実し, それらがROSコミュニティでも広く使われています.

オペレーティング・システム

ROSは現在, Unixベースのプラットホームに限り, 動作します. ROSのソフトウェアはUbuntuとMacOSXを基準にテストされますが, ROSコミュニティはFedora, Gentoo, ArchLinux, そして, 他のLinuxプラットホームに対するサポートに寄与しています.

ROSのMicrosoftWindowsへの移植を可能であるとする一方で, まだ完全には研究が進んでおりません.

リリース

有用なツールとライブラリを有する, コアとなるROSシステムは定期的にROSディストリビューションとしてリリースされています. このディストリビューションはLinuxディストリビューションに類似しており, 第三者が継続的に使用とビルドを続けるために互換性のあるソフトウェアセットを提供します.

貢献

ROSはオープンソースであるため, ROS本体, もしくはROSと互換性のあるライブラリへの貢献を検討することが望まれています. 是非, ROSコミュニティに参加するためのより詳細な情報を貢献の項で確認してみましょう.

次に

ROS Concepts

Wiki: ja/ROS/Introduction (last edited 2015-10-13 23:44:10 by YasuoKabe)