Robot Operating System

Robot Operating System (ROS)
初版 2007年(13年前) (2007
最新版 Melodic Morenia / 2018年5月23日(20か月前) (2018-05-23
リポジトリ github.com/ros
対応OS Linux, MacOS, Windows 10
対応言語 C++Pythonほか
種別 ロボットソフトウェアプラットフォーム
ライセンス BSDライセンスApache 2.0ライセンス
公式サイト www.ros.org
テンプレートを表示

Robot Operating System (ROS) とは、ロボット用のソフトウェアプラットフォームである。ROSはその名に「Operating System」を含むが、Microsoft WindowsiOSのようなコンピュータオペレーティングシステム (OS) ではなく、既存のOS上で動くミドルウェアソフトウェアフレームワークの一種であり、「メタオペレーティングシステム」 (meta-operating system) とも説明される。

ROSの目標は、ロボットソフトウェア開発におけるコラボレーションを全世界的に推進することである。ROSはスタンフォード大学の学生が開発した「Switchyard」プロジェクトを起源にもち、それを引き継いだアメリカのウィローガレージ社が2007年に本格開発を開始し、2010年に最初のリリース版が公開された。その後、非営利団体「オープンロボティクス」(Open Robotics) が設立され、ROSの開発を主導する役割が引き継がれた。ROSはオープンソースソフトウェアとして開発・公開されており、世界中から多くの人々が開発に参加している。

ROSの対応OSはUbuntuLinux MintなどのLinuxが中心で、macOSWindowsAndroidでも一部の機能が対応している。ROSは、ハードウェアの抽象化、低レベルのデバイス制御、汎用的な機能の実装、プロセス間のメッセージ通信パッケージ管理などを行うほか、ソフトウェアの開発や実行などのためのツールやライブラリを提供する。ROSは分散コンピューティングシステムとして設計され、複数のプロセスでロボットに必要な各種処理を並列的に行う。各プロセスは単独または複数のコンピュータ上で実行可能であり、処理結果を相互に送受信しながら、1つの大きなソフトウェアシステムとして動作する。ROSのソフトウェアは、「コアユーティリティ」と「パッケージ」に分かれており、ユーザは使いたい機能のパッケージを選択してインストールすることで、ロボットに必要な各種機能を利用できる。パッケージは自作することが可能で、ROSはC++Pythonをはじめ、LispJavaなど多数のプログラミング言語をサポートしている。

ROSを搭載したロボットは、移動ロボットやロボットアームのほか、ヒューマノイド自動運転車無人航空機(ドローン)、自律型無人潜水機などと様々である。学術研究を主な対象として開発が始まったROSだが、次第に産業用途にも利用範囲が広がり、ROSを搭載したロボットが製品化され市場に登場するようになっている。新たな利用領域に求められる機能を実装するため、ROSの次世代バージョンである「ROS 2」の開発・リリースも始まっている。

ROSとは

ROSの目標は、ロボットソフトウェア開発におけるコラボレーションを全世界的に推進することである[1][2]。特に、ロボットの研究・開発で用いられるソースコードの再利用性を最大化することを目指して開発された[1][3]

ROSは、ハードウェアの抽象化、低レベルのデバイス制御、汎用的な機能の実装、プロセス間のメッセージ通信パッケージ管理などを行うほか、複数のコンピュータに渡ってプログラムの取得・開発・実行など行うためののツールやライブラリを提供する[4][5]

ROSはRobot Operating Systemの略だが、この言葉からはROSの実態を正確に把握しにくいとの指摘もある[6]。ROSの情報発信における中心的サイト[7]である「ROS Wiki」では、ROSを「メタオペレーティングシステム」 (meta-operating system) と呼んでいる[8][9]。ROSプロジェクトの中心人物であるブライアン・ジャーキー (Brian Gerkey) は、ROSとは何かという質問に対し、「ROS = plumbing(通信)+ tools(ツール群)+ capabilities(機能群)+ ecosystem(エコシステム)」と答え、次のように解説している[10][11][6]

plumbing(通信)
ROSは、迅速で容易に分散コンピューティングシステムを構築できるよう設計された、配信-購読型のメッセージ通信基盤を提供する。
tools(ツール群)
ROSは、分散コンピューティングシステムの設定・起動・監視・デバッグ・可視化・ログ取得・テスト・停止を行う広範囲にわたるツールを提供する。
capabilities(機能群)
ROSは、移動・マニピュレーション[† 1]・知覚といった機能をロボットに実装する多様なライブラリ群を提供する。
ecosystem(エコシステム)
ROSは、統合とドキュメンテーションに重点をおき、大規模なコミュニティにより支えられ進歩している。ROSのコミュニティサイトであるros.orgは、世界中の開発者から提供された大量のROSパッケージ(#ROSパッケージ参照)を取得し学習できるワンストップサービスである。

plumbingとは、いわゆるミドルウェアの通信ライブラリ機能に相当し、capabilitiesとは知能ロボットのライブラリモジュールに相当する[13]

歴史

Switchyardプロジェクト

ROSの起源は、アメリカのスタンフォード大学の学生で人工知能研究所の Stanford AI Robot (STAIR) プロジェクトに参加していたモーガン・クィグリー (Morgan Quigley) が開発した「Switchyard」システムである[14][15]。 Switchyardは、ロボット用ソフトウェアを開発するためのフレームワークであり、認識・計画・制御といった知能情報処理をロボット内外で分散処理できるよう並列計算を前提とし、各計算プロセスはピア・ツー・ピアネットワークで非同期通信を行う設計であった[16]。複数の研究者による利用を前提としたモジュール性有し、新しいハードウェアへの適用を考えて、ロボットのハードウェアに依存する部分としない部分を明確に分けた設計がされた[16]。また、Switchyardではソースコードの審美性も重要視されたほか、デプロイシステムを導入するなど、のちに繋がるアイディアが含まれていた[16]

ROSの誕生

2007年11月、アメリカのロボット関連民間企業であるウィローガレージ (Willow Garage) 社がSwitchyardの開発を引き継いだ[17][16]。同社は、パーソナルロボットやサービスロボット産業の育成に取り組み、画像処理分野のオープンソースソフトウェアOpenCV」などの開発支援も行なった企業である[17][16]。さらに、のちにROSのネットワークプログラムに大きな影響を与えるPlayer/Stage プロジェクト英語版の開発者であるブライアン・ジャーキーも加わった[17]。彼らによって Switchyard プロジェクトは ROS として組織化され、ROSがロボット用フレームワークとして多くのユーザを集める最初の転換点となった[16]

ウィローガレージ社は、オープンソースコミュニティを立ち上げ、ソフトウェアの共有・連携・再利用を促進する枠組みを構築した[5]。ウィローガレージ社は、学会や技術者・開発者向けイベントへの支援や参加を積極的に行った[18]。また、初めてROSを利用する技術者向けに、ソフトウェアエンジニアではないヒューマンロボットインタラクション (Human-Robot Interaction; HRI) の専門家とともにマニュアル等の文書整備を推進した[18]

2010年1月22日にウィローガレージ社は「ROS 1.0」を発表した[19]。2010年3月には、ROSの最初の公式リリースである「ROS Box Turtle」が公開された[20]。その後もアップデートが重ねられ、Linuxのようにディストリビューションとしてリリースされた [20]。同年8月に「C Turtle」、そして2011年3月に「Diamondback」が公開された[20]

PR2ベータプログラム

ウィローガレージ社が開発したロボット「PR2」。

ROS 1.0のリリースと並行して、ウィローガレージ社はROSで制御することを前提としたロボット「PR2」を開発・発表した[21]。PR2は2本のロボットアームを備えた自律移動型の研究用ロボットである[22][23]。そして、ウィローガレージ社は、PR2を利用したアプリケーションの開発コンテスト「PR2ベータプログラム」の公募を行なった[21]。 78の応募の中からアメリカ、ヨーロッパ、日本を中心とした11の大学機関が採択され、特に優れた提案に対してはPR2が無償で提供された[21][24] 。2010年9月には、40万ドルでPR2の一般販売も開始され、オープンソースコミュニティへの貢献者には12万ドルの割引というインセンティブも与えられた[22]。PR2ベータプログラムが行われた2年間に、ROSで再利用可能なツールやアプリケーションが次々と開発され、全体で2,000以上のROSパッケージがリリースされた[21]。これらの施策を通し、ROSの研究と他のロボット研究とのコラボレーションも進み、ROSの知名度が飛躍的に高められたと評される[21]

発展と批判

ROSは欧米の学術分野を中心に注目を集め、他のロボット用フレームワークに比べて急速にユーザ数を伸ばした[16][25]。 サービスロボットを対象として開発が始まったROSだが、産業用ロボットに利用する動きも見られるようになった[26][27]。ROS-Industrialプロジェクトが立ち上がり、2012年1月にはROS-Industorialの公開リポジトリが開設された[26][27]

一方で、iRobot社のCEOであるコリン・アングル (Colin Angle) は、ロボットの主要ソフトウェアをオープン化するROSのアプローチは、これまで築き上げてきた重要な知的財産に他国が便乗することを許してしまうと指摘した[28][29]。彼は、ロボット産業にとってROSは危険な存在で事業の収益化に有害であると批判し、今すぐROSをクローズドにすべきと主張した[28][30]。 同じ頃、ワシントン大学の研究グループは、ソフトウェアにROSを用いて手術ロボットの研究プラットフォーム「Raven-II」を開発し、他大学の利用も始まった[31][32]。これに対して、インテュイティヴ・サージカル社が開発した手術ロボット「da Vinci」の特許に関して法律上の問題が指摘された[33][32]

ウィローガレージ側は、ロボティクス分野においてもWebサービス分野におけるLAMPのような基盤が必要であり、それがROSであると主張した[30][34]。さらに同社は、Apacheソフトウェア財団のような非営利団体の設立を検討していると表明した[30][34]。この非営利団体は、寄付を集めて開発者のコミュニティを組織し、独立してROSの管理・維持を行うことを意図したものだった[35][34]

OSRFの設立以降

2012年4月、ウィローガレージ社からROSプロジェクトがスピンアウトされ、非営利団体のオープンソースロボット財団 (Open Source Robotics Foundation; OSRF) が設立された[36]。OSRFのコアミッションは「ロボットの研究・教育・製品開発に、オープンソースソフトウェアを使用するための開発・配布・導入の支援」とされた[36]。2013年2月、ウィローガレージ社は、オープンソースでのロボットの研究開発を主導する役割を完全にOSRFへ引き継ぐと発表した[36]

同年9月には、ROSの開発・管理をOSRFが引き継いで最初のディストリビューションとなる「Hydro Medusa」がリリースされた[37]。これまでは1年に2回のペースでディストリビューションがリリースされていたが、Hydro Medusa 以降は、頻繁なアップデートを望まないユーザの意見を取り入れて、1年に1回の公式リリースとなった [38]。この間、2012年5月には、ROSコミュニティの交流や情報共有を促進するための最初の開発者会議「ROSCon」がアメリカ・ミネソタ州セントポールで開催され、以降、開催地を変えながら毎年開催されている[39]


ROSの利用範囲は学術分野を超えて製造・農業・商業分野などに広がり、ROSを搭載したロボットが製品化され市場投入されるまでになった[40][25]。ROSはもともと学術分野での研究利用を主な目的として開発されてきたため、これら新たな利用分野の要求には合わない部分が目立つようになった[40][25]。また、2007年のROSのリリースの後、ROSの要件に適した新技術やソフトウェアライブラリなどの開発・普及も進んだ[40]。ROSの開発者らは、ROSのさらなる発展のために、新たな要件に対応したり、新技術を取り込んだりする方法を検討した[40][25]。その結果、既存のROSを問題なく利用しているユーザへの影響を抑えつつROSの進化を図るため、次世代バージョンは既存のROSと切り離して開発されることとなった[25]。次世代バージョンは、「ROS 2」と名付けられ、2015年8月からアルファ版のリリースが始まり、2016年からベータ版が段階的にリリースされた[41]。そして、2017年12月8日、ROS 2の最初の正式版「Ardent Apalone」がリリースされ、2018年7月2日には更新版の「Bouncy Bolson」がリリースされている[41]

この間、2017年5月にOSRFは名称を「オープンロボティクス」(Open Robotics) に変更した[42]

ROSを利用したロボット 

リシンク・ロボティクス社が開発したバクスター英語版はROSの利用を前提とした双腕ロボットである。

ROSは大学・研究機関といった学術分野をはじめ、産業界や趣味分野まで幅広く利用されている[25]。ROSの利用は、移動ロボットやロボットアームをはじめ、ヒューマノイド自動運転車無人航空機(ドローン)、自律型無人潜水機にも広がっている[43]。ROSの利用を公表しているロボットは、ROSの公式サイト[† 2]で紹介されている[44]。その他、企業・研究所・大学・個人などが非公開でROSを利用した多くのロボットを開発している[44]

対応プラットフォーム 

ROSを使うためには、ソフトウェアを開発したりロボットを制御したりするコンピュータにROSをインストールする[45]

ROSが動作するOSはUbuntuLinux MintなどのLinux系OSが中心で、macOSWindowsAndroidでも一部の機能が対応している[38]。主要なOSについては、ROS Wiki でROSのインストール方法が説明されている[46]。特にUbuntuは、パッケージ管理システムに対応したインストールが可能で、ROS開発チームによるテストが行われることもあり、多く利用されているOSである[38]

Windows向けには、Microsoft社が「ROS1 for Windows」を開発し試験リリースした[47][48]。ROSのインストールやノードの実行が可能であれば、様々なOS上で、異なる言語で実装されたノードを組み合わせてシステムを構築することができる[49]。各ディストリビューションが対応しているプラットフォームは、ROSの公式サイト等で確認できる[† 3]

ディストリビューション

ROSは2010年に「ROS 1.0」が発表されて以降、アップデートを重ねており、特定のバージョンのファイル群をセットにした「ディストリビューション」としてリリースしている[50]

かつて、ROSのリリース周期は、対応OSである Ubuntu のリリース周期に合わせて、1年に2回(4月と10月)であった[38]。しかし、2013年にリリースされた「Hydro Medusa」からは、頻繁なアップデートを望まないユーザの意見を取り入れて、公式リリース周期は1年に1回となった[38]

ROSディストリビューションのサポート期間は2種類ある。Ubuntu と同様に 長期サポート (Long Term Support; LTS) の考え方が取り入れられており、偶数年にリリースされるディストーションはLTSとして5年間のサポート、それ以外のサポート期間は2年間である[51][38]

ROSのディストリビューションは、2番目の「Box Turtle」以降いずれも亀にちなんでおり、頭文字がアルファベット順になっている[52]。 //@@@出所怪しい@@@カメを象徴としたのは、MITの人工知能研究所で開発された教育用プログラムLogoの影響が大きいとされる[52]

ROSディストリビューションの一覧
ディストリビューション名 リリース日 サポート終了日
Melodic Morenia 2018年05月23日 現在の安定版: 2023年05月30日
Lunar Loggerhead 2017年05月23日 現在の安定版: 2019年05月30日
Kinetic Kame 2016年05月23日 現在の安定版: 2021年05月30日
Jade Turtle 2015年05月23日 以前のバージョン、サポート終了: 2017年05月30日
Indigo Igloo 2014年07月22日 以前のバージョン、まだサポート中: 2019年04月30日
Hydro Medusa 2013年09月04日 以前のバージョン、サポート終了: 2014年05月31日
Groovy Galapagos 2012年12月31日 以前のバージョン、サポート終了: 2014年07月31日
Fuerte Turtle 2012年04月23日 以前のバージョン、サポート終了: --
Electric Emys 2011年08月30日 以前のバージョン、サポート終了: --
Diamondback 2011年03月02日 以前のバージョン、サポート終了: --
C Turtle 2010年08月02日 以前のバージョン、サポート終了: --
Box Turtle 2010年03月02日 以前のバージョン、サポート終了: --
凡例:
旧バージョン
以前のバージョン、サポート中
最新バージョン
最新プレビュー版
将来のリリース

ライセンス

ROSのソフトウェアライセンスは、オープンソースソフトウェアの1つであるBSDライセンスApache 2.0ライセンスを採用している[5][19]。これにより、商用および非商用での利用が可能であるほか、誰でもROSの修正・再利用・再配布ができ、多くのボランティアが開発・改良に参加している[19][53]

ファイル構成とツール 

ROSは多種多様のパッケージやツールが複合したソフトウェアシステムである[54][55]。各プログラミング言語に対応する「クライアント層」、具体的なアプリケーションを実装した 「ロボットアプリケーション層」、個別のアプロケーションプログラム作成のための「アプリケーションフレームワーク」、通信を担う「コミュニケーション層」、ハードウェア制御のための「ハードウェアインタフェース層」、開発を支援する「ソフトウェア開発ツール」、そして「シミューレータ」で構成される[54][55]

ROSパッケージ

ROSのアプリケーションプログラムは、「パッケージ」と呼ばれる基本単位で管理される[49]。パッケージは、ROSソフトウェアの基本単位であり、最小実行単位である「ノード」(#計算グラフ上の仕組み参照)を1つ以上持つか、他のパッケージのノードを実行するための設定ファイルを含む[53][56]。各パッケージには、パッケージ情報の管理ファイル、ビルドで用いる設定ファイル、ノードのソースコード、ノード間通信のための設定ファイルなどが含まれる[53][57]。共通の目的のもと複数のパッケージをグループ化した「メタパッケージ」と呼ばれるものもある[58][59]

ROSのパッケージは公式なものだけでも2,000以上ある[60]。ロボット本体の制御に関するパッケージ、センサに関するパッケージ、駆動部のためのモータ制御に関するパッケージなどがある[44]。センサパッケージはカメラ、深度カメラ、レーザ距離センサ、力/トルクセンサ、音声認識RFIDなど様々なデバイスに対応したものが公開されている[61]

補助・周辺ツール

ROSにはソフトウェア開発を補助するための様々なツールが用意されている[62][63]。主なツールとしては、GUIユーティリティツールの「rqt」や3次元可視化ツール「RViz」、マニピュレータの動作制御のための統合ライブラリ「MoveIt!」、3次元動力学シミュレータの「Gazebo」用プラグインのほか、後述するビルドシステムやパッケージのリリースツールなどがある[62][64]

RVizの実行画面のスクリーンショット。

RViz (ROS Visualization) は、ROSの可視化ツールの1つで、測域センサや3次元深度センサの計測データであったり、ロボットの形状モデルや地図などを3次元表示することができる[65]

rqtはQtをベースとするGUI環境を提供するツールである[66]。rqtには様々なプラグインが開発されており、ROSの分散プロセスの階層構造や接続関係をグラフ化したり、ロボットの搭載カメラの映像を確認したり、時系列データをグラフにプロットしたりすることが可能である[66]

MoveIt! は、マニピュレータの動作計画のための高速な順動力学計算やマニピュレーション[† 1]のための高度なアルゴリズム、ロボットハンドの制御などの各種機能を提供するツールである[67]。そして、マニピュレータに対する深い知識がなくても動作生成などを行えるよう、GUI上で設定や操作が行える[67][68]

Gazeboは、物理エンジンや3次元グラフィックスエンジンを搭載した3次元空間の動力学シミュレータである[69]。ロボットや空間の3次元モデルを読み込み、物理現象やノイズを含めたセンサの挙動などをシミュレートし、3次元映像を表示することができる[69]。GazeboはROSとは独立したソフトウェアだが、ROSを主導しているオープンロボティクスが開発しているため、ROSとの親和性が高い[69]

インストール

ROSのファイルシステムは、インストールフォルダとユーザ作業フォルダに分けられる[70]。インストールフォルダには、ROSの中核プログラムである「roscore」を含むコアユーティリティや、ロボット関連ライブラリ、可視化やシミュレーションのための開発支援ツールなどがインストールされる[71]。ユーザ作業フォルダは、ダウンロードしたパッケージやユーザが自作したパッケージを保存して編集したり、実行可能な形式にビルドしたりする作業スペースである[72]

ユーザが利用したい機能に応じて、必要なパッケージやツールを追加インストールする[73][74]。パッケージは、パッケージ管理ツールを利用してインストールするか、リポジトリからソースコードを取得してビルドする[57]。ROSは分散システムとして設計されており、複数のホスト(コンピュータ)に分散してパッケージをインストールすることも可能である[75]

開発言語

既存のパッケージにないハードウェアやアルゴリズムなどを実装するためには、自分でパッケージを作成する。ROSは複数のプログラミング言語に対応している[1]。主要言語はC++Pythonで、そのほかにLispJavaLuaRubyOctaveなどでプログラムを開発することができる[76][1][55]

ビルドシステム

ソースコードから目的のコードを生成(ビルド)するため、ROSはビルドシステムを有する[77]。初期のビルドシステムは「rosbuild」と呼ばれるものであったが、のちに「catkin」と名付けられた新システムが開発された[78]。ディストリビューション「Groovy Galapagos」からcatkinへの切り替えが始まり、「Hydro Medusa」以降は全システムがcatkinに対応した[78]。catkinはCMakeを修正・拡張したもので、パッケージのビルド、パッケージ管理、依存関係パッケージの自動インストールなどが行える[79]。catkin は、ビルド結果をソースコードと異なるディレクトリに保存するアウトソースビルド方式を採用し、パッケージの再配布やクロスコンパイルをサポートしたことでソフトウェアの移植性が向上した[77]

「catkin」という名前は、開発したウィローガレージ社のウィロー(Willow = ヤナギ)の木にみられる尾状花序 (: catkin) に由来する[80]

リリース 

新規に自作したパッケージや、既存のパッケージの改良・修正を行なった場合、リポジトリにコミットしてリリースすることも可能である[81]。ROSは、リリースのためのツール「bloom」を提供しており、その使い方を含めたリリース手順は ROS Wiki で説明されている[81]

計算グラフ上の仕組み 

ROSはソフトウェアの再利用性を高めるため、分散システムとして設計されている[82][1]。ノードと呼ばれるプロセスが処理結果を送受信しあいながら、ROSは1つの大きなソフトウェアシステムとして動作する[83][1]

ノード

ロボットは、センサやユーザインタフェース等から入力した情報を処理して、目的遂行のために必要な各種計算を行い、駆動系を制御する。ROSはこれらの演算を「ノード」と呼ばれる比較的小さなプログラムに細分化して実装する[84]。ノードは、ROSにおける処理機能の基本単位であり、実行可能な1つのプログラムである[82][84]。センサドライバ、障害物回避、モータの駆動、ナビゲーションといった目的ごとにノードを作成する[84]。各ノードは同一または別々のホスト上で実行でき、独立して並列的に動作する[75][1]

マスタ

ノード間の接続情報を管理するプログラムを「マスタ」と呼ぶ[85][86]。マスタは、コアユーティリティに含まれるプログラム「roscore」を実行すると起動される[87]。マスタは、あるロボットのROSシステムにつき1プロセス、ノード間通信を行う前に実行する[88]。各ノードは起動時に、ノード名やURIポート番号といった通信に必要な情報をマスタに登録する[88][89]。マスタは、ノードから要求があった際に相手先ノードの情報を返し、それを元にノードは相手先ノードとピア・ツー・ピア接続を確立する[88][89]

ノード間通信

ROSはノード間の通信方法として、単方向非同期通信方式の「トピック」、双方向同期通信方式の「サービス」、双方向非同期通信方式の「アクション」の3種の方式を備える[90]。ROSの配信-購読型のメッセージ通信基盤は、ほぼ完全に独自開発されたものである[91][40]

トピック
ROSのトピック通信は、メッセージパッシングの一種である[92]。メッセージを送る側をROSではパブリッシャ(publisher; 配信者の意)、受けとる側をサブスクライバ(Subscriber; 購読者の意)と呼ぶ[92][59]。パブリッシャはノードの起動時に配信に必要な情報をマスタに登録する[93][59]。サブスクライバもノード起動時に、自己の情報と購読したいメッセージをマスタに登録する[93][59]。マスタはサブスクライバにパブリッシャのアドレスを渡すことで、サブスクライバはパブリッシャに接続しメッセージを受信する[93][59]。トピック通信は、接続確立後に連続的にメッセージが送受信されるため、高頻度のデータ通信が必要なセンサ信号の送受信などに利用される[94]
サービス
サービス通信は、要求を受けた時に応答するサービスサーバと、サービスサーバに要求を出すサービスクライアントとの間で行われる[95][96]。サービス通信はクライアントがサービス要求を送信した時点から開始され、サーバからサービス応答を受信した時点で終了し、ノード間の接続が切れる[95][96]。サービスは、要求と応答が終われば両ノードの通信が切断されるため、ネットワークの負荷が小さい[95]。サービス通信は、ロボットにある決まった動作の指示を出すときや、ある条件下で起こるイベントを発生させたい場合などに利用される[95]
アクション
サービス通信では、サーバからの応答が返ってくるまでプロセスがロックされてしまう[97]。したがって、要求から応答まで長い時間を要する処理のための通信手段として、アクション通信が実装されている[97][98]。アクションもサーバクライアント方式として実装され、要求を出すノードがクライアント、要求を実行し応答を返すノードがサーバとなる[97]。アクションクライアントが要求の終了条件 (Goal) をサーバに送信すると、サーバは処理を開始し、途中経過であるフィードバック (Feelback) と Goalに対する結果 (Result) を送信する[99][100]。また、クライアントは要求の取り消し  (Cancel) をサーバに送信することもできる[99][100]。アクション通信は、サービス通信のような双方向通信方式であるが、非同期通信であり実行方式はトピック通信に近い[100]。アクション通信が適した例として、移動ロボットに遠くの地点まで走行する命令を実行する場合が挙げられる[101]

ROSコミュニティ

ROSの大きな強みの1つとして、ライブラリ群とシェアリングの仕組みを支える活発なコミュニティ活動が挙げられる[102]。世界には様々なロボットソフトウェアプラットフォームがあるが、ROSはコミュニティ活動が特に活発とされる[103]。ROSの開発はオープンロボティクスが単独で行なっているわけではなく、世界中に開かれている[104]。大学や研究機関の研究者、産業界の技術者、さらには趣味でソフトウェアやロボットを開発しているホビイストまで多様な人たちがROSの開発に参加し貢献している[105]。また、ロボットの専門家だけでなく、計算機科学コンピュータネットワークコンピュータビジョンといった分野からも専門家が参加している[105]

ROS Wiki
ROSに関する情報を文書化する中心的な場として、Wikiを利用したウェブサイト「ROS Wiki」が開設されている[7][106]。ROS Wikiでは、ROSの基本的な説明や使い方、チュートリアル、ガイドラインなどが提供されている[7][107]。また、各パッケージの情報もROS Wikiで提供され、パッケージの説明やリポジトリURL、著作者、ライセンスなどが掲載されている[7][106]。WOS Wikiのアカウントは自由に作成することができ、ROSについて公開したい情報を共有できる[7][106]
公開リポジトリ
ROSの公開パッケージは、GitHubなどのリポジトリで公開・管理されており、ROS WikiのパッケージのページにリポジトリのURLが記載されている[108]。ユーザは、リポジトリからパッケージのソースコードを取得することができる[106]
ROS Answers / メーリングリスト
ROSに関する質問をする場として「ROS Answers」[† 4]というQ&Aフォーラムもウェブ上で運営されている[109][110][111]。質問には、経験者などコミュニティ参加者が回答し、過去の質問を検索することができる[109][110]。また、ROSのアップデート情報を配信したり質疑応答などを行うメーリングリストも運営されている[111]
ROSCon
オンライン上だけでなく、開発者らが直接会って交流を行うイベントとして、2012年から毎年1回、開発者会議「ROSCon」が開催されている[39]。2018年現在にまでに、ROSConの開催地は北米、ヨーロッパ、アジアから順番に選ばれている[112]

ROS-Industrial

ROS-Industrialとは、ROSを産業用ロボット向けに拡張する取り組みである[113]。ROSはサービスロボット研究の領域で広く利用されるようになった[26]。ROSを利用した知能情報処理機能は産業用ロボット領域へも適用できるものであり、従来は技術的・コスト的に実現困難とされた機能の実装が期待されている[26]。産業用ロボットの持つ信頼性とオープンコミュニティの柔軟性を組み合わせることで、ROSを用いたロボットアプリケーション開発を推進し、産業用ロボットの開発コストの低減や、新規事業化や次世代ロボット市場へのROS適用などを目指している[114][115]

ROS-Industorialは、オープンソースプロジェクトとして安川電機、ウィローガレージ社、そしてアメリカの独立非営利機関であるサウスウェスト研究所英語版 (SwRI) によって共同で立ち上げられた[27]。2012年1月、ROS-IndustorialのレポジトリがSwRIによってGitHub上に開設された[27]。その後、2013年3月には、ROS-Industrialプロジェクトから発展的にROS-Industrial Consortium(ROS産業コンソーシアム)が設立された[115]。コンソーシアムの中心メンバーは、アメリカではSwRI、ヨーロッパではドイツのフラウンホーファー研究所の生産技術・オートメーション部門 (IPA) 、アジア太平洋地域ではシンガポールのアドバンスト・リマニュファクチャリング・アンド・テクノロジー・センター (Advanced Remanufacturing and Technology Centre; ARTC) および南洋理工大学である[115][27]。2018年10月現在、3MボーイングエアバスBMWボッシュシーメンスABBキャタピラーマイクロソフトユニバーサルロボットなどの民間企業のほか、ROS本体の開発を主導する「オープンロボティクス」もコンソーシアムメンバーである[116]

ROS-Industrialでの研究成果は原則として、BSDライセンスまたはApache 2.0ライセンスで公開される[26]。ただし、ROS産業コンソーシアムには、Focused Technical Projects (FTP) と呼ばれる制度が設けられている[115]。FTPは、コンソーシアム参加企業が特定のテーマを設定して構成する研究グループであり、グループ内で費用や設備を分担し、研究成果を共有する[115]。FTPの研究成果は必ずしも公開されるわけではなく、FTPグループ構成メンバーの審議によって公開の可否やリリース時期を決めることができる[115][117]。ROS-Industrialでの知財マネジメントに関する取り組みと言える[117]

ROS 2

ROSは、もともと以下の前提のもと設計された[25][40]

  • 単一のロボットであること
  • ワークステーションクラスの計算資源が利用できること
  • リアルタイム処理は不要であること[† 5]
  • 十分高速で安定したネットワーク接続環境であること
  • 学術分野を主とした研究用アプリケーションであること
  • 規制や禁止事項がなく、最大限の柔軟性があること

これらは、2007年の開発開始時に設定されたものであり、その後のROSコミュニティの発展により、その利用範囲は製造・農業・商業分野に広がり、ROSを搭載したロボットが製品化されるようになった[118][40]。利用分野の拡大によって、ROSに以下のような新たな要望が寄せられるようになった[118][40]

  • 複数ロボットの同時制御
  • 組み込みシステム用の小型コンピュータのサポート
  • リアルタイム制御への対応
  • 貧弱なWi-fi環境などの不安定なネットワークへの対応
  • 製品利用への対応

また、ROSでは配信-購読型のメッセージ通信基盤を独自開発していたが、その後の技術の発展により、ZeroconfProtocol BuffersData Distribution Service (DDS) といったROSの要件に合ったオープンソースの通信ミドルウェア等が登場した[119][40]。ROSの開発者らは、ROSの次世代化のあり方を検討した結果、既存のROSを問題なく利用しているユーザへの影響を抑えるため、既存のROSと切り離して次世代バージョン「ROS 2」を開発することとなった[25]

ROS 2の通信ライブラリは、独自実装から Data Distribution Service (DDS) に置き換えられた[119]。これにより、メッセージ通信のリアルタイム性が向上し、ハードウェアとOSがリアルタイム性を持つものであれば、ROSの標準機能でリアルタイム制御を実現できるようになった[120]。また、ROS 2 ではビルドシステムもアップグレードされ、catkinをベースに「ament」が開発された[120]。これらの新機能に対応してROS 2ではAPIが新規設計されたが、既存のROS (ROS 1) との間で相互にメッセージ通信を行うためのブリッジプログラムも用意されており、両者の相互運用も可能である[119]

ROS 2は2015年から段階的にアルファ版、ベータ版が公開された[41]。そして、2017年12月に最初のリリース版「Ardent Apalone」が公開され、2018年7月には新バージョン「Bouncy Bolson」が公開された[41]。「Bouncy Bolson」の時点でROS 2は、Ubuntu (16.04, 18.04)、macOS Sierra、Windows 10で利用できる[121]。ROS 2のドキュメントは GitHub 上で公開されており、インストール方法を解説したページも用意されている[† 6]

脚注

注釈

  1. ^ a b 操作対象物をマニピュレータやハンド等で望みの位置・方向へ動かすこと[12]
  2. ^ 公式サイト:https://robots.ros.org 、ROSの利用ロボットの紹介ページ:https://robots.ros.org
  3. ^ 例えば、Kinetic Kame の対応OSは http://wiki.ros.org/kinetic で確認できる。また、ROSの対象プラットフォームについては http://www.ros.org/reps/rep-0003.html で確認できる。いずれも2018年10月15日閲覧。
  4. ^ ROS Answers のURL: https://answers.ros.org/questions/
  5. ^ ただし、ROS 1でも特殊な実装とハードウェア等の対応があればリアルタイム制御は可能である[122]
  6. ^ GitHubのROS 2のページ:https://github.com/ros2/ros2/wiki

脚注

  1. ^ a b c d e f g 表, 倉爪 & 鄭 2018, p. 12.
  2. ^ “About ROS”, ROS.org, http://www.ros.org/about-ros/ 2018年10月15日閲覧。 
  3. ^ Quigley et al. 2009.
  4. ^ 表, 倉爪 & 鄭 2018, pp. 9–10.
  5. ^ a b c 成田 et al. 2012, p. 6.
  6. ^ a b 岡田 2012a, pp. 8–9.
  7. ^ a b c d e 銭 2016, p. 16.
  8. ^ ROS/Introduction”. ROS Wiki. 2018年10月11日閲覧。
  9. ^ 表, 倉爪 & 鄭 2018, p. 11.
  10. ^ What is ROS exactly? Middleware, Framework, Operating System?”. ROS Answers: Open Source Q&A Forum. 2018年9月25日閲覧。
  11. ^ 成田, 中川 & 小川 2013, p. 8.
  12. ^ 相山, 康道 (2008), “ロボット・マニピュレーションの基礎(はじめての精密工学)”, 精密工学会誌 (公益社団法人精密工学会) 74 (10): 1042-1045, doi:10.2493/jjspe.74.1042, ISSN 09120289 
  13. ^ 岡田 2012a, p. 9.
  14. ^ 岡田 2012a, p. 22.
  15. ^ 表, 倉爪 & 鄭 2018, p. 14.
  16. ^ a b c d e f g 岡田 2012b, pp. 22–23.
  17. ^ a b c 表, 倉爪 & 鄭 2018, pp. 14–15.
  18. ^ a b 影木 2011, p. 30.
  19. ^ a b c 表, 倉爪 & 鄭 2018, p. 15.
  20. ^ a b c 表, 倉爪 & 鄭 2018, pp. 15–16.
  21. ^ a b c d e NEDO 2014, pp. 6-43–6-44.
  22. ^ a b 40万ドルのパーソナルロボット「PR2」、米ベンチャーが発売”. ITmedia NEWS (2010年9月9日). 2015年10月2日時点のオリジナルよりアーカイブ。2018年10月14日閲覧。
  23. ^ 成田 et al. 2012, p. 8.
  24. ^ PR2 beta Programming”. Willow Garage. 2017年2月20日時点のオリジナルよりアーカイブ。2018年10月14日閲覧。
  25. ^ a b c d e f g h 表, 倉爪 & 鄭 2018, p. 423.
  26. ^ a b c d e Description”. ROS-Industrial. 2018年10月2日閲覧。
  27. ^ a b c d e Brief History”. ROS-Industrial. 2018年10月1日閲覧。
  28. ^ a b iRobot and Willow Garage Debate Closed vs. Open Source Robotics at Cocktail Party”. IEEE Spectrum. 2019年9月25日閲覧。
  29. ^ 河本, 和宏 (2016年7月22日). “ロボットの“PARC”「Willow Garage」が撒いた種”. MONOist. 2019年9月25日閲覧。
  30. ^ a b c 成田 et al. 2012, p. 28.
  31. ^ B. Hannaford; J. Rosen; D. W. Friedman; H. King; P. Roan; L. Cheng; D. Glozman; J. Ma et al. (2013), “Raven-II: An Open Platform for Surgical Robotics Research”, IEEE Transactions on Biomedical Engineering 60 (4): 954-959, doi:10.1109/TBME.2012.2228858, ISSN 0018-9294 
  32. ^ a b 成田 et al. 2012, p. 29.
  33. ^ An open-source robo-surgeon - Monitor”. The Economist (2012年3月3日). 2018年9月29日閲覧。
  34. ^ a b c aa Roush, Wade (2012年3月29日). “Can Willow Garage's "Linux for Robots" Spur Internet-Scale Growth?”. Xconomy. 2018年9月29日閲覧。
  35. ^ 成田 et al. 2012, pp. 28–29.
  36. ^ a b c 成田, 中川 & 小川 2013, p. 6.
  37. ^ 表, 倉爪 & 鄭 2018, pp. 16–17.
  38. ^ a b c d e f 表, 倉爪 & 鄭 2018, p. 18.
  39. ^ a b ROSCon 2018”. 2018年10月13日閲覧。
  40. ^ a b c d e f g h i Why ROS 2.0?”. ros2.org. 2018年10月18日閲覧。
  41. ^ a b c d Releases”. ros2/ros2 Wiki GitHub. 2018年10月19日閲覧。
  42. ^ 表, 倉爪 & 鄭 2018, pp. 7, 16.
  43. ^ 表, 倉爪 & 鄭 2018, pp. 181–184.
  44. ^ a b c 表, 倉爪 & 鄭 2018, pp. 181–182.
  45. ^ 表, 倉爪 & 鄭 2018, pp. 22–25.
  46. ^ 表, 倉爪 & 鄭 2018, p. 22.
  47. ^ MS、Windows向けRobot Operating Systemの試験リリースを発表”. CNET Japan. 2018年10月12日閲覧。
  48. ^ ros-win”. 2018年10月12日閲覧。
  49. ^ a b 表, 倉爪 & 鄭 2018, p. 67.
  50. ^ Distributions”. ROS Wiki. 2018年10月13日閲覧。
  51. ^ Distributions”. ROS Wiki. 2018年10月11日閲覧。
  52. ^ a b 表, 倉爪 & 鄭 2018, p. 17.
  53. ^ a b c 銭 2016, p. 6.
  54. ^ a b 表, 倉爪 & 鄭 2018, p. 13.
  55. ^ a b c APIs”. ROS Wiki. 2018年10月15日閲覧。
  56. ^ 表, 倉爪 & 鄭 2018, pp. 44, 67–68.
  57. ^ a b 表, 倉爪 & 鄭 2018, pp. 67–68.
  58. ^ 銭 2016, p. 7.
  59. ^ a b c d e 表, 倉爪 & 鄭 2018, p. 45.
  60. ^ 表, 倉爪 & 鄭 2018, p. 181.
  61. ^ 表, 倉爪 & 鄭 2018, pp. 181–207.
  62. ^ a b 銭 2016, p. 5.
  63. ^ 表, 倉爪 & 鄭 2018, p. 123.
  64. ^ 表, 倉爪 & 鄭 2018, p. 23, 123, 130, 281, 371.
  65. ^ 表, 倉爪 & 鄭 2018, pp. 123–130.
  66. ^ a b 表, 倉爪 & 鄭 2018, pp. 130–139.
  67. ^ a b 表, 倉爪 & 鄭 2018, pp. 397–421.
  68. ^ 表, 倉爪 & 鄭 2018, pp. 371.
  69. ^ a b c 表, 倉爪 & 鄭 2018, pp. 281–289.
  70. ^ 表, 倉爪 & 鄭 2018, p. 68.
  71. ^ 表, 倉爪 & 鄭 2018, pp. 68–69.
  72. ^ 表, 倉爪 & 鄭 2018, pp. 68, 70–71.
  73. ^ melodic/Installation/Ubuntu”. ROS Wiki. 2018年10月14日閲覧。
  74. ^ 表, 倉爪 & 鄭 2018, pp. 67–68, 181–215.
  75. ^ a b 銭 2016, p. 3.
  76. ^ 銭 2016, p. 82.
  77. ^ a b 銭 2016, p. 8.
  78. ^ a b 表, 倉爪 & 渡邊 2015, p. 44.
  79. ^ 表, 倉爪 & 鄭 2018, p. 47.
  80. ^ catkin/conceptual_overview”. ROS Wiki. 2018年9月26日閲覧。
  81. ^ a b bloom”. ROS Wiki. 2018年10月16日閲覧。
  82. ^ a b 銭 2016, p. 12.
  83. ^ 銭 2016, pp. 12–13, 47.
  84. ^ a b c 表, 倉爪 & 鄭 2018, p. 44.
  85. ^ 銭 2016, p. 13.
  86. ^ 表, 倉爪 & 鄭 2018, pp. 44, 54.
  87. ^ 表, 倉爪 & 鄭 2018, pp. 49.
  88. ^ a b c 銭 2016, pp. 13–15.
  89. ^ a b 表, 倉爪 & 鄭 2018, pp. 44–46, 50–59.
  90. ^ 表, 倉爪 & 鄭 2018, p. 50.
  91. ^ 表, 倉爪 & 鄭 2018, p. 424.
  92. ^ a b 銭 2016, p. 9.
  93. ^ a b c 銭 2016, pp. 14–15.
  94. ^ 表, 倉爪 & 鄭 2018, pp. 45, 52.
  95. ^ a b c d 表, 倉爪 & 鄭 2018, pp. 52, 153.
  96. ^ a b 銭 2016, p. 62.
  97. ^ a b c 銭 2016, p. 204.
  98. ^ 表, 倉爪 & 鄭 2018, p. 46.
  99. ^ a b 銭 2016, p. 204–206.
  100. ^ a b c 表, 倉爪 & 鄭 2018, pp. 46, 58.
  101. ^ Quigley, Gerkey & Smart 2015, pp. 61–62.
  102. ^ 成田 et al. 2012, p. 7.
  103. ^ 成田 et al. 2012, pp. 6–7.
  104. ^ 表, 倉爪 & 鄭 2018, pp. iii, 7.
  105. ^ a b 表, 倉爪 & 鄭 2018, pp. ii, 7–8.
  106. ^ a b c d 表, 倉爪 & 鄭 2018, p. 48.
  107. ^ 表, 倉爪 & 鄭 2018, pp. 48, 142–143.
  108. ^ 表, 倉爪 & 鄭 2018, pp. 12, 48.
  109. ^ a b 表, 倉爪 & 鄭 2018, p. xvi.
  110. ^ a b Support”. ROS Wiki. 2018年10月14日閲覧。
  111. ^ a b ROS/Concepts”. ROS Wiki. 2018年10月16日閲覧。
  112. ^ 表, 倉爪 & 鄭 2018, p. 16.
  113. ^ ROS-Industrial”. ROS-Industrial. 2018-00-01閲覧。
  114. ^ 成田, 中川 & 小川 2013, p. 27.
  115. ^ a b c d e f NEDO 2014, p. 6-43.
  116. ^ Current Members”. ROS-Industrial. 2018年10月6日閲覧。
  117. ^ a b 成田, 中川 & 小川 2013, p. 32.
  118. ^ a b 表, 倉爪 & 鄭 2018, pp. 423–424.
  119. ^ a b c 表, 倉爪 & 鄭 2018, pp. 424–425.
  120. ^ a b 表, 倉爪 & 鄭 2018, p. 426.
  121. ^ Release Bouncy Bolson”. ros2/ros2 Wiki GitHub. 2018年10月19日閲覧。
  122. ^ ROS/Introduction”. ROS Wiki. 2018年10月19日閲覧。

参考文献

  • 岡田, 慧 (2012a), “ROS(ロボット・オペレーティング・システム)”, 日本ロボット学会誌 30 (9): 830-835, doi:10.7210/jrsj.30.830 
  • 岡田, 慧 (2012b), “海外のロボット用オープンソースソフトウェアの動向と今後の可能性”, システム/制御/情報 56 (11): 584-589, doi:10.11509/isciesci.56.11_584 
  • 影木, 准子 (2011), “米国のロボット研究グループの広報戦略”, 日本ロボット学会誌 29 (2): 151-153, doi:10.7210/jrsj.29.151 
  • 銭, 飛 (2016), ROSプログラミング, 森北出版 
  • 出杏光, 魯仙 (2010), “海外の動向:ROS・OpenRAVEの新オープンソース開発環境が活かす知的マニピュレーション”, 日本ロボット学会誌 28 (5): 585-588, doi:10.7210/jrsj.28.585 
  • 成田, 雅彦; 加藤, 由花; 中川, 幸子; 小川, 紘一 (2012), “技術のオープンイノベーション-Robot-OS(ROS)の戦略と我が国ロボット技術開発の方向性-”, 東京大学政策ビジョン研究センター, http://pari.u-tokyo.ac.jp/unit/iam/outcomes/pdf/papers_120806.pdf 2018年9月21日閲覧。 
  • 成田, 雅彦; 中川, 幸子; 小川, 紘一 (2013), “ロボット技術のオープンイノベーション(その2)-Robot-OS(ROS)のグローバル戦略と日本のロボットソフトウェア基盤開発の方向性-”, 東京大学政策ビジョン研究センター, http://pari.u-tokyo.ac.jp/unit/iam/outcomes/pdf/papers_130617.pdf 2018年9月21日閲覧。 
  • 表, 允晳; 倉爪, 亮; 渡邊, 裕太 (2015), 詳説 ROSロボットプログラミング, Kurazume Laboratory, ISBN 9784990873608, https://github.com/bmagyar/rosbook_jp 
  • 表, 允晳; 倉爪, 亮; 鄭, 黎縕 (2018), ROSロボットプログラミングバイブル, オーム社, ISBN 9784274221965 
  • Quigley, Morgan; Conley, Ken; Gerkey, Brian; Faust, Josh; Foote, Tully; Leibs, Jeremy; Wheeler, Rob; Ng, Andrew Y (2009), “ROS: an open-source Robot Operating System”, ICRA workshop on open source software 3 (3.2): 5 
  • Quigley, Morgan; Gerkey, Brian; Smart, William D. (2015), Programming Robots with ROS, O'Reilly Media, ISBN 9781449323899