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

ROSとは?

ROSはあなたのロボットのための,オープン・ソースのメタ-オペレーティング・システムです.ROSはあなたがオペレーティングシステムに望んでいたであろう,ハードウェア抽象化や低レベルデバイス制御・よく使われる組み込み関数・プロセス間通信・パッケージ管理の機能を持っています.さらにROSは多様なコンピュータ間を横断して適用したり,ビルドしたり,記述したり,実行したりするコードのためのツールやライブラリも提供します.「ROS」はPlayerYARPCARMENOrcaMOOSMicrosoft Robotics Studioといった,”ロボットフレームワーク”といくつかの点で似ています.

ROSのランタイム"graph"はROSコミュニケーション・インフラを用いて接合されたプロセス同士の,ゆるいPeer-to-Peerネットワークで成り立っています.ROSには,サービスごしの同期RPC形式の通信やトピックごしの非同期データ・ストリーミング・パラメータ サーバ上のデータ・ストレージといった,幾つかの異なるタイプの通信方法が実装されています.これらについてはROS のコンセプトに詳細な説明があります.

ROSはリアルタイムのフレームワークではありませんが,ROSにはリアルタイムのコードを含めることができます.Willow GarageのPR2ロボットはpr2_etherCATと言うシステムを使用していますが,これはリアルタイム・プロセスへROSのメッセージを送受信するものです.さらにROSはOrocosのリアルタイム・ツールキットとシームレスに統合します

目標

たくさんの人々が「ROSはXとどのように違うのか?」と聴いてきます.ここで言うXとは,別のロボティクス・ソフトウェア・プラットフォームのことです.これは答えにくい質問です.なぜならROSの目標が多くの特徴を持つフレームワークになろうとしているのではないからです.しかしながら,ROSの主たる目標はロボティクスの研究や開発におけるコードの再利用を手助けすることです.ROSは個別に設計され,ランタイムでゆるい接合を実現する(aka ノード)プロセスのフレームワークを提供します.これらのプロセスは,パッケージスタックという,容易に共有したり配布したりできるグループに分けられます.おまけにROSは配布について協力するリポジトリでシステム・コードの統合をサポートします.この設計はファイル・システムのレベルからコミュニティのレベルまで,開発と実装の決定から独立できています.しかし全てのROSインフラ・ツールと共にあることができます.

この共有と協力という主たる目標を維持し続けるために,ROSフレームワークにはいくつか他の目標もあります.

  • 薄いこと: ROSはできるだけ薄くなるようにデザインされています.-- 私たちはあなたのmain関数を隠しません -- だからROSのために記述されたコードは他のロボット・ソフトウェア・フレームワークでも使用できます.このことから察するに,ROSは他のロボット・ソフトウェア・フレームワークを容易に結び付けられるでしょう.ROSは既にOpenRAVEとOrocos・Playerを接合しています.
  • ROS-agnostic ライブラリ: 薄いROSを維持し,クリーンな関数インタフェースを持つROS-agnosticライブラリを記述するために,好ましい開発モデルがあります.

  • 言語依存性: ROSフレームワークはどんな現代のプログラミング言語でも容易に実装できます.私たちは既にこれをPythonC++に実装し,LispやOctave・Javaの実験的なライブラリも保有しています.

  • テストの容易さ: ROSには組み込まれた単体/結合テストのフレームワークがあり,これらは決まったテストの作成と破棄を容易にします.
  • スケーリング: ROSは巨大なランタイム・システムと巨大な開発プロセスにふさわしいです.

だから,「ROSはXとどのように違うのか?」という問いかけについて,全てのXについて答えるのは困難です.しかし,あなたが最初はXを使うことを選択しても,ROSから提供されたライブラリの多くを使えると思います.このことについて,Brian Gerkey (PlayerかつROS)がros-usersメーリングリストに向けて送った,ROSとPlayerの違いを尊重し,OpenCVの統合も含み,いくつかの比喩もあるEメールにさらに明確に述べられています.

その答えは,だいたい,こうだ.部分的にみると,あなたがやろうとしていることに依存する.Playerは単純で間接でつながれていない,移動プラットフォームにとても適している.Playerはパイオニアのレーザ機器に接続したセンサやモータに容易にアクセスできるように設計されている.

ROSはまた別で,可動センサ(首を振るレーザや,頭部のパン・チルトするセンサ・腕についたセンサ)を持った,複雑な移動操作プラットフォーム周りのために設計されている.Playerと比較するなら,ROSは配布されたコンピューティング環境への機能追加が容易で,さらに私が言いたいのは,ROSで開発されたそれは,Playerで開発されたそれよりハイレベルであるということだ.Playerがさらなるハードウェアのドライバを要求するのに対し,ROSはさらなるアルゴリズムの実装を要求する.

私は公平に言って,ROSはPlayerよりパワフルでフレキシブルだと思う.しかし,だいたい,非常なパワフルさとフレキシブルさは非常な複雑さをともなう.私たちはROSが容易に使えるようになるために努力している一方で,そこにはまだかなりの学習曲線が存在する.もちろん,Playerへの習熟はROSを使用する際の助けとなるだろう.多くの基本的なコンセプトは似ているからだ.

OpenCVとの統合を考えるあなたの具体的な問に対して,私はあなたがOpenCVとの統合に用いるROSのコードが,Playerのコードに比べてほんの少しなことに気づくだろうと考える.将来的には,あなたがさらにもっと期待する形になるように,ROSとOpenCVの開発チームの間では多くのオーバーラップが行われている.

私はPlayerプロジェクトの多くのコードがROSで影響力を持つことを特に言っておきたい.ROSのノードには,多くのPlayerのドライバ・コードが再利用されて存在する.それはStageとGazeboにも良く支持され,ROSコミュニティで広く利用されている.

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

ROSは現在Unixベースのプラットフォーム上でのみ動作します.ROS用のソフトウェアは主にUbuntuとMac OS Xのシステムでテストされますが,ROSコミュニティはFedora・Gentoo・Arch Linuxやその他のLinuxプラットフォームをサポートすると述べています.

その一方で,Microsoft WindowsにROSを移植することは可能ですが,まだ検討されていません.

貢献

ROSがオープン・ソースであるために,私たちはあなたがROSやROSと互換性のあるライブラリへの貢献を検討してくださることを期待します.どうぞContributingのセクションをご覧ください.あなたがROSコミュニティに参加するための情報があります.

Wiki: ja/ROS/Introduction (last edited 2010-01-07 16:17:02 by KentaYonekura)