iOt向きミドルウェア MAGI

MAGIの適用対象となるシステムの標準的アーキテクチャ

MAGIが想定するアーキテクチャについて説明します。システムは、

  • デバイス
  • ネットワークとルータ
  • クラウド

から構成されます。

デバイス

デバイスは、ラジコンで動く玩具を改造したもの、ドローン、あるいは、ロボット等の専用機器の場合と、通常ディスプレイやスマホなのどの汎用端末の場合を想定しています。

専用機器デバイスには、汎用モータやサーボモータなどのアクチュエータと、カメラ等のセンサが内蔵されています。典型的には、Raspberry Piなどの組み込み用CPUボードを用いてこれらを制御します。最小構成では、モータとカメラがあれば行動できるようにすることが目標です。

ネットワークとルータ

デバイスはWi-FiやBluetoothなどの無線通信で、専用のアクセスポイントに接続されます。このアクセスポイントを、エッジルータとよぶことにします。

クラウド

クラウドは、kubernetes等のdockerを単位とするクラスタ管理のためのAPIが用意されていることを想定します。通常のIaaSの場合は、kuberunetsを運用して対応します。GCP(Google Cloud Platform)のようなクラウドであれば、APIレベルで対応しています。また、PCクラスタを構築して自分で運用することも可能です。MAGIは、このようなクラウド上に、利用者個人のサービス環境を構築するためのものです。

MAGIで特に想定しているのは、新たなAIプログラムの開発を容易にすることにより、結果として従来にない高機能を備えたデバイスを安価に実現することです。このため、できるかぎり多くの機能をクラウド側で実装する方針をとり、デバイス側の機構をできるだけ単純、安価にできるように配慮しています。

MAGI

具体的には、MAGIは以下の機能を提供します。

  1. iot resource management kubernetesも、計算機資源を管理していますが、ロボット等のiotシステムでは、管理すべき資源 の対象が広がります。ハードウェア、ソフトウェア、データ等の、iotシステムを運用するために 必要な資源を統一的に管理、容易に実現、実行できるようにします。
  2. system configuration management 資源管理機能の一環として、システム運用に必要な商用クラウドを自動的に登録して、システムを 自動的に構築する機能を提供します。
  3. iot networking support MAGIが構築するシステムは、ロボット等のデバイス、エッジルータ、クラウドの3層から構成 されます。デバイスとクラウドの間の安全で効率的な通信を、エッジルータが実現します。 このため、セキュリティ機能、実時間通信管理等の機能を提供します。また、資源管理機能と連携 して、動的に変更されるノードをシンボリックに参照できる名前管理機能を提供します。

MAGIは、MAGI managerとよばれるサーバを提供します。MAGI managerは、rest apiもしくは GUIによって操作します。

MAGIは、システムの初期状態において、 まず、エッジルータが起動し、全体の構成を管理します。エッジルータにロボットを無線LAN経由 で接続することにより、ロボットがリソースとしてMAGI managerに登録されます。 複数のロボットを登録することが可能です。エッジルータは、さらに、クラウドに接続し、 kubernetesを起動し、管理下におくことにより、自動的にクラウド側の機構を構成します。

MAGIにおける1個のアプリケーションは、runとよばれます。開発者は、runを立ち上げて、 その中で作業を行います。複数のrunを立ち上げて、異なるアプリケーションを同時に開発、 実行することも可能です。Runは、kubernetesのname spaceに相当し、 内部で複数のdockerが動作しています。 runで最初に実行されるプログラムが、所属するrunを実行するために必要なリソースである、 ロボット、ストレージ、docker実行等をMAGI managerに要求することにより、 個々のrunの実行環境が整備されます。したがって、MAGI managerは、個々のrunがどのような リソースを使用しているか把握しています。

開発モードのrunでは、最初に開発環境が起動します。標準では、pythonのnotebookが用いられます。 したがって、開発者はwebブラウザでnotebookを使用することによって開発を進めます。

アプリケーションの開発状況

具体的な実装内容を紹介いたします。最初に開発対象とする標準デバイスとして、GoPiGo3を使用しています。

GoPiGo2にはROSドライバが存在していたのですが、現行のGoPiGo3にはありません。まずこれを開発しました。これによって、ROSが提供する自律移動機構である、navigationシステムに組み込むことが可能になります。距離センサとして、安価なステレオカメラが使用できないか試みています。move_baseを用いたカメラ画像によるnavigation、すなわち、visual navigationに成功したので、近いうちにコードを公開します。

iOtアーキテクチャでは、navigationシステム全体を一つのノードで動かすのではなく、なるべく多くの部分機能をクラウド上で動かすことを試みています。navigationシステムの部分機能をクラウド上で動かすことにより、簡単に運用でき、処理単価も下げられると考えられますが、通信やスケジューリングによる遅延の影響を考慮する必要があります。必要があれば、リアルタイム通信機構の構築も検討する必要があります。また、デバイスとクラウド間の最適な機能分担についても検討します。visual navigationシステム実装の一環として、それらの結果についても公開します。

ROSの主要機能は、MAGIの管理下で動作するdockerの形式で再ビルドします。実行時に必要なroscoreばかりでなく、視覚化モジュールrviz、シミュレータGazebo等もdocker化し、別途PCを用意しなくてもワンコマンドでMAGI上で起動できるようにします。

開発

現状では、実機でテストを行いながらソフトウェアの開発を行っています。年度内には、最初の版の公開にこぎつけたいと考えております。ご支援のほど、よろしくお願い申し上げます。