Robot Operating System

Robot Operating System (ROS) とは、ロボット用のソフトウェアプラットフォームである。ROSはその名に「Operating System」を含むが、Microsoft WindowsやiOSのようなコンピュータのオペレーティングシステム (OS) ではなく、既存のOS上で動くミドルウェアやソフトウェアフレームワークの一種であり、「メタオペレーティングシステム」 (meta-operating system) とも説明される。
ROSはロボットソフトウェアの共同開発を世界規模で推進することを目指している。スタンフォード大学の学生が開発した「Switchyard」プロジェクトを起源にもち、それを引き継いだアメリカのウィローガレージ社が2007年に本格開発を開始し、2010年に最初のリリース版が公開された。その後、非営利団体「オープンソースロボット財団」（現「オープンロボティクス」）が設立され、ROSの開発を主導する役割が引き継がれた。オープンソースソフトウェアとして開発・公開されており、世界中から多くの人々が開発に参加している。
ROSが動作するOSはUbuntuやLinux MintなどのLinuxが中心で、macOS、Windows、Androidでも一部の機能が対応している。ハードウェアの抽象化、低レベルのデバイス制御、汎用的な機能の実装、プロセス間のメッセージ通信、パッケージ管理などを行うほか、ソフトウェアの開発や実行などのためのツールやライブラリを提供する。分散コンピューティングシステムとして設計され、ロボットに必要な様々な計算を複数のプロセスで並列的に行う。各プロセスは単独または複数のコンピュータ上で実行可能であり、処理結果を相互に送受信しながら、1つの大きなソフトウェアシステムとして動作する。ROSのソフトウェアは「コアユーティリティ」と「パッケージ」に分かれており、ユーザは使いたい機能のパッケージを選択してインストールすることで、ロボットに必要な各種機能を利用できる。パッケージは自作することが可能で、ROSはC++やPythonをはじめ、LispやJavaなど多数のプログラミング言語をサポートしている。
ROSを搭載したロボットは、移動ロボットやロボットアームのほか、ヒューマノイド、自動運転車や無人航空機（ドローン）、自律型無人潜水機などと様々である。学術研究を主な対象として開発が始まったROSだが、次第に産業用途にも利用範囲が広がり、ROSを搭載したロボットが製品化され市場に登場するようになっている。新たな利用領域に求められる機能を実装するため、ROSの次世代バージョンである「ROS 2」の開発・リリースも始まっている。

**ROSとは**
ROSの目標は、ロボットソフトウェア開発におけるコラボレーションを全世界的に推進することであるp=12。特に、ロボットの研究・開発で用いられるソースコードの再利用性を最大化することを目指して開発されたp=12。
ROSはハードウェアの抽象化、低レベルのデバイス制御、汎用的な機能の実装、プロセス間のメッセージ通信、パッケージ管理などを行うほか、複数のコンピュータに渡ってプログラムの取得・開発・実行など行うためののツールやライブラリを提供するpp=9–10。
ROSはRobot Operating Systemの略だが、この言葉からはROSの実態を正確に把握しにくいとの指摘もあるpp=830–831。ROSの情報発信における中心的サイトp=16である「ROS Wiki」では、ROSを「メタオペレーティングシステム」 (meta-operating system) と呼んでいるp=11。ROSプロジェクトの中心人物であるブライアン・ガ―キー (Brian Gerkey) は、ROSとは何かという質問に対し「ROS = plumbing（通信）+ tools（ツール群）+ capabilities（機能群）+ ecosystem（エコシステム）」と答え、次のように解説しているp=8。
 plumbing（通信）
 ROSは、迅速で容易に分散コンピューティングシステムを構築できるよう設計された、配信-購読型のメッセージ通信基盤を提供する。
 tools（ツール群）
 ROSは、分散コンピューティングシステムの設定・起動・監視・デバッグ・可視化・ログ取得・テスト・停止を行う広範囲にわたるツールを提供する。
 capabilities（機能群）
 ROSは、移動・マニピュレーション・知覚といった機能をロボットに実装する多様なライブラリ群を提供する。
 ecosystem（エコシステム）
 ROSは、統合とドキュメンテーションに重点をおき、大規模なコミュニティにより支えられ進歩している。ROSのコミュニティサイトであるros.orgは、世界中の開発者から提供された大量のROSパッケージ（#ROSパッケージ参照）を取得し学習できるワンストップサービスである。
plumbingとは、いわゆるミドルウェアの通信ライブラリ機能に相当し、capabilitiesとは知能ロボットのライブラリモジュールに相当するp=831。

**歴史**

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

**ROSの誕生**
2007年11月、アメリカのロボット関連民間企業であるウィローガレージ (Willow Garage) 社がSwitchyardの開発を引き継いだpp=14–15。同社は、パーソナルロボットやサービスロボット産業の育成に取り組み、画像処理分野のオープンソースソフトウェア「OpenCV」などの開発支援も行なった企業であるpp=14–15。さらに、のちにROSのネットワークプログラムに大きな影響を与えるPlayer/Stage Projectの開発者であるブライアン・ガ―キーも加わったpp=14–15。彼らによって Switchyard プロジェクトは ROS として組織化され、ROSがロボット用フレームワークとして多くのユーザを集める最初の転換点となったpp=584–585。
ウィローガレージ社は、オープンソースコミュニティを立ち上げてソフトウェアの共有・連携・再利用を促進する枠組みを構築したp=6。そして同社は、学会や技術者・開発者向けイベントへの支援や参加を積極的に行ったp=152。また、初めてROSを利用する技術者向けに、ソフトウェアエンジニアではないヒューマンロボットインタラクション (Human-Robot Interaction; HRI) の専門家とともにマニュアル等の文書整備を推進したp=152。
2010年1月22日にウィローガレージ社は「ROS 1.0」を発表したp=15。2010年3月には、ROSの最初の公式リリースである「ROS Box Turtle」が公開されたpp=15–16。その後もアップデートが重ねられ、Linuxのようにディストリビューションとしてリリースされた
。同年8月に「C Turtle」、そして2011年3月に「Diamondback」が公開されたpp=15–16。

**PR2ベータプログラム**
ウィローガレージ社が開発したロボット「PR2」。
ROS 1.0のリリースと並行して、ウィローガレージ社はROSで制御することを前提としたロボット「PR2」を開発・発表したpp=6-43–6-44。PR2は2本のロボットアームを備えた自律移動型の研究用ロボットであるp=8。そして、ウィローガレージ社はPR2を利用したアプリケーションの開発コンテスト「PR2ベータプログラム」の公募を行なったpp=6-43–6-44。78の応募の中からアメリカ、ヨーロッパ、日本を中心とした10の大学機関と民間企業1社が採択され、特に優れた提案に対してはPR2が無償で提供されたpp=6-43–6-44。2010年9月には、40万ドルでPR2の一般販売も開始されオープンソースコミュニティへの貢献者には12万ドルの割引というインセンティブも与えられた。PR2ベータプログラムが行われた2年間に、ROSで再利用可能なツールやアプリケーションが次々と開発され、全体で2,000以上のROSパッケージがリリースされたpp=6-43–6-44。PR2やROSを利用した研究成果を映像化してYouTubeなどに投稿するグループも現れ、メディアの注目を受けたり、そこからROSに興味を持つ研究者が現れたりする好循環が生まれたp=153。これらの施策を通してROSの研究と他のロボット研究とのコラボレーションも進み、ROSの知名度が飛躍的に高められたと評されるpp=6-43–6-44。
2010年11月には、入門者への敷居を下げてROSの普及を図るため、ロボットキット「TurtleBot」が開発されたpp=259–260。TurtleBotは、iRobot社のCreateを利用した車輪式の移動ロボットであり、翌年からウィローガレージ社により発売されたほか、オープンソースハードウェアとして設計データが公開されたpp=259–260。

**発展と批判**
ROSは欧米の学術分野を中心に注目を集め、他のロボット用フレームワークに比べて急速にユーザ数を伸ばしたpp=584–585。サービスロボットを対象として開発が始まったROSだが、産業用ロボットに利用する動きも見られるようになった。ROS-Industrialプロジェクトが立ち上がり、2012年1月にはROS-Industorialの公開リポジトリが開設された。
一方で、iRobot社のCEOであるコリン・アングル (Colin Angle) は、ロボットの主要ソフトウェアをオープン化するROSのアプローチは、これまで築き上げてきた重要な知的財産に他国が便乗することを許してしまうと指摘した。彼は、ロボット産業にとってROSは危険な存在で事業の収益化に有害であると批判し、今すぐROSをクローズドにすべきと主張したp=28。
同じ頃、ワシントン大学の研究グループがソフトウェアにROSを用いた手術ロボットの研究プラットフォーム「Raven-II」を開発し、他大学の研究者らの利用も始まったp=29。これに対して、インテュイティヴ・サージカル社が開発した手術ロボット「da Vinci」の特許に関して法律上の問題が指摘されたp=29。
ウィローガレージ側は、ロボティクス分野においてもウェブ開発におけるLAMPのような基盤が必要であり、それがROSであると主張したp=28。さらに同社は、Apacheソフトウェア財団のような非営利団体の設立を検討していると表明したp=28。この非営利団体は、寄付を集めて開発者のコミュニティを組織し、独立してROSの管理・維持を行うことを意図したものだったpp=28–29。

**OSRFの設立以降**
2012年4月、ウィローガレージ社からROSプロジェクトがスピンアウトされ、非営利団体のオープンソースロボット財団 (Open Source Robotics Foundation; OSRF) が設立されたp=6。OSRFのコアミッションは「ロボットの研究・教育・製品開発に、オープンソースソフトウェアを使用するための開発・配布・導入の支援」とされたp=6。2013年2月にウィローガレージ社は、オープンソースでのロボットの研究開発を主導する役割を完全にOSRFへ引き継ぐと発表したp=6。
同年9月には、ROSの開発・管理をOSRFが引き継いで最初のディストリビューションとなる「Hydro Medusa」がリリースされたpp=16–17。これまでは1年に2回のペースでディストリビューションがリリースされていたが、Hydro Medusa 以降は、頻繁なアップデートを望まないユーザの意見を取り入れて、1年に1回の公式リリースとなった
。この間、2012年5月には、ROSコミュニティの交流や情報共有を促進するための最初の開発者会議「ROSCon」がアメリカ・ミネソタ州のセントポールで開催され、以降、開催地を変えながら毎年開催されている。
ROSの利用範囲は学術分野を超えて製造・農業・商業分野などに広がり、ROSを搭載したロボットが製品化され市場投入されるまでになったwhy-ros2。ROSはもともと学術分野での研究利用を主な目的として開発されてきたため、これら新たな利用分野の要求には合わない部分が目立つようになったwhy-ros2。また、2007年のROSのリリースの後、ROSの要件に適した新技術やソフトウェアライブラリなどの開発・普及も進んだwhy-ros2。ROSの開発者らは、ROSのさらなる発展のために、新たな要件に対応したり、新技術を取り込んだりする方法を検討したwhy-ros2。その結果、既存のROSを問題なく利用しているユーザへの影響を抑えつつROSの進化を図るため、次世代バージョンは既存のROSと切り離して開発されることとなったp=423。次世代バージョンは、「ROS 2」と名付けられ、2015年8月からアルファ版のリリースが始まり、2016年からベータ版が段階的にリリースされたros2-release。そして、2017年12月8日、ROS 2の最初の正式版「Ardent Apalone」がリリースされ、2018年7月2日には更新版の「Bouncy Bolson」がリリースされているros2-release。
この間、2017年5月にOSRFは名称を「オープンロボティクス」(Open Robotics) に変更したpp=7, 16。

**ROSを利用したロボット **
リシンク・ロボティクス社が開発したlabel=バクスターはROSの利用を前提とした双腕ロボットである。
ROSは大学・研究機関といった学術分野をはじめ、産業界や趣味分野まで幅広く利用されているp=423。ROSの利用は、移動ロボットやロボットアームをはじめ、ヒューマノイド、自動運転車や無人航空機（ドローン）、自律型無人潜水機にも広がっているpp=181–184。ROSの利用を公表しているロボットは、ROSの公式サイトで紹介されているpp=181–182。その他、企業・研究所・大学・個人などが非公開でROSを利用した多くのロボットを開発しているpp=181–182。
2015年に実施されたロボット競技大会であるDARPAロボティクス・チャレンジでは、出場した23チームのうち18チームがROSを利用したp=27。公園や遊歩道といった屋外で1キロメートル以上にわたり移動ロボットに自律走行させる「つくばチャレンジ」では、2017年の大会に参加したチームの3分の2以上がROSを利用したp=715。また、ロボカップの一部門であり、家庭環境での課題達成を競う「ロボカップ@ホーム」では、2016年大会において出場24チームのうち23チームがROSを利用したp=715。そのほかには、アメリカ航空宇宙局 (NASA) が開発し国際宇宙ステーションで稼働したRobonaut 2にもROSが利用されているp=2。
ロボットメーカが開発したロボットでROSに対応しているものは、メーカのコントローラにROSから通信できるインタフェースが用意されていることが多いp=689。2018年現在においては、サーボ機構の制御といったロボットの安全性や信頼性に直結する部分についてはロボットメーカが提供するコントローラを用いることが一般的であるp=689。

**TurtleBot**
ROSの入門者向けの標準的なロボットプラットフォームとしてTurtleBotがあるpp=259–260。TurtleBotは、教育用プログラミング言語であるLOGOの使用例として制作された亀型ロボットに由来し、ウィローガレージ社の研究者により開発されたpp=259–260。ROS Wikiで提供されているチュートリアルで登場する「turtlesim」も、Logo のプログラム体系を踏襲しているpp=259–260。
TurtleBotはこれまで初代・2代目・3代目と開発されてきたpp=259–260。いずれも車輪式の移動ロボットで、距離センサやラップトップコンピュータないしシングルボードコンピュータを搭載するpp=259–260。初代のTurtleBot1はiRobot社のCreateを利用し、2010年に開発されたpp=259–260。2代目のTurtleBot2は2012年に開発され、移動ベースとしてYujin Robot社のiCleboが採用されたpp=259–260。3代目のTurtleBot3は、ROBOTIS社のアクチュエータを駆動系に用い、ユーザがパーツを組み替えられるようになっているpp=259–260。TurtleBotはオープンソースハードウェアとして、パーツリストやCADデータが公開されており、ユーザが部品を改良したり3Dプリンタで制作したりできるpp=259–263。

**対応プラットフォーム **
ROSを使うためには、ソフトウェアを開発したりロボットを制御したりするコンピュータにROSをインストールするpp=22–25。
ROSが動作するOSはUbuntuやLinux MintなどのLinux系OSが中心で、macOS、Windows、Androidでも一部の機能が対応しているp=18。主要なOSについては、ROS Wiki でROSのインストール方法が説明されているp=22。特にUbuntuは、パッケージ管理システムに対応したインストールが可能で、ROS開発チームによるテストが行われることもあり、多く利用されているOSであるp=18。
Windows向けには、マイクロソフト社が「ROS1 for Windows」を開発し試験リリースした。ROSのインストールやノードの実行が可能であれば、様々なOS上で、異なる言語で実装されたノードを組み合わせてシステムを構築することができるp=67。各ディストリビューションが対応しているプラットフォームは、ROSの公式サイト等で確認できる。

**ディストリビューション**
ROSは2010年に「ROS 1.0」が発表されて以降アップデートを重ねており、特定のバージョンのファイル群をセットにした「ディストリビューション」としてリリースしている。
かつて、ROSのリリース周期は、対応OSである Ubuntu のリリース周期に合わせて、1年に2回（4月と10月）であったp=18。しかし、2013年にリリースされた「Hydro Medusa」からは、頻繁なアップデートを望まないユーザの意見を取り入れて、公式リリース周期は1年に1回となったp=18。
ROSディストリビューションのサポート期間は2種類ある。Ubuntu と同様に 長期サポート (Long Term Support; LTS) の考え方が取り入れられており、偶数年にリリースされるディストリビューションはLTSとして5年間のサポート、それ以外のサポート期間は2年間であるp=18。
ROSのディストリビューションは、2番目の「Box Turtle」以降いずれも亀にちなんでおり、頭文字がアルファベット順になっているp=17。ROSのディストリビューションには、それぞれ亀のアイコンが作成されているp=17。また、ROSのロゴにある9個の点も亀の甲羅に由来しているp=250。ROSが亀を象徴としたのは、亀の上に乗った象が大地を支えているとする古代の宇宙観にちなんで、知能ロボットの世界においてROSが亀のような役割を果たすようにとの願いが込められているp=1。

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

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

**ROSパッケージ**
ROSのアプリケーションプログラムは「パッケージ」と呼ばれる基本単位で管理されるp=67。パッケージは、ROSソフトウェアの基本単位であり、最小実行単位である「ノード」（#計算グラフ上の仕組み参照）を1つ以上持つか、他のパッケージのノードを実行するための設定ファイルを含むp=6。各パッケージにはパッケージ情報の管理ファイル、ビルドで用いる設定ファイル、ノードのソースコード、ノード間通信のための設定ファイルなどが含まれるp=6。共通の目的のもと複数のパッケージをグループ化した「メタパッケージ」と呼ばれるものもあるp=7。
ROSのパッケージは公式なものだけでも2,000以上あるp=181。ロボット本体の制御に関するパッケージ、センサに関するパッケージ、駆動部のためのモータ制御に関するパッケージなどがあるpp=181–182。センサパッケージはカメラ、深度カメラ、レーザ距離センサ、力／トルクセンサ、音声認識、RFIDなど様々なデバイスに対応したものが公開されているpp=181–207。

**補助・周辺ツール**
ROSにはソフトウェア開発を補助するための様々なツールが用意されているp=5。主なツールとしては、GUIユーティリティツールの「rqt」や3次元可視化ツール「RViz」、マニピュレータの動作制御のための統合ライブラリ「MoveIt!」、3次元動力学シミュレータの「Gazebo」用プラグインのほか、後述するビルドシステムやパッケージのリリースツールなどがあるp=5。
RVizの実行画面のスクリーンショット。
RViz (ROS Visualization) は、ROSの可視化ツールの1つであるpp=123–130。視覚化の方法をプラグインとして用意することで、ROSで通信されるデータであれば種類を問わず表示することができるp=688。例えば、測域センサや3次元深度センサといったセンサ情報や、ロボットの形状モデル、地図、これから動作する計画軌道などを3次元表示することができるpp=123–130。
rqtはQtをベースとするGUI環境を提供するツールであるpp=130–139。rqtには様々なプラグインが開発されており、ROSの分散プロセスの階層構造や接続関係をグラフ化したり、ロボットの搭載カメラの映像を確認したり、時系列データをグラフにプロットしたりすることが可能であるpp=130–139。
MoveIt! は、マニピュレータの動作計画のための高速な順動力学計算やマニピュレーションのための高度なアルゴリズム、ロボットハンドの制御などの各種機能を提供するツールであるpp=397–421。そして、マニピュレータに対する深い知識がなくても動作生成などを行えるよう、GUI上で設定や操作が行えるpp=397–421。
Gazeboは、物理エンジンや3次元グラフィックスエンジンを搭載した3次元空間の動力学シミュレータであるpp=281–289。ロボットや空間の3次元モデルを読み込み、物理現象やノイズを含めたセンサの挙動などをシミュレートし、3次元映像を表示することができるpp=281–289。GazeboはROSとは独立したソフトウェアだが、ROSを主導しているオープンロボティクスが開発しているため、ROSとの親和性が高いpp=281–289。

**インストール**
ROSのファイルシステムは、インストールフォルダとユーザ作業フォルダに分けられるp=68。インストールフォルダには、ROSの中核プログラムである「roscore」を含むコアユーティリティや、ロボット関連ライブラリ、可視化やシミュレーションのための開発支援ツールなどがインストールされるpp=68–69。ユーザ作業フォルダは、ダウンロードしたパッケージやユーザが自作したパッケージを保存して編集したり、実行可能な形式にビルドしたりする作業スペースであるpp=68, 70–71。
ユーザが利用したい機能に応じて必要なパッケージやツールを追加インストールするpp=67–68, 181–215。パッケージは、パッケージ管理ツールを利用してインストールするか、リポジトリからソースコードを取得してビルドするpp=67–68。ROSは分散システムとして設計されており、複数のホスト（コンピュータ）に分散してパッケージをインストールすることも可能であるp=3。

**開発言語**
既存のパッケージにないハードウェアやアルゴリズムなどを実装するためには、自分でパッケージを作成する。ROSは複数のプログラミング言語に対応しているp=12。主要言語はC++やPythonで、そのほかにLisp、Java、Lua、Ruby、Octaveなどでプログラムを開発することができるp=82ros-wiki-apis。

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

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

**データ通信の仕組み**
ROSはソフトウェアの再利用性を高めるため、分散システムとして設計されているp=12。ノードと呼ばれるプロセスが処理結果を送受信しあいながら、ROSは1つの大きなソフトウェアシステムとして動作するpp=12–13, 47。ROSのプロセスは、ピア・ツー・ピア型のネットワーク（以下、「ROSネットワーク」と呼ぶ）を構成し、ROSネットワークは計算グラフとして表現できるp=63。

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

**マスタ**
ノード間の接続情報を管理するプログラムを「マスタ」と呼び、登録されたノードが他のノードから見えるようにする役割を担うp=27pp=44, 54。コアユーティリティに含まれるプログラム「roscore」を実行することでマスタが起動されるpp=49。各ノードの起動時に、ノード名やURI、ポート番号といった通信に必要な情報がマスタに登録されるpp=13–15。マスタはノードから要求があった際に相手先ノードの情報を返し、それを元にノードは相手先ノードとピア・ツー・ピア接続を確立するpp=13–15。ROSシステムを実行するためには、ROSネットワークを構築する何れかのホストでマスタを必ず1つ起動しておく必要があるpp=44–45。マスタは1つのROSネットワークを構築・管理し、同一のROSネットワーク内で複数のroscoreは起動できないpp=44–45p=27。マスタが異なるネットワーク間でノード接続を行う場合は別途通信の仕組みを構築する必要があるp=27。

**ノード間通信**
ROSはノード間の通信方法として、単方向非同期通信方式の「トピック」、双方向同期通信方式の「サービス」、双方向非同期通信方式の「アクション」の3種の方式を備えるp=50。ROSの配信-購読型のメッセージ通信基盤は、ほぼ完全に独自開発されたものであるp=424。
 トピック
 ROSのトピック通信は、メッセージパッシングの一種であるp=9。メッセージを送る側をROSではパブリッシャ（publisher; 配信者の意）、受けとる側をサブスクライバ（Subscriber; 購読者の意）と呼ぶp=9。パブリッシャはノードの起動時に配信に必要な情報をマスタに登録するpp=14–15。サブスクライバもノード起動時に、自己の情報と購読したいメッセージをマスタに登録するpp=14–15。マスタはサブスクライバにパブリッシャのアドレスを渡すことで、サブスクライバはパブリッシャに接続しメッセージを受信するpp=14–15。トピック通信は、接続確立後に連続的にメッセージが送受信されるため、高頻度のデータ通信が必要なセンサ信号の送受信などに利用されるpp=45, 52。
 サービス
 サービス通信は、要求を受けた時に応答するサービスサーバと、サービスサーバに要求を出すサービスクライアントとの間で行われるpp=52, 153。サービス通信はクライアントがサービス要求を送信した時点から開始され、サーバからサービス応答を受信した時点で終了し、ノード間の接続が切れるpp=52, 153。サービスは、要求と応答が終われば両ノードの通信が切断されるため、ネットワークの負荷が小さいpp=52, 153。ロボットにある決まった動作の指示を出すときや、ある条件下で起こるイベントを発生させたい場合などにサービス通信が利用されるpp=52, 153。
 アクション
 サービス通信では、サーバからの応答が返ってくるまでプロセスがロックされてしまうp=204。したがって、要求から応答まで長い時間を要する処理のための通信手段として、アクション通信が実装されているp=204。アクションもサーバクライアント方式として実装され、要求を出すノードがクライアント、要求を実行し応答を返すノードがサーバとなるp=204。アクションクライアントが要求の終了条件 (Goal) をサーバに送信すると、サーバは処理を開始し、途中経過であるフィードバック (Feelback) と Goalに対する結果 (Result) を送信するp=204–206。また、クライアントは要求の取り消し  (Cancel) をサーバに送信することもできるp=204–206。アクション通信は、サービス通信のような双方向通信方式であるが、非同期通信であり実行方式はトピック通信に近いpp=46, 58。アクション通信が適した例として、移動ロボットに遠くの地点まで走行する命令を実行する場合が挙げられるpp=61–62。

**ROSコミュニティ**
ROSの大きな強みの1つとして、ライブラリ群とシェアリングの仕組みを支える活発なコミュニティ活動が挙げられるp=7。世界には様々なロボットソフトウェアプラットフォームがあるが、ROSはコミュニティ活動が特に活発とされるpp=6–7。ROSの開発はオープンロボティクスが単独で行なっているわけではなく、世界中に開かれているpp=iii, 7。大学や研究機関の研究者、産業界の技術者、さらには趣味でソフトウェアやロボットを開発しているホビイストまで多様な人たちがROSの開発に参加し貢献しているpp=ii, 7–8。また、ロボットの専門家だけでなく、計算機科学やコンピュータネットワーク、コンピュータビジョンといった分野からも専門家が参加しているpp=ii, 7–8。
 ROS Wiki
 ROSに関する情報を文書化する中心的な場として、Wikiを利用したウェブサイト「ROS Wiki」が開設されているp=16。ROS Wikiでは、ROSの基本的な説明や使い方、チュートリアル、ガイドラインなどが提供されているp=16。また、各パッケージの情報もROS Wikiで提供され、パッケージの説明やリポジトリURL、著作者、ライセンスなどが掲載されているp=16。ROS Wikiのアカウントは自由に作成することができ、ROSについて公開したい情報を共有できるp=16。
 公開リポジトリ
 ROSの公開パッケージは、GitHubなどのリポジトリで公開・管理されており、ROS WikiのパッケージのページにリポジトリのURLが記載されているpp=12, 48。ユーザは、リポジトリからパッケージのソースコードを取得することができるp=48。
 ROS Answers / メーリングリスト
 ROSに関する質問をする場として「ROS Answers」というQ&Aフォーラムもウェブ上で運営されているp=xvi。質問には、経験者などコミュニティ参加者が回答し、過去の質問を検索することができるp=xvi。また、ROSのアップデート情報を配信したり質疑応答などを行うメーリングリストも運営されている。
 ROSCon
 オンライン上だけでなく、開発者らが直接会って交流を行うイベントとして、2012年から毎年1回、開発者会議「ROSCon」が開催されている。2018年現在にまでに、ROSConの開催地は北米、ヨーロッパ、アジアから順番に選ばれているp=16。
その他、ロボット関連の国際会議でもROSに関するワークショップなどが開催されているp=830。

**ROS-Industrial**
ROS-Industrialとは、ROSを産業用ロボット向けに拡張する取り組みである。ROSはサービスロボット研究の領域で広く利用されるようになった。ROSを利用した知能情報処理機能は産業用ロボット領域へも適用できるものであり、従来は技術的・コスト的に実現困難とされた機能の実装が期待されている。産業用ロボットの持つ信頼性とオープンコミュニティの柔軟性を組み合わせることで、ROSを用いたロボットアプリケーション開発を推進し、産業用ロボットの開発コストの低減や、新規事業化や次世代ロボット市場へのROS適用などを目指しているp=27。
ROS-Industorialは、オープンソースプロジェクトとして安川電機、ウィローガレージ社、そしてアメリカの独立非営利機関であるSouthwest Research Institute (SwRI) によって共同で立ち上げられた。2012年1月、ROS-IndustorialのレポジトリがSwRIによってGitHub上に開設された。その後、2013年3月には、ROS-Industrialプロジェクトから発展的にROS-Industrial Consortium（ROS産業コンソーシアム）が設立されたp=6-43。コンソーシアムの中心メンバーは、アメリカではSwRI、ヨーロッパではドイツのフラウンホーファー研究所の生産技術・オートメーション部門 (IPA) 、アジア太平洋地域ではシンガポールのアドバンスト・リマニュファクチャリング・アンド・テクノロジー・センター (Advanced Remanufacturing and Technology Centre; ARTC) および南洋理工大学であるp=6-43。2018年10月現在、3M、ボーイング、エアバス、BMW、ボッシュ、シーメンス、ABB、キャタピラー、マイクロソフト、ユニバーサルロボットなどの民間企業のほか、ROS本体の開発を主導する「オープンロボティクス」もコンソーシアムメンバーである。
ROS-Industrialでの研究成果は原則として、BSDライセンスまたはApache 2.0ライセンスで公開される。ただし、ROS産業コンソーシアムには、Focused Technical Projects (FTP) と呼ばれる制度が設けられているp=6-43。FTPは、コンソーシアム参加企業が特定のテーマを設定して構成する研究グループであり、グループ内で費用や設備を分担し、研究成果を共有するp=6-43。FTPの研究成果は必ずしも公開されるわけではなく、FTPグループ構成メンバーの審議によって公開の可否やリリース時期を決めることができるp=6-43。ROS-Industrialでの知財マネジメントに関する取り組みと言えるp=32。

**ROS 2**
ROSは、もともと以下の前提のもと設計されたp=423。- 単一のロボットであること- ワークステーションクラスの計算資源が利用できること- リアルタイム処理は不要であること- 十分高速で安定したネットワーク接続環境であること- 学術分野を主とした研究用アプリケーションであること- 規制や禁止事項がなく、最大限の柔軟性があること
これらは、2007年の開発開始時に設定されたものであり、その後のROSコミュニティの発展により、その利用範囲は製造・農業・商業分野に広がり、ROSを搭載したロボットが製品化されるようになったpp=423–424。利用分野の拡大によって、ROSに以下のような新たな要望が寄せられるようになったpp=423–424。- 複数ロボットの同時制御- 組み込みシステム用の小型コンピュータのサポート- リアルタイム制御への対応- 貧弱なWi-fi環境などの不安定なネットワークへの対応- 製品利用への対応
また、ROSでは配信-購読型のメッセージ通信基盤を独自開発していたが、その後の技術の発展により、Zeroconf、Protocol Buffers、Data Distribution Service (DDS) といったROSの要件に合ったオープンソースの通信ミドルウェア等が登場したpp=424–425。ROSの開発者らは、ROSの次世代化のあり方を検討した結果、既存のROSを問題なく利用しているユーザへの影響を抑えるため、既存のROSと切り離して次世代バージョン「ROS 2」を開発することとなったp=423。
既存のROS (ROS 1) で独自実装だった通信ライブラリは、ROS 2ではData Distribution Service (DDS) に置き換えられたpp=424–425。DDSの採用により実現したセキュア通信、Quality of Service (QoS) 通信、リアルタイム通信、ノード間の相互発見機能はROS 2の特徴とされるp=691。これによりメッセージ通信のリアルタイム性が向上し、ハードウェアとOSがリアルタイム性を持つものであれば、ROSの標準機能でリアルタイム制御を実現できるようになったp=426ほか、単一障害点となりうる「roscore」（マスタ）を必要としないノード間ネットワークを形成可能となったp=691。これらの新機能に対応してROS 2ではAPIが新規設計されたが、 ROS 1との間で相互にメッセージ通信を行うためのブリッジプログラムも用意されており、両者の相互運用も可能であるpp=424–425。このほか、ROS 2 ではビルドシステムもアップグレードされ、catkinをベースに「ament」が開発されたp=426。
ROS 2は2015年から段階的にアルファ版、ベータ版が公開されたros2-release。そして、2017年12月に最初のリリース版「Ardent Apalone」が公開され、2018年7月には新バージョン「Bouncy Bolson」が公開されたros2-release。ROS 2 「Humble Hawksbil」の時点では、Ubuntu (22.04)、RHEL 9/Fedora、macOS、Windowsで利用できる。ROS 2のドキュメントは GitHub 上で公開されており、インストール方法を解説したページも用意されている

**脚注**

**注釈**

**脚注**

**参考文献**

**外部リンク**
  Wiki.ros.org（日本語）-  ロボット開発のオープンイノベーションを狙う ROSを概観