IoT開発をもっと気軽にするIoTソフトウェアプラットフォームROSのご紹介

ROSというIoTソフトウェアプラットフォームについてご紹介いたします。IoT技術に関心がある方は軽く読んでみてください!!
2021.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。ジョン・ヒョンジェです。

今回紹介するROSは初心者でもIoT開発ができるようにするIoTソフトウェアプラットフォームです。では、早速始めます。

以下ではIoTソフトウェアプラットフォームの概要とROSについて話します。

IoTでのソフトウェアプラットフォーム

まず、プラットフォームについて話してみましょう。

ロボットを開発する時、プラットフォームを使わなければこのような問題点があります。

  • ソフトウェアを開発するのにハードウェアについての知識も必要
  • APIごとにインタフェースが違って、各APIについての学習が必要
  • 開発ツールも自ら開発(デバッグツールなど)
  • ソフトウェアがハードウェアに依存する(ハードウェアの部品とかを変更すると、ソフトウェアも修正)
  • OSの変更が難しい

ま、一言で言うとロボットの開発に多くの時間と手数がかかります。

これらの問題を解決するために、プラットフォームを使います。プラットフォームで得られる利点は以下があります。

  • ハードウェアとソフトウェア間の通信を自動に管理してくれる(自分の分野以外は考える必要がない)
  • ソフトウェアの再利用が便利
  • 開発ツール提供
  • 開発において共通のルールがある

プラットフォームを使うことで開発時間を短縮し、質をあげることに集中することができます。

ROS(Robot Operating System)はIoTの開発において一番人気のあるIoTソフトウェアプラットフォームです。

ROSとは

ROS概要

ROSはロボットソフトウェアの共同開発を世界規模で推進することを目指しています。そのため、ROSは無料に使うことができ、オープンソースで開発、公開されています。そして、活発なコミュニティが形成されているので、開発者は問題に出会った時、コミュニティで検索してみるとほとんど解決することができます。

このようなサイトで自分に必要な機能を調べたり、質問したりすることができます。

ROSの特徴

ROSの特徴をいくつか挙げると以下があります。

  • ROSは各種の演算を「ノード」と呼ばれる小さなプログラムに分けて処理
    ノードは実行可能な一つのプログラムであり、ROSにおける処理機能の基本単位です。ノード間通信はメッセージの交換方式で行います。

  • ロボットでよく使われるデータの規格化
    データが規格化されているので、ロボットのある部品を変えてもソフトウェアはそのまま使えます。(例え、GPSセンサーからインプットするデータがGPSの種類に関わらず全部一緒なので、他のモデルに変更してもソフトウェアの修正は不要)

  • 各種の開発ツール提供
    デバッグツール、モニタリングツール、ナビゲーションツールなど、開発者がロボットを開発する時に必要なツールを提供しているので、開発時間を飛躍的に短縮することができます。

  • ROSはメタオペレーティングシステムである
    ROSは一般のOSではなく、既存のOS上で動くミドルウェアやソフトウェアフレームワークの一種です。それで、OSの変更が便利で、OSが違うデバイス間の通信もできます。

ROSの動作

ROSの構造

ROSは基本的にこのような構造で動きます。

  • Node
    • ROSの処理単位
    • 他のNodeとの通信のためにMessageを使う
    • 一つのNodeに一つの機能
  • Message
    • Node間やりとりするデータ
    • Messageのやりとりの方式は大きく3個ある(Topic, Service, Action)
    • TCPROS, UDPROSなどで通信
  • ROS Master
    • ROS内の全てのNode、Messageを管理するネームサーバ
    • 全体のシステムで一つのPCで実行する
    • Nodeは通信登録、情報リクエストなどのためにROS Masterにアクセス

メッセージ交換

ノード間の通信のためにメッセージを交換する方式は大きくTopicServiceActionで3種類があります。この3種類を絵とともに説明をします。

Topic

まず、Topic方式です。Topic方式では「Publisher-Subscriber」関係の通信が行われます。Publisher NodeがTopicを作成して転送すると、Subscriber NodeがそのTopicを受信します。この関係は一方的でSubscriber NodeからはPublisher Nodeにデータを転送することができません。GPSとかのセンサーデータを受信する場合によく使われる方式です。

このようにSubscriber Nodeを多数設定することもできます。

Service

次は、Serivceです。Serviceは「Server-Client」関係の通信で、Client NodeがServer Nodeにリクエストすると、Server Nodeがレスポンスする方式です。

Action

最後にActionです。ActionはServiceと似ている「Server-Client」関係の通信です。Serviceと違う点は、Server NodeがClient Nodeにフィードバックを転送することです。フィードバックとはリクエストに対する処理で発生するイベントで、フィードバックを受信したClient Nodeは処理の進行状況が分かります。

Common_msgs(補足)

補足ですが、ROSではデータタイプを定義しているCommon_msgsというデータコレクションがあります。先ほど、ROSではよく使われるデータを規格化していると話しましたが、それがCommon_msgsです。

以下のリンクでCommon_msgsの種類と使い方を見ることができます。

最後に

私は大学でROSとRaspberry PI4を使って自動運転のRCカーを開発したことがありますが、その時の思い出でざっと整理してみました。

ROSは「ロボットソフトウェアの共同開発を世界規模で推進する」ということを目指していますので、ROSを使いたいと思う人は誰でも使えるように支援しています。ROS公式のチュートリアルサイトで提供しているハンズオンを利用してROSについての知見を高めることもできます。もし、IoTに関心がある方はROSを触ってみると、絶対面白いと思います!

では、以上です。ありがとうございます!