Robot Operating System
既存のROS (ROS 1) で独自実装だった通信ライブラリは、ROS 2ではData Distribution Service (DDS) に置き換えられた。DDSの採用により実現したセキュア通信、Quality of Service (QoS) 通信、リアルタイム通信、ノード間の相互発見機能はROS 2の特徴とされる。これによりメッセージ通信のリアルタイム性が向上し、ハードウェアとOSがリアルタイム性を持つものであれば、ROSの標準機能でリアルタイム制御を実現できるようになったほか、単一障害点となりうる「roscore」(マスタ)を必要としないノード間ネットワークを形成可能となった。これらの新機能に対応してROS 2ではAPIが新規設計されたが、 ROS 1との間で相互にメッセージ通信を行うためのブリッジプログラムも用意されており、両者の相互運用も可能である。このほか、ROS 2 ではビルドシステムもアップグレードされ、catkinをベースに「ament」が開発された。
ROS 2は2015年から段階的にアルファ版、ベータ版が公開された。そして、2017年12月に最初のリリース版「Ardent Apalone」が公開され、2018年7月には新バージョン「Bouncy Bolson」が公開された。ROS 2 「Humble Hawksbil」の時点では、Ubuntu (22.04)、RHEL 9/Fedora、macOS、Windowsで利用できる。ROS 2のドキュメントは GitHub 上で公開されており、インストール方法を解説したページも用意されている
ROSに関する質問をする場として「ROS Answers」というQ&Aフォーラムもウェブ上で運営されている。質問には、経験者などコミュニティ参加者が回答し、過去の質問を検索することができる。また、ROSのアップデート情報を配信したり質疑応答などを行うメーリングリストも運営されている。
既存のパッケージにないハードウェアやアルゴリズムなどを実装するためには、自分でパッケージを作成する。ROSは複数のプログラミング言語に対応している。主要言語はC++やPythonで、そのほかにLisp、Java、Lua、Ruby、Octaveなどでプログラムを開発することができる。
ROSの公開パッケージは、GitHubなどのリポジトリで公開・管理されており、ROS WikiのパッケージのページにリポジトリのURLが記載されている。ユーザは、リポジトリからパッケージのソースコードを取得することができる。
ROSの目標は、ロボットソフトウェア開発におけるコラボレーションを全世界的に推進することである。特に、ロボットの研究・開発で用いられるソースコードの再利用性を最大化することを目指して開発された。
ROSはハードウェアの抽象化、低レベルのデバイス制御、汎用的な機能の実装、プロセス間のメッセージ通信、パッケージ管理などを行うほか、複数のコンピュータに渡ってプログラムの取得・開発・実行など行うためののツールやライブラリを提供する。
ROSはRobot Operating Systemの略だが、この言葉からはROSの実態を正確に把握しにくいとの指摘もある。ROSの情報発信における中心的サイトである「ROS Wiki」では、ROSを「メタオペレーティングシステム」 (meta-operating system) と呼んでいる。ROSプロジェクトの中心人物であるブライアン・ガ―キー (Brian Gerkey) は、ROSとは何かという質問に対し「ROS = plumbing(通信)+ tools(ツール群)+ capabilities(機能群)+ ecosystem(エコシステム)」と答え、次のように解説している。
ROSは大学・研究機関といった学術分野をはじめ、産業界や趣味分野まで幅広く利用されている。ROSの利用は、移動ロボットやロボットアームをはじめ、ヒューマノイド、自動運転車や無人航空機(ドローン)、自律型無人潜水機にも広がっている。ROSの利用を公表しているロボットは、ROSの公式サイトで紹介されている。その他、企業・研究所・大学・個人などが非公開でROSを利用した多くのロボットを開発している。
2015年に実施されたロボット競技大会であるDARPAロボティクス・チャレンジでは、出場した23チームのうち18チームがROSを利用した。公園や遊歩道といった屋外で1キロメートル以上にわたり移動ロボットに自律走行させる「つくばチャレンジ」では、2017年の大会に参加したチームの3分の2以上がROSを利用した。また、ロボカップの一部門であり、家庭環境での課題達成を競う「ロボカップ@ホーム」では、2016年大会において出場24チームのうち23チームがROSを利用した。そのほかには、アメリカ航空宇宙局 (NASA) が開発し国際宇宙ステーションで稼働したRobonaut 2にもROSが利用されている。
ロボットメーカが開発したロボットでROSに対応しているものは、メーカのコントローラにROSから通信できるインタフェースが用意されていることが多い。2018年現在においては、サーボ機構の制御といったロボットの安全性や信頼性に直結する部分についてはロボットメーカが提供するコントローラを用いることが一般的である。
ROSにはソフトウェア開発を補助するための様々なツールが用意されている。主なツールとしては、GUIユーティリティツールの「rqt」や3次元可視化ツール「RViz」、マニピュレータの動作制御のための統合ライブラリ「MoveIt!」、3次元動力学シミュレータの「Gazebo」用プラグインのほか、後述するビルドシステムやパッケージのリリースツールなどがある。
RViz (ROS Visualization) は、ROSの可視化ツールの1つである。視覚化の方法をプラグインとして用意することで、ROSで通信されるデータであれば種類を問わず表示することができる。例えば、測域センサや3次元深度センサといったセンサ情報や、ロボットの形状モデル、地図、これから動作する計画軌道などを3次元表示することができる。
rqtはQtをベースとするGUI環境を提供するツールである。
サービス通信は、要求を受けた時に応答するサービスサーバと、サービスサーバに要求を出すサービスクライアントとの間で行われる。サービス通信はクライアントがサービス要求を送信した時点から開始され、サーバからサービス応答を受信した時点で終了し、ノード間の接続が切れる。サービスは、要求と応答が終われば両ノードの通信が切断されるため、ネットワークの負荷が小さい。ロボットにある決まった動作の指示を出すときや、ある条件下で起こるイベントを発生させたい場合などにサービス通信が利用される。