ROS (Robot Operating System) について
ロボットソフトウェアプラットフォーム
ロボットソフトウェアプラットフォームの誕生
従来,ロボット用アプリ開発者は,ロボットのハードウェアを強く意識してソフトウェアを開発する必要があった.しかし,汎用的なロボットオペレーティングシステム,あるいはソフトウェアプラットフォームが開発されれば,アプリ開発者はそこで動作するアプリケーション開発に資源を集中できるようになる.
そこで,ロボットソフトウェアプラットフォームが誕生した.
ロボットソフトウェアプラットフォームの誕生により,ソフトウェアに精通した多様な人材がロボットアプリケーション開発に参加しやすくなった.また,ハードウェア開発者は,ソフトウェアプラットフォームで提供するインタフェースに合わせてハードウェアを設計すればよい.これにより,ロボットメーカーはアプリケーションの開発時間や管理コストを削減でき,ロボット分野が急速に発展するきっかけとなった.
ロボットソフトウェアプラットフォームの例
- ERSP, Evolution Robotics
- MSRDS, Microsoft
- MARIE, LABORIUS
- URBI, Gostai
- ROS, Open Source Robotics Foundation, (OSRF, アメリカ)
- OpenRTM, 産業技術総合研究所 (AIST, 日本)
- OROCOS, KU Lenven, LASS, KTHなどのヨーロッパ連合 (ヨーロッパ)
- OPRoS, ETRL, KIST, KITECH, 江原大学 (韓国)
- NAOqi, ソフトバンク (日本), Aldebaran (フランス)
このように様々なロボットソフトウェアプラットフォームがあるが,使いやすいコンポーネントの追加機能や通信機能,可視化,シミュレータ,リアルタイム性など,各プラットフォームがそれぞれユニークな機能を提供しているため優劣をつけることは難しい.
ROSはこれらロボットソフトウェアプラットフォームの中でも,ユーザー数,提供ライブラリの種類と数,拡張性の高さ,開発の容易さなどの点で優れている.
さらに,ROSの開発には,大学の研究者,企業の開発者,趣味で活動するハーベスト,さらにはロボットを専門とする人々だけでなく,コンピュータサイエンス.コンピュータビジョン,あるいは通信ネットワークの専門家など,多様な人々が開発に携わっている点が特徴的である.
ROS
ROSとは
ROS Wiki では,ROSは以下のように定義されている.
ROS (Robot Operating System)はソフトウェア開発者のロボット・アプリケーション作成を支援するライブラリとツールを提供しています. 具体的には, ハードウェア抽象化, デバイスドライバ,ライブラリ,視覚化ツール, メッセージ通信,パッケージ管理などが提供されています. ROSはオープンソースの一つ, BSDライセンスにより, ライセンス化されています.
上述されている機能については以下で解説.
- ハードウェア抽象化 ハードウェアの構成,制御方法を抽象化し,その上にソフトウェアを実装.
- デバイスドライバ ロボットに接続されたセンサ,アクチュエータの入出力をROS APIに基づいて標準化.
- ライブラリ 抽象化されたハードウェアを対象とするナビゲーション,マニピュレーションなどのアルゴリズムを実装.
- 視覚化ツール ロボットの内部状態やセンサ出力を2次元,3次元で視覚化.
- メッセージ通信 プロセス間,コンピュータ間の通信プロトコルを規定.そのうえで,データをストリーム送信するトピック,RPC(Robot Procedure Call)を行うサービス,フィードバック付きRPCを行うアクション,キーバリューストアの役割を果たすパラメータという通信手段を提供.
- パッケージ管理 多種多様なプログラミング言語,依存関係で記述されたプログラム同士を統合的にセットアップ,ビルド,テスト,リリースする.
つまり,ROSは異なるハードウェアでも共通して使用できるロボットオペレーティングシステムであり,アプリケーション開発のための様々なツールを備えたソフトウェアプラットフォームである.
Web業界では,昨今マイクロサービスという概念が叫ばれるようになった.ROSの仕組みはこの概念に非常に似ている.マイクロサービスではなくノードという言葉を使っているが,同じく再利用可能な一つ一つの機能が実装されている.これらのノード間を上述のメッセージ通信で相互接続したものがROSアプリケーションである.
ROSとOSの違い
ROSを正確に表現すると,メタ・オペレーティングシステムである.OSとは異なる.
- メタ・オペレーティングシステムとは OS上で動作し,同一,あるいは異なるOSで動作しているプロセスに対し,プロセス間通信やスケジューリング,負荷の監視,エラー処理などを支援するシステムのこと.
ROSとは,既存の伝統的なオペレーティングシステムを利用しながら,ロボットアプリケーションの開発に必須となるロボットやセンサの制御システムを,ハードウェア抽象化の概念に基づいてパッケージ化したものである.
また,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の開発開始. |
ROS2
ROS2の開発背景
ROS1が多くの開発者に利用されるに従い,ROS1の開発当初には想定していなかったようなユースケースに対応する必要性が生じた.
ROS1が抱えていた課題は,次のようなものである.
- 通信基盤やROSパッケージの信頼性が低いため製品化が難しい
- リアルタイム対応が難しい
- 単一障害点があるためモータードライバなど決定的なシステムに利用できない
- Ubuntuでないと使いにくい
- 単体で組込みシステムに利用できない
これらの課題を解決するためにスタートしたのがROS2プロジェクトである.
ROS1とROS2の違い
| ROS1 | ROS2 | |
|---|---|---|
| ロボットの同時利用数 | 単体ロボットのみ対応 | 複数台ロボットにも対応 |
| 計算資源 | 高性能計算機のみ対応 | 組み込みプラットフォームにも対応 |
| リアルタイム制御 | 特別な作法に従う必要あり | 一般的なプロセス内・プロセス間通信 |
| ネットワーク品質 | 理想的かつ安定的な高品質ネットワーク環境のみ対応 | 不安定な通信環境下での利用にも対応(欠損や遅延も許容) |
| プログラミング形式 | 最大限にユーザの自由 | 柔軟性を残しながらも形式を固定 |
| アプリケーション | 研究,学術用途のみ対応 | 製品化にも対応 |
| OS | Ubuntu(/ Windows) | Ubuntu / Windows / Mac |
ROS活用例
- 自動運転
- ファクトリオートメーション
- クラウドロボティクス