第2回 ROSとROS2のプログラミング概念
第2回 ROS【Robot Operating System】解説 コラム
このコラムでは数回に分けて、ROS(Robot Operating System)とは?についてご紹介します。連載2回目は「ROS2について」その概要を説明します。
- 第1回 ROSとは?基本的概念とROS2が必要になった背景
- 第2回 ROSとROS2のプログラミング概念
- 第3回 ROSとは?ROSのパッケージ構成を分かりやすく解説
- 第4回 ROSアプリケーション開発のモデルケース
- ROS実践編、自作ロボットでROSを動かした様子とQ&A
※ROS技術が学べるオンライン学習 Eureka Box(ユーリカボックス)で公開中
想定する読者 |
|
想定する読者の 知識レベル |
|
本連載を読んだ後に得られる期待値 |
|
目次
1. ROSのプログラミング概念
ROSの概念
ROSとROS2のプログラミング概念はよく似ているため、両方を併せて説明します。
重要な用語について、表にまとめました。
用語 | 説明 |
ノード(Node) |
|
マスタ(Master) ※ROSのみ |
ノード間を接続し通信を行うためのネームサーバ |
ターゲット(Target) ※ROS2のみ |
|
メッセージ (Message) |
ノード間の通信で交換されるデータ |
トピック(Topic) |
|
サービス(Service) |
|
アクション(Action) ※ROSではライブラリ提供 |
目標値(ゴール)を送信して結果(リザルト)と中間結果(フィードバック)を受け取る双方向非同期メッセージ通信方式 |
パラメータ (Parameter) |
|
このあと、それぞれについて、図を使って説明していきます。
ノード・マスタ(ROS)
まず、ノード・マスタです。これはROS(ROS1)特有の概念です。
ROSのプログラムは「ノード」と呼ぶ機能単位で構成されます。ノードそれぞれが実行単位(プロセス)になり、ノード間でTCP通信によって情報交換することで、1つのシステムが構成されます。ノードはどこのコンピュータに配置されても構わないため、分散コンピューティングが容易に実現できます。
ノード間の接続を確立するときに、マスタ(ネームサービス)が登場します。ノードは、マスタを通じて相手のノードが誰なのかを解決し、接続を確立することになります。ノード間が接続された後は、ノード同士で直接通信を行います。
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304
ノード・ターゲット(ROS2)
これはROS2で変化した部分です。ROS2にはマスタがなく、ROS1のように「ノード=プロセス」ではありません。
「ノード」という機能単位で構成される点はROS1と同じです。ただし、ROS2の場合は、複数のノードを実行器によって1つのプロセスで動かすことができます。この実行単位をターゲットと呼びます。
ノード間はDDSによりUDP通信によって情報交換します。ノードおよびターゲットは、ROS1と同じく、どこのコンピュータに配置されても構いません。ノードはDDS Discovery Protocolによって接続されるため、マスタは存在しません。
ノード間の通信は、同一ターゲット内であれば、共有メモリを使ったデータコピー(スマートポインタを使った場合はゼロコピー)にすることができます。
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304
Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。
メッセージ通信
次に、通信の仕組み(方式)について説明します。いくつかの通信方式が利用可能です。
トピック
最も重要で、かつ、ROSで典型的に使われるのが、このトピックという仕組みを使ったメッセージ通信方式です。
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304
トピック通信は、非同期かつ単方向の通信です。センサー出力など、時々刻々値が変わっていくようなストリーミングデータを送信するために用いられます。この図でいうと「publisher」がデータを送信し、そのデータに興味のある「subscriber」がそれを受信する、という形の「パブリッシャ・サブスクライバ型」(Pub/Sub型)の通信です。これがROSでの基本です。
サーバ・クライアント型の通信とは違って、パブリッシャとサブスクライバはお互いを特定することなく非同期通信します。つまり、パブリッシャは誰が聞いているかわからないけれどトピックを流し、サブスクライバは誰から来たかわからないけれど受信する、という関係です。
サービス
トピックほどには使われてはいないのですが、一般的なRPC(Remote Procedure Call)に相当する通信もできるようになっています。遠隔にあるノードの関数を呼び出す機能を実現する、同期の双方向通信です。
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304
主に、実行中にあまり値が変わらないものに使われます。たとえばロボットの状態確認の場合、状態がそれほど変わらないのにロボットが自分の状態はこうだと常に送信していると、ネットワークの帯域が圧迫されてしまいます。要請に対してすぐに応答ができればよいだけの場合には、サービスの通信を使用すれば非連続なので、ネットワーク負荷を抑えられます。
アクション
また、アクションという通信方式もあります。
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304
ロボットに何かを指示した場合、サービスで通信をしていると、同期通信なので終わるまで待つことになります。しかし、たとえばロボットに「手をここからここまで動かしてください」というと数秒かかったり、「100メートル先に行ってください」というと数秒~数十秒もかかったりします。そういう場合には、アクションを使用することができます。ただ待つのではなく、指示を出したら、「今ここまで来ました」などの途中経過のフィードバックを受けながら、最後に「結果はこうです」というのを待つ、そういう通信方式です。
まとめると次のようになります。
- サービスのように引数(目標値)と返値(実行結果)があり、返値が返ってくるまでの途中結果(フィードバック)もトピックのように受け取ることができる
- アクションの実行中に処理を中断させることもできる
- 非同期/双方向通信
- 走行体ナビゲーションの経路移動やマニピュレータの軌道再生など、ロボットの動作を伴う時間がかかる処理に用いられる
パラメータ
最後にもう1つ、パラメータという通信方式があります。これは、アプリケーション全体で共有される単純なデータ(JSONやiniファイルで記述される設定ファイルや、環境変数などのイメージ)を、パラメータサーバと呼ばれるキーバリューストアで管理する、というものです。
これは、ROSとROS2で違いがあります。
ROS
- パラメータサーバはマスタ内に1つだけ存在
- ノード起動時に読み込んで設定する静的な扱いが基本
- 動的に設定する場合に、変更を検知する仕組みは標準で提供されていない
ROS2
- 各ノードにパラメータサーバが存在
- パラメータ設定が行われると、変更を検知しコールバック関数を呼び出す仕組みが標準で提供されている
ライフサイクル(ROS2)
最初の表には含めなかったのですが、ROS2では、標準的なライフサイクルを持つマネージドROSノードが導入されました。これによって、ノード同士の実行開始や接続順序の制御が可能になっています。
https://member.eureka-box.com/products/4/categories/2148121491/posts/2152934304
以上で、ROSのプログラミング概念について説明しました。大体このあたりを押さえていただければ、「ROSでプログラムを作るとはノードを書くことであり、ノードとノードはこういう通信の仕方をする」ということが分かってプログラミングができるようになると思います。
2.ROS(Robot Operating System)を実際に学んでみる
ROSの技術を実際に学んでみたいという方に、まずは無料でお試しいただけるオンライン学習プラットフォームを準備しています。
業務が多忙なエンジニアでも、スキマ時間で効率的に実践的な学習が出来るEureka Boxは、エンジニアの現場の声から生まれたツールです。
ROS(Robot Operating System)を正しく理解した上で適用し、最大限の効果を得られるようスキルアップしたい方にもEureka Boxでの学習はお勧めで、無料会員登録だけでも以下の特典が受けられます。
- 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
- USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
- ソフトウェア開発に関わる無料お試しコンテンツも充実
デジタル人材が不足している今の時代、特にソフトウェア開発の現場では「上流技術」のスキルを持つ人が必要とされています。
そのスキルが効率よく身につくように設計されたのが「オンライン学習のEureka Box(ユーリカボックス)」
Eureka Boxの運営企業であるエクスモーションは、日本を代表する大手自動車メーカー、医療機器メーカー等、ソフトウェア開発の支援を実際に行っている企業だからこそ、
社会で実践出来るレベルまでサポートされた学習ツールが実現しました。
「Eureka Box(ユーリカボックス)」を是非ご活用ください。
関連コラム
- 第1回 ROSとは?基本的概念とROS2が必要になった背景
- 第2回 ROSとROS2のプログラミング概念
- 第3回 ROSとは?ROSのパッケージ構成を分かりやすく解説
- 第4回 ROSアプリケーション開発のモデルケース
- ROS実践編、自作ロボットでROSを動かした様子とQ&A
※ROS技術が学べるオンライン学習 Eureka Box(ユーリカボックス)で公開中