iOtミドルウェア

iOtミドルウェアの適用対象となるシステムの標準的アーキテクチャ

iOtミドルウェアが想定するアーキテクチャについて説明します。システムは、

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

から構成されます。

デバイス

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

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

ネットワークとルータ

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

クラウド

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

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

iOtミドルウェア

以上の構成要素を統合的に管理しているのが、iOtミドルウェアです。 iOtミドルウェアは、

  • PythonによるIoT制御プログラムを分散透明な形式で記述できるようにする実行時環境を提供します。これを、iSpaceと名付けます。
  • システムの構成をする多数のCPU上でプログラムを実行するrun manager機構。run managerはプログラムを実行するためのAPIを提供しており、実行するプログラムに適合するCPUを選択して実行します。また、dockerのスケジューリング機構を含みます。
  • デバイスと直接無線通信を行うアクセスポイントの実装を提供します。クラウドと安全に通信を行うこと、デバイスの認証を行うこと、システム全体のインストールを統括することを行う、エッジルータがその中核です。システムは、エッジルータをまずインストールすると、そこから自動的にシステム全体を構成します。
  • デバイスの制御には、ROSを用いることを推奨しています。iOtミドルウェアは、デバイス上のROSとクラウド上のAIプログラムを有機的に連携できるようにするための機構を提供します。
  • クラウド側では、おもに、Python言語を用いたAIプログラムを開発、運用します。これが容易に行えるように、Python言語を対象とした開発環境も同時に提供します。開発環境は、常に実行時環境と接続され、いつでもプログラム開発が行えます。
    標準的なデバイスを使用した場合は、組み込みプログラミング、ネットワーク構築、サーバ構築等の知識をほとんど必要とせず、Python言語に関する通常のプログラミングスキルで開発できるようにすることがiOtミドルウェアの目標です。

iOtミドルウェア利用方法概要

iOtミドルウェアは、Python言語のモジュールとして提供されます。開発中のコードは、複数のgit リポジトリを保持するプロジェクトディレクトリによって構成されます。プロジェクトディレクトリには、iOtのメタデータファイルが存在し、全体の構成情報を保持しています。プロジェクトディレクトリは、構成するすべてのノード間で共有されていることを仮定しています。プロジェクトディレクトリ下で実行されたプログラムは、プロジェクトディレクトリの位置を自動的に検出して同一の条件で動作します。

全てのノードで共有される分散透明なディクショナリ形式で実現された共有名前空間であるiSpaceを利用し、名前を指定してオブジェクトを取得することにより、各サービスを利用します。

import ispace
is = ispace.get_ispace()

とするだけでiSpaceが取得されます。

iSpaceは通常のディクショナリとして動作するので、たとえば"navigation"機能は、

service = is["navigation"]

とすることにより取得されます。このサービスはPythonのオブジェクトによって実装されており、システム中のどのノードで実行されていても 利用することができます。

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

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

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

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

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

開発

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