第1回 ROSとは?基本的概念とROS2が必要になった背景
第1回 ROS【Robot Operating System】解説 コラム
このコラムでは数回に分けて、ROS(Robot Operating System)とは?についてご紹介します。その後、実践編として実際に物理的なものを使って動かしてみた様子もお伝えします。連載初回は「ROSとROS2」です。
- 第1回 ROSとは?基本的概念とROS2が必要になった背景
- 第2回 ROSとROS2のプログラミング概念
- 第3回 ROSとは?ROSのパッケージ構成を分かりやすく解説
- 第4回 ROSアプリケーション開発のモデルケース
- ROS実践編、自作ロボットでROSを動かした様子とQ&A
※ROS技術が学べるオンライン学習 Eureka Box(ユーリカボックス)で公開中
想定する読者 |
|
想定する読者の 知識レベル |
|
本連載を読んだ後に得られる期待値 |
|
目次
1. ROSとROS2
ROSとは何か
ROSとは、Robot Operating Systemの略で、ロボット開発のために必要な、plumbing(通信)とtools(ツール群)とcapabilities(機能群)とecosystem(エコシステム)が含まれるオペレーティングシステムです。オペレーティングシステムと言ってはいますが、macOSやWindowsとは異なります。
また次のように定義されています。
― Brian Gerkey氏
出典:"What is ROS exactly? Middleware, Framework, Operating System?"
https://answers.ros.org/question/12230/what-is-ros-exactly-middleware-framework-operating-system/(参照 2020/12/18)
では、上記のそれぞれの要素について見ていきましょう。
<通信>
ROSは、オペレーティングシステムと言いながら、その基本部分は分散コンピューティングのための通信ミドルウェアです。なぜそれほど通信部分が重視されているのでしょうか。
ロボットにはセンサーやモーターやアクチュエーターがたくさんついていて、それらを異なる周期で実時間制御しなければなりません。それらの制御を1つのプロセッサ、1つのスレッド、1つのループで実現すると、ソフトウェアが非常に複雑になってしまいます。逆に、スレッドで複数のループを使用すると、こんどは実時間の制御が難しくなります。
このような、相反する問題を解決するためにはプロセッサを分けてしまえばいいわけですが、そのプロセッサ間の通信をどうするのかが、ロボット開発において昔から常に問題になっていました。
そのような経緯で、ROSの基本部分は通信ミドルウェアになっています。それに加えて、ツール群、機能群、エコシステムが提供されています。
<ツール群>
ロボット開発に必要なツールが一式提供されています。具体的には次のようなものです。
- catkin、ament、colcon …… ビルドシステム
- roslaunch …… 起動(launch)システム
- rqt …… デバッグツール
- rviz …… 情報の可視化
- gazebo …… 物理エンジンを搭載するシミュレータ
- rosbag …… 通信データの記録・再生
これらをインストールすることで、ロボット開発を始めることができます。
<機能群>
ロボット開発に有用な2,000以上のライブラリが開発され、入手しやすいよう整えられています。たとえば次のようなものがあります。
- センサ・アクチュエータ …… カメラ、LiDAR、IMU、モータなど
- アプリケーション …… ナビゲーション、SLAM、動作計画など
アプリケーションとは、センサやアクチュエータより高機能なものです。たとえば無人で掃除や警備や運搬を行うロボットがありますが、そこで使われているのがナビゲーションやSLAM(Simultaneous Localization and Mapping)という技術です。動作計画は、たとえば手の付いたロボットで手をどのように動かせばいいかの計算を行うようなライブラリです。navigationパッケージとMoveIt!という動作計画パッケージとがROSの2大パッケージと言われています。
<エコシステム>
便利なツールや機能群、それからコアの通信部分を含めて、世界中の開発者がオープンソースでメンテナンスしたり共有したりする仕組みが整っています。それによって、コードとドキュメントが進化し続けます。
以上から、ROSは次のようにまとめることができます。
- ロボットリアルタイム制御の分散システムを構築するためのミドルウェアであり、
- 開発のための支援ツールも一式提供されており、
- 世の中の秀逸なコンポーネントを共有する仕組みが整っており、それを組み合わせて開発することができる。
そのため、ROSはロボットソフトウェア開発フレームワークのデファクトスタンダードであると言われています。
2.ROSの活用事例
デファクトスタンダードとは言っても、実際にどの程度使われているのでしょうか。
まず研究開発での活用について見ていきましょう。DARPA Robotics Challengeという世界的に有名なロボットのコンテストがあります。2015年に行われたそのコンテストで、既に、決勝に進出した23台のロボットのうち18台がROSを搭載していました。また、つくばチャレンジという、つくば市内の遊歩道などでロボットを自律走行させるというコンペティションがあるのですが、2019年の実績では、参加ロボット66台のうち49台がROSを搭載していました。
国内商用製品でROSを使用している例には、次のようなものがあります。
ティアフォーの自動運転のソフトウェア 画像出典:株式会社ティアフォー https://tier4.jp/(参照 2021/5/14) |
|
ソニーのaibo 画像出典:ソニーマーケティング株式会社 http://aibo.sony.jp/(参照 2021/5/14) |
|
SEQSENSEの警備ロボット 画像出典:SEQSENSE株式会社 https://www.seqsense.com/(参照 2021/5/14) |
|
近距離WHILLのモビリティ 画像出典:WHILL株式会社 https://whill.inc/jp/(参照 2021/5/14) |
|
Boston DynamicsのSPOT(犬型ロボット)にROSを搭載したパッケージを発売 画像出典:Clearpath Robotics Inc. https://clearpathrobotics.com/spot-robot/(参照 2021/5/14) |
Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。
3.ROSがデファクト標準になりつつあるわけ
ROSがデファクト標準になりつつあるのには、次の3つの理由があります。
- 既存の資産を使って容易かつ迅速にロボットを構築できる
- 試行やデバッグを容易にするツールが提供されている
- 上記のような開発資産の共有と進化を促進する枠組みを提供している
まず一番重要なのは1点目です。ロボット開発には、センシング、アクチュエーション、画像処理、ポイントクラウド、音声認識、SLAM、運動学計算など、多様な技術が必要とされます。しかし、そのすべてを自分で開発することは困難であり、利用できるものがあるなら利用したいところです。実際、それぞれの技術に秀逸なオープンソースソフトウェアが存在するのですが、それをロボットで使おうと思っても統合が困難です。具体的に問題になるポイントは、メッセージ通信、データシリアライゼーション、データ型標準化、複数言語対応など、さまざまなものがあります。しかし、世界中のロボット開発資産がROSというエコシステムの中で共有され、再利用できるようになったことで、ロボット開発の難しさは劇的に下がりました。
2点目の、秀逸なツールがデフォルトで提供されている点も重要です。従来の手法でロボットのデバッグを行うのは困難です。PCやWebのソフトウェアであれば、問題のありそうなところで止めて確認できますが、現実世界はブレークポイントで時間を止めることはできません。連続系の制御はおおよそそうなのですが、ロボットの場合は特に軸(自由度)が大きいためそれが顕著であり、センサ値や計算値を見ても何が起きているのかが理解しにくいという問題があります。それに対して、ROSでは、データ可視化、物理シミュレータ、データ記録・再生などの開発支援ツールを標準で提供しています。
次は、3点目の進化と共有の枠組みです。今ではGitHubをはじめさまざまな仕組みが存在しますが、かなり前からオープンソースソフトウェアや分散コラボレーションのトレンドに沿ったエコシステムを形成できたことで、上の2点を達成できたのだと思います。
4.ROSからROS2へ
ROS2が必要になった背景
ROSがそのように成功を収めてきたのなら、なぜROS2が必要になったのでしょうか。
ROSは、もともと、研究用ロボットアプリケーションのラピッドプロトタイピング用ツールとして設計されました。Willow Garage社がPR2ロボットを開発する環境としてスタートしています。PR2を使用した研究開発の促進を目的としていましたが、他のロボットでもソフトウェアを再利用できるようにするために、抽象化のレベルを定義することに注力しました。
しかし、ROSが認められて普及し、用途が拡大していくと、想定していなかったようなユースケースが発生します。
PR2は全方位に移動する2本の腕を持つロボットですが、その他に、一般的な自動車のように4輪とステアリングで移動するものや、二足歩行するヒューマノイド、もっと軸の多い産業用アーム、ドローンなど、さまざまなものにROSを使いたいという要望が出てきます。また、用途についても、最初は学術研究を中心に使われていたのが、産業に応用されるようになり、工場のラインにある製造ロボットや、農薬を撒くドローン、無人で掃除をしてくれるロボットなどに使われるようになってきます。
そのような想定ターゲットの違いをまとめたのが次の表です。
ROS | ROS2 | |
ロボットの同時利用数 | 単体ロボットのみ対応 | 複数ロボットにも対応 |
計算資源 | 高性能計算機のみ対応 | 組込みプラットフォームにも対応 |
リアルタイム制御 | 特別な作法に従う必要あり | 一般的なプロセス内・プロセス間通信 |
ネットワーク品質 | 高品質のみ対応 | 欠損や遅延も許容 |
プログラミング形式 | 最大限にユーザの自由 | 柔軟性を残しながらも形式を固定 |
アプリケーション | 研究、学術用途のみ対応 | 製品化にも対応 |
出典:近藤 豊 『ROS2ではじめよう 次世代ロボットプログラミング』(技術評論社, 2019)
これらを実現するために、ROSの延長線上に作成する選択肢もあったとは思うのですが、現存するROS資産の保全のために新たにROS2を設計する道を選んだとのことです。そうして、次世代機能を取り入れたバージョン「ROS2」が開発されました。ROSとROS2の相互運用に関してはブリッジプログラム(ros1_bridge)で対応しています。
ROS2のフィーチャ
ROS2のフィーチャをROSと比較して表にまとめました。
ROS | ROS2 | |
プラットフォーム | Ubuntu ※DistributionによってはmacOS、Windows10、他Linux |
Ubuntu、macOS、Windows |
通信 | XMLRPC + TCPROS ※独自開発の通信ライブラリ |
DDS(Data Distribution Service) ※OMGにより標準化された通信MW仕様 |
プログラミング 言語 |
言語ごとにスクラッチで開発されたクライアントライブラリ(roscpp、rospy、…) | C言語ベースの共通基盤(rcl)の上に各言語用のクライアントライブラリを実装(rclcpp、rclpy、…) |
ビルドシステム | rosbuild、catkin | ament、colcon(catkin/amentを呼び分け) |
IDL(Interface Description Language) | ROS IDL *.msg/*.srv |
ROS IDLをDDS/CORBA IDLに変換 *.msg/*.srv → *.msg.idl、*.srv.idl |
Launchシステム | XML | Python ⇒条件分岐などのより複雑なロジックを記述可能 |
複数ノード対応 | 1ノードを1プロセスで実行 | 複数ノードを1プロセスで実行可能 |
リアルタイム性 | 通信がTCPであるためメッセージ送信の制御ループに関してリアルタイム性の保証が困難 | 通信がUDPであるためメッセージ送信をリアルタイム周期で行うことが可能 ※他OSやHWのリアルタイム性確保が必要 |
計算グラフ | 起動時のみノードとトピックのマッピングが可能 | ノード起動時だけでなく実行途中でノードとトピックを再マッピングすることが可能 |
組込みシステム 対応 |
組込みボードとシリアル通信(rosserial(UART)) | ファームウェアに直接ノードを実装可能 ※ROSの通信ライブラリのみを使って、組込みボードに直接ROSプログラミングを行うことが可能 |
ネームサービス | ノード間の接続のためのネームサービスをマスタで実行 ※マスタが単一障害点 |
DDSミドルウェアを介して直接通信先を検索してノード間を接続 |
出典:表允皙, 倉爪亮, じょんりょうん 『ROSロボットプログラミングバイブル』(オーム社, 2018)を基に作成
内部アーキテクチャ
内部アーキテクチャは次のように変化しています。
一番大きな違いは、赤系で描いた通信の部分です。ROSの頃は、TCPROSという独自の通信プロトコルを使用していました。それを、ROS2では、APIだけ定義し、DDSという標準的な通信の規格を満たしていれば実装は何にでも置き換えられる、という仕組みにしました。商用製品では信頼性が必要になるので、それを各ベンダーに委ねられるようにしたわけです。
同様に、ROSのときは「ROS Master」というものが存在していて、分散した各プログラムを束ねていたのですが、そこが単一障害点になっていました。ROS2では、DDSの「Dynamic Discovery」によってプログラムが互いを見つけられるようになり、ROS Masterが不要になっています。
5.ROS(Robot Operating System)を実際に学んでみる
ROSの技術を実際に学んでみたいという方に、まずは無料でお試しいただけるオンライン学習プラットフォームをご提供しております。
業務が多忙なエンジニアでも、スキマ時間で効率的に実践的な学習が出来るEureka Boxは、エンジニアの現場の声から生まれたツールです。
ソフトウェア開発を改善するための開発技術を“知り・学び”“実践する”
超実践的オンライン学習プラットフォーム
Eureka Box(ユーリカボックス)
ROS(Robot Operating System)を正しく理解した上で適用し、最大限の効果を得られるようスキルアップしたい方にもEureka Boxでの学習はお勧めで、無料会員登録だけでも以下の特典が受けられます。
- 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
- USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
- ソフトウェア開発に関わる無料お試しコンテンツも充実
以上、ROSおよびROS2について、概要をご紹介しました。次回は、より実装に近い部分に踏み込みます。
関連コラム
- 第1回 ROSとは?基本的概念とROS2が必要になった背景
- 第2回 ROSとROS2のプログラミング概念
- 第3回 ROSとは?ROSのパッケージ構成を分かりやすく解説
- 第4回 ROSアプリケーション開発のモデルケース
- ROS実践編、自作ロボットでROSを動かした様子とQ&A
※ROS技術が学べるオンライン学習 Eureka Box(ユーリカボックス)で公開中