従来,ロボット用アプリ開発者は,ロボットのハードウェアを強く意識してソフトウェアを開発する必要があった.しかし,汎用的なロボットオペレーティングシステム,あるいはソフトウェアプラットフォームが開発されれば,アプリ開発者はそこで動作するアプリケーション開発に資源を集中できるようになる.
そこで,ロボットソフトウェアプラットフォームが誕生した.
ロボットソフトウェアプラットフォームの誕生により,ソフトウェアに精通した多様な人材がロボットアプリケーション開発に参加しやすくなった.また,ハードウェア開発者は,ソフトウェアプラットフォームで提供するインタフェースに合わせてハードウェアを設計すればよい.これにより,ロボットメーカーはアプリケーションの開発時間や管理コストを削減でき,ロボット分野が急速に発展するきっかけとなった.
このように様々なロボットソフトウェアプラットフォームがあるが,使いやすいコンポーネントの追加機能や通信機能,可視化,シミュレータ,リアルタイム性など,各プラットフォームがそれぞれユニークな機能を提供しているため優劣をつけることは難しい.
ROSはこれらロボットソフトウェアプラットフォームの中でも,ユーザー数,提供ライブラリの種類と数,拡張性の高さ,開発の容易さなどの点で優れている.
さらに,ROSの開発には,大学の研究者,企業の開発者,趣味で活動するハーベスト,さらにはロボットを専門とする人々だけでなく,コンピュータサイエンス.コンピュータビジョン,あるいは通信ネットワークの専門家など,多様な人々が開発に携わっている点が特徴的である.
ROS Wiki では,ROSは以下のように定義されている.
ROS (Robot Operating System)はソフトウェア開発者のロボット・アプリケーション作成を支援するライブラリとツールを提供しています. 具体的には, ハードウェア抽象化, デバイスドライバ,ライブラリ,視覚化ツール, メッセージ通信,パッケージ管理などが提供されています. ROSはオープンソースの一つ, BSDライセンスにより, ライセンス化されています.
上述されている機能については以下で解説.
つまり,ROSは異なるハードウェアでも共通して使用できるロボットオペレーティングシステムであり,アプリケーション開発のための様々なツールを備えたソフトウェアプラットフォームである.
Web業界では,昨今マイクロサービスという概念が叫ばれるようになった.ROSの仕組みはこの概念に非常に似ている.マイクロサービスではなくノードという言葉を使っているが,同じく再利用可能な一つ一つの機能が実装されている.これらのノード間を上述のメッセージ通信で相互接続したものがROSアプリケーションである.
ROSを正確に表現すると,メタ・オペレーティングシステムである.OSとは異なる.
ROSとは,既存の伝統的なオペレーティングシステムを利用しながら,ロボットアプリケーションの開発に必須となるロボットやセンサの制御システムを,ハードウェア抽象化の概念に基づいてパッケージ化したものである.
また,ROSでプロセス間通信に使用されるメッセージは,異なるオペレーティングシステムや異なるハードウェア上のプロセス間でも自由に情報をやり取りすることができる.したがって,ROSは,様々なハードウェアから構成される複雑なロボット開発にも適したオペレーティングシステムである.
いつ | 出来事 |
---|---|
2007年5月 | 米国のスタンフォード大学人工知能研究所(AI LAB)が実施したSTAIR(Stanford AI Robot)プロジェクトにおいて,Morgan Quigleyが開発したSwitchyardに端を発する. |
2007年11月 | 米国のロボット専門企業Willow GarageがSwitchyardを引き継ぎ,ROSの名前で開発を始める. |
2010年1月 | ROSの開発者向けプレスリリース版であるROS1.0を発表. |
2010年3月 | 公式バージョンであるROS Box Turtleがリリースされる. |
2014年 | ROS2の開発開始. |
ROS1が多くの開発者に利用されるに従い,ROS1の開発当初には想定していなかったようなユースケースに対応する必要性が生じた.
ROS1が抱えていた課題は,次のようなものである.
これらの課題を解決するためにスタートしたのがROS2プロジェクトである.
ROS1 | ROS2 | |
---|---|---|
ロボットの同時利用数 | 単体ロボットのみ対応 | 複数台ロボットにも対応 |
計算資源 | 高性能計算機のみ対応 | 組み込みプラットフォームにも対応 |
リアルタイム制御 | 特別な作法に従う必要あり | 一般的なプロセス内・プロセス間通信 |
ネットワーク品質 | 理想的かつ安定的な高品質ネットワーク環境のみ対応 | 不安定な通信環境下での利用にも対応(欠損や遅延も許容) |
プログラミング形式 | 最大限にユーザの自由 | 柔軟性を残しながらも形式を固定 |
アプリケーション | 研究,学術用途のみ対応 | 製品化にも対応 |
OS | Ubuntu(/ Windows) | Ubuntu / Windows / Mac |