•  

コラム

  1. TOP
  2. コラム
  3. コラム
  4. 第1回 ROSとは?基本的概念とROS2が必要になった背景

第1回 ROSとは?基本的概念とROS2が必要になった背景

ROS
  • LINEで送る
  • このエントリーをはてなブックマークに追加
第1回 ROSとは?基本的概念とROS2が必要になった背景

第1回 ROS【Robot Operating System】解説 コラム

このコラムでは数回に分けて、ROS(Robot Operating System)とは?についてご紹介します。その後、実践編として実際に物理的なものを使って動かしてみた様子もお伝えします。連載初回は「ROSとROS2」です。

ROSとは?の関連コラム
連載コラム 実践編を読むには
Eureka Box 無料会員登録
本文書の目的
本連載は、次のような想定・目的で記述しています。
想定する読者
  • ROS/ROS2の存在を知っていて興味がある人
  • 世の中の情報を調べたが、コマンドやコードなどオペレーションレベルの情報が多く、基本的な概念を体系的に理解できていない人
  • ROS/ROS2を使用するイメージや享受できるメリットがわからないので、自分のプロジェクトに取り入れられるかが判断できない人
想定する読者の
知識レベル
  • 組込みシステムや制御系開発でプログラムを書いたことがある
  • TCP/UDP等を使ったネットワークプログラミングを知っていることが望ましい
本連載を読んだ後に得られる期待値
  • ある程度体系的に知識の理解・整理ができ、それをベースに、世の中の公知の情報を参照しながら、ROS/ROS2を使ったプログラミングを始めることができるようになる
  • ROS/ROS2を使った開発がどのようなものか、なかったときとどう違うかを想像でき、利点を理解できる


1. ROSとROS2

ROSとは何か

ROSとは、Robot Operating Systemの略で、ロボット開発のために必要な、plumbing(通信)とtools(ツール群)とcapabilities(機能群)とecosystem(エコシステム)が含まれるオペレーティングシステムです。オペレーティングシステムと言ってはいますが、macOSやWindowsとは異なります。

また次のように定義されています。

ROS = plumbing + tools + capabilities + ecosystem
― 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を使用している例には、次のようなものがあります。

ROSの活用事例1

ティアフォーの自動運転のソフトウェア

画像出典:株式会社ティアフォー https://tier4.jp/(参照 2021/5/14)

ROSの活用事例2

ソニーのaibo

画像出典:ソニーマーケティング株式会社 http://aibo.sony.jp/(参照 2021/5/14)
ROSの活用事例3

SEQSENSEの警備ロボット

画像出典:SEQSENSE株式会社 https://www.seqsense.com/(参照 2021/5/14)

ROSの活用事例4

近距離WHILLのモビリティ

画像出典:WHILL株式会社 https://whill.inc/jp/(参照 2021/5/14)
ROSの活用事例5:Boston DynamicsのSPOT(犬型ロボット)にROSを搭載したパッケージを発売

Boston DynamicsのSPOT(犬型ロボット)にROSを搭載したパッケージを発売

画像出典:Clearpath Robotics Inc. https://clearpathrobotics.com/spot-robot/(参照 2021/5/14)



ご不明点・ご相談ごとがあれば
お気軽にご連絡ください

ソフトウエア開発オンライン学習Eureka Box

Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。

詳細はこちら
人材開発支援助成金


3.ROSがデファクト標準になりつつあるわけ

ROSがデファクト標準になりつつあるのには、次の3つの理由があります。

  1. 既存の資産を使って容易かつ迅速にロボットを構築できる
  2. 試行やデバッグを容易にするツールが提供されている
  3. 上記のような開発資産の共有と進化を促進する枠組みを提供している

まず一番重要なのは1点目です。ロボット開発には、センシング、アクチュエーション、画像処理、ポイントクラウド、音声認識、SLAM、運動学計算など、多様な技術が必要とされます。しかし、そのすべてを自分で開発することは困難であり、利用できるものがあるなら利用したいところです。実際、それぞれの技術に秀逸なオープンソースソフトウェアが存在するのですが、それをロボットで使おうと思っても統合が困難です。具体的に問題になるポイントは、メッセージ通信、データシリアライゼーション、データ型標準化、複数言語対応など、さまざまなものがあります。しかし、世界中のロボット開発資産がROSというエコシステムの中で共有され、再利用できるようになったことで、ロボット開発の難しさは劇的に下がりました。

2点目の、秀逸なツールがデフォルトで提供されている点も重要です。従来の手法でロボットのデバッグを行うのは困難です。PCやWebのソフトウェアであれば、問題のありそうなところで止めて確認できますが、現実世界はブレークポイントで時間を止めることはできません。連続系の制御はおおよそそうなのですが、ロボットの場合は特に軸(自由度)が大きいためそれが顕著であり、センサ値や計算値を見ても何が起きているのかが理解しにくいという問題があります。それに対して、ROSでは、データ可視化、物理シミュレータ、データ記録・再生などの開発支援ツールを標準で提供しています。

次は、3点目の進化と共有の枠組みです。今ではGitHubをはじめさまざまな仕組みが存在しますが、かなり前からオープンソースソフトウェアや分散コラボレーションのトレンドに沿ったエコシステムを形成できたことで、上の2点を達成できたのだと思います。



4.ROSからROS2へ

ROS2が必要になった背景

ROSがそのように成功を収めてきたのなら、なぜROS2が必要になったのでしょうか。

ROSは、もともと、研究用ロボットアプリケーションのラピッドプロトタイピング用ツールとして設計されました。Willow Garage社がPR2ロボットを開発する環境としてスタートしています。PR2を使用した研究開発の促進を目的としていましたが、他のロボットでもソフトウェアを再利用できるようにするために、抽象化のレベルを定義することに注力しました。

ROSからROS2へ

しかし、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)を基に作成



内部アーキテクチャ

内部アーキテクチャは次のように変化しています。

ROS2ではじめよう 次世代ロボットプログラミング
出典:近藤 豊 『ROS2ではじめよう 次世代ロボットプログラミング』(技術評論社, 2019)を基に作成

一番大きな違いは、赤系で描いた通信の部分です。ROSの頃は、TCPROSという独自の通信プロトコルを使用していました。それを、ROS2では、APIだけ定義し、DDSという標準的な通信の規格を満たしていれば実装は何にでも置き換えられる、という仕組みにしました。商用製品では信頼性が必要になるので、それを各ベンダーに委ねられるようにしたわけです。

同様に、ROSのときは「ROS Master」というものが存在していて、分散した各プログラムを束ねていたのですが、そこが単一障害点になっていました。ROS2では、DDSの「Dynamic Discovery」によってプログラムが互いを見つけられるようになり、ROS Masterが不要になっています。



5.ROS(Robot Operating System)を実際に学んでみる

ROSの技術を実際に学んでみたいという方に、まずは無料でお試しいただけるオンライン学習プラットフォームをご提供しております。

業務が多忙なエンジニアでも、スキマ時間で効率的に実践的な学習が出来るEureka Boxは、エンジニアの現場の声から生まれたツールです。

ソフトウェア開発を改善するための開発技術を“知り・学び”“実践する”
超実践的オンライン学習プラットフォーム
Eureka Box(ユーリカボックス)
超実践的オンライン学習プラットフォームlink



ROS(Robot Operating System)を正しく理解した上で適用し、最大限の効果を得られるようスキルアップしたい方にもEureka Boxでの学習はお勧めで、無料会員登録だけでも以下の特典が受けられます。

Eureka Box会員登録特典(無料)
  1. 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
  2. USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
  3. ソフトウェア開発に関わる無料お試しコンテンツも充実


以上、ROSおよびROS2について、概要をご紹介しました。次回は、より実装に近い部分に踏み込みます。

シニアスペシャリスト玉木淳治

執筆者プロフィール

株式会社エクスモーション シニアスペシャリスト

玉木 淳治

 

専門分野:

レガシーシステムの可視化と改善、ソフトウェア品質診断
コード解析、ツール開発

  • LINEで送る
  • このエントリーをはてなブックマークに追加

技術別コラム一覧

要求の定義と仕様化(USDM)

ROS

システムズエンジニアリング

クラウド技術
(AWS Greengrass)

Docker

モデルベース開発(MBD)

派生開発(XDDP)

SPL

用語集