•  

コラム

  1. TOP
  2. コラム
  3. コラム
  4. 第2回 ROSとROS2のプログラミング概念

第2回 ROSとROS2のプログラミング概念

ROS
  • LINEで送る
  • このエントリーをはてなブックマークに追加
第2回 ROSとROS2のプログラミング概念

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

このコラムでは数回に分けて、ROS(Robot Operating System)とは?についてご紹介します。連載2回目は「ROS2について」その概要を説明します。

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


1. ROSのプログラミング概念

ROSの概念

ROSとROS2のプログラミング概念はよく似ているため、両方を併せて説明します。
重要な用語について、表にまとめました。

用語 説明
ノード(Node)
  • ROS/ROS2における機能単位
  • 通信を通して他のノードと情報交換を行い何らかの仕事を行う
マスタ(Master)
※ROSのみ
ノード間を接続し通信を行うためのネームサーバ
ターゲット(Target)
※ROS2のみ
  • ROS2における実行単位(プロセス)
  • ROSでは1ノード:1プロセスであるが、ROS2ではノードをクラス化しターゲットで実体化する
メッセージ
(Message)
ノード間の通信で交換されるデータ
トピック(Topic)
  • ストリーミングデータを送信するために用いられる単方向非同期メッセージ通信方式
  • トピックを流れるメッセージのデータ型は.msg形式のファイルで定義される
サービス(Service)
  • 他ノードの関数を呼び出す(RPC:Remote Procedure Call)ために用いられる双方向同期メッセージ通信方式
  • サービスのリクエスト(引数)とレスポンス(返値)は.srv形式のファイルで定義される
アクション(Action)
※ROSではライブラリ提供
目標値(ゴール)を送信して結果(リザルト)と中間結果(フィードバック)を受け取る双方向非同期メッセージ通信方式
パラメータ
(Parameter)
  • ノード内で使用されノード実行中に変更可能な変数
  • パラメータの読出/書込はパラメータサーバを通して行う
  • パラメータサーバの機能は、ROSではマスタが持ち、ROS2では各ノードが1つずつ持つ

このあと、それぞれについて、図を使って説明していきます。



ノード・マスタ(ROS)

まず、ノード・マスタです。これはROS(ROS1)特有の概念です。

ROSのプログラムは「ノード」と呼ぶ機能単位で構成されます。ノードそれぞれが実行単位(プロセス)になり、ノード間でTCP通信によって情報交換することで、1つのシステムが構成されます。ノードはどこのコンピュータに配置されても構わないため、分散コンピューティングが容易に実現できます。

ノード間の接続を確立するときに、マスタ(ネームサービス)が登場します。ノードは、マスタを通じて相手のノードが誰なのかを解決し、接続を確立することになります。ノード間が接続された後は、ノード同士で直接通信を行います。

ROSのプログラムは「ノード」と呼ぶ機能単位で構成
※引用 Eureka Box(ユーリカボックス)【体験版】ROS =連載第2回
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304


ノード・ターゲット(ROS2)

これはROS2で変化した部分です。ROS2にはマスタがなく、ROS1のように「ノード=プロセス」ではありません。

「ノード」という機能単位で構成される点はROS1と同じです。ただし、ROS2の場合は、複数のノードを実行器によって1つのプロセスで動かすことができます。この実行単位をターゲットと呼びます。

ノード間はDDSによりUDP通信によって情報交換します。ノードおよびターゲットは、ROS1と同じく、どこのコンピュータに配置されても構いません。ノードはDDS Discovery Protocolによって接続されるため、マスタは存在しません。

ノード間の通信は、同一ターゲット内であれば、共有メモリを使ったデータコピー(スマートポインタを使った場合はゼロコピー)にすることができます。


ノード・ターゲット(ROS2)
※引用 Eureka Box(ユーリカボックス)【体験版】ROS =連載第2回
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304


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

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

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

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


メッセージ通信

次に、通信の仕組み(方式)について説明します。いくつかの通信方式が利用可能です。



トピック

最も重要で、かつ、ROSで典型的に使われるのが、このトピックという仕組みを使ったメッセージ通信方式です。

最も重要でかつ、ROSで典型的に使われるトピック
※引用 Eureka Box(ユーリカボックス)【体験版】ROS =連載第2回
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304

トピック通信は、非同期かつ単方向の通信です。センサー出力など、時々刻々値が変わっていくようなストリーミングデータを送信するために用いられます。この図でいうと「publisher」がデータを送信し、そのデータに興味のある「subscriber」がそれを受信する、という形の「パブリッシャ・サブスクライバ型」(Pub/Sub型)の通信です。これがROSでの基本です。

サーバ・クライアント型の通信とは違って、パブリッシャとサブスクライバはお互いを特定することなく非同期通信します。つまり、パブリッシャは誰が聞いているかわからないけれどトピックを流し、サブスクライバは誰から来たかわからないけれど受信する、という関係です。



サービス

トピックほどには使われてはいないのですが、一般的なRPC(Remote Procedure Call)に相当する通信もできるようになっています。遠隔にあるノードの関数を呼び出す機能を実現する、同期の双方向通信です。

一般的なRPC(Remote Procedure Call)に相当する通信サービス
※引用 Eureka Box(ユーリカボックス)【体験版】ROS =連載第2回
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304

主に、実行中にあまり値が変わらないものに使われます。たとえばロボットの状態確認の場合、状態がそれほど変わらないのにロボットが自分の状態はこうだと常に送信していると、ネットワークの帯域が圧迫されてしまいます。要請に対してすぐに応答ができればよいだけの場合には、サービスの通信を使用すれば非連続なので、ネットワーク負荷を抑えられます。



アクション

また、アクションという通信方式もあります。

ROSの通信方針アクション
※引用 Eureka Box(ユーリカボックス)【体験版】ROS =連載第2回
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304

ロボットに何かを指示した場合、サービスで通信をしていると、同期通信なので終わるまで待つことになります。しかし、たとえばロボットに「手をここからここまで動かしてください」というと数秒かかったり、「100メートル先に行ってください」というと数秒~数十秒もかかったりします。そういう場合には、アクションを使用することができます。ただ待つのではなく、指示を出したら、「今ここまで来ました」などの途中経過のフィードバックを受けながら、最後に「結果はこうです」というのを待つ、そういう通信方式です。

まとめると次のようになります。

  • サービスのように引数(目標値)と返値(実行結果)があり、返値が返ってくるまでの途中結果(フィードバック)もトピックのように受け取ることができる
  • アクションの実行中に処理を中断させることもできる
  • 非同期/双方向通信
  • 走行体ナビゲーションの経路移動やマニピュレータの軌道再生など、ロボットの動作を伴う時間がかかる処理に用いられる


パラメータ

最後にもう1つ、パラメータという通信方式があります。これは、アプリケーション全体で共有される単純なデータ(JSONやiniファイルで記述される設定ファイルや、環境変数などのイメージ)を、パラメータサーバと呼ばれるキーバリューストアで管理する、というものです。

ROSの通信方式パラメータ

これは、ROSとROS2で違いがあります。

ROS

  • パラメータサーバはマスタ内に1つだけ存在
  • ノード起動時に読み込んで設定する静的な扱いが基本
  • 動的に設定する場合に、変更を検知する仕組みは標準で提供されていない

ROS2

  • 各ノードにパラメータサーバが存在
  • パラメータ設定が行われると、変更を検知しコールバック関数を呼び出す仕組みが標準で提供されている


ライフサイクル(ROS2)

最初の表には含めなかったのですが、ROS2では、標準的なライフサイクルを持つマネージドROSノードが導入されました。これによって、ノード同士の実行開始や接続順序の制御が可能になっています。

ライフサイクル(ROS2)
※引用 Eureka Box(ユーリカボックス)【体験版】ROS =連載第2回
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304

以上で、ROSのプログラミング概念について説明しました。大体このあたりを押さえていただければ、「ROSでプログラムを作るとはノードを書くことであり、ノードとノードはこういう通信の仕方をする」ということが分かってプログラミングができるようになると思います。



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

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

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

エンジニア独学、オンライン学習、ソフトウェア開発独学、エンジニア教材、無料コンテンツ、Eureka Box ユーリカボックス



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

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

デジタル人材が不足している今の時代、特にソフトウェア開発の現場では「上流技術」のスキルを持つ人が必要とされています。

そのスキルが効率よく身につくように設計されたのが「オンライン学習のEureka Box(ユーリカボックス)」

Eureka Boxの運営企業であるエクスモーションは、日本を代表する大手自動車メーカー、医療機器メーカー等、ソフトウェア開発の支援を実際に行っている企業だからこそ、
社会で実践出来るレベルまでサポートされた学習ツールが実現しました。

「Eureka Box(ユーリカボックス)」を是非ご活用ください。

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

執筆者プロフィール

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

玉木 淳治

専門分野:

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



関連コラム

ROSとは?の関連コラム
連載コラム 実践編を読むには
Eureka Box 無料会員登録
  • LINEで送る
  • このエントリーをはてなブックマークに追加

技術別コラム一覧

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

ROS

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

クラウド技術
(AWS Greengrass)

Docker

モデルベース開発(MBD)

派生開発(XDDP)

SPL

用語集