AWS IoT ShadowとROSのDynamic Reconfigureを同期するノードを作った


この記事はROSアドベントカレンダー 14日目の記事です。

こんにちは、WHILLの杉浦です。今年もアドベントカレンダーの時期がやってきましたね。
以前、ROSCon JP 2019で発表させていただいたのですが、AWS IoTのThingShadowとDynamic Reconfigureのパラメータを同期するノードを作りました。もっと早く公開する予定だったのですが、いい機会なのでROSアドベントカレンダーのネタにさせてください。

このノードは、他ノードのDynamic Reconfigureインターフェースにアクセスして、AWSIoT ThingShadowとパラメータを同期してくれるものです。
この仕組みを使うと、既にDynamic Reconfigureインターフェースを実装しているノードをすぐにクラウド対応することができます。今年1月にラスベガスで開催されたCES 2019で発表した仕組みも、この仕組みを使ってクラウドと連携しています。

フル動画はこちら http://www.youtube.com/watch?v=JVf-OTqWyKM

AWS IoT ThingShadowとは?

AWS IoTの機能です。自身でサーバーを用意しなくてもJSON形式でIoT機器のパラメータの保持および状態の管理を行ってくれます。またパラメータの先祖返りを防ぐ機能なども持っています。
AWSの他サービスとの連携が取りやすく、ThingShadowのパラメータによってLambdaを起動したりもできます。

仕組み

(ROSConJPで発表した内容とは微妙に異なります)

今回作ったdyn_reconf_shadowノードは設定ファイルに基づき、他ノードのdynamic reconfigureサーバーの要素をThingShadowと同期してくれます。
設定ファイルはYamlで記述します。設定ファイルではDynamic reconfigureのサーバー名と、どの項目を同期するかを指定できます。

動かしてみる

あらかじめ、AWS IoTでThingを作っておきます。Thing名はspecialdeviceとします。
AWS IoTでポリシーを作成した時に発行される証明書をダウンロードし、次の名前に変更して~/.awsiot以下に配置します。
- 公開鍵: certificate.pem.crt
- 秘密鍵: private.pem.key
- ルート証明書: AmazonRootCA1.pem

また、以下のような設定ファイルを適当な場所に作っておきましょう

config.yaml

dyn_reconfigures:
  /sample_dyn_server/testServer1:
    - int_param
    - str_param
    - double_param
  /sample_dyn_server/testServer2:
    - double_param

テスト用のDynamic reconfigureサーバーを起動します。roscoreは別ウィンドウで立ち上げておいてください。


$ rosrun dyn_reconf_shadow dyn_server_for_test.py

これを立ち上げると、それぞれ int_param,str_param,double_param,bool_param,sizeというパラメータを持ったdynamic reconfigureサーバー/sample_dyn_server/testServer1/sample_dyn_server/testServer2が起動します。

本体を立ち上げます

$ rosrun dyn_reconf_shadow sync.py _host:=<Your AWS IoT Hostname> _thingName:=specialdevice _dyn_reconf_args:=./config.yaml

はAWS IoTのコンソールのモノ、"specialdevice"画面にある"操作"から確認できます。おそらく、XXXXXXXXXX-ats.iot.ap-northeast-1.amazonaws.comのような形式になっているはずです。

rqt_reconfigureでDynamic reconfigureをGUIで見られるようにしましょう。
$ rosrun rqt_reconfigure rqt_reconfigureを開きましょう。

また、ブラウザでAWS IoTコンソールから、specialdeviceのShadowを開きましょう。

パッケージはこちら

GitHubから落としてcatkin_makeしてください。
rosdep installも必要です。
ros_dyn_reconf_shadow
https://github.com/WHILL/ros_dyn_reconf_shadow/

PR

現在WHILLでは 自動運転・障害物回避などの機能をもったパーソナルモビリティを用いたMaaSサービスを開発しています。
現在、MaaSアプリケーションとして空港利用者向けの移動サービスを世界各地の空港で展開する準備をしています。

インターネットが繋がった移動体をクラウドから操作してサービスを提供できる事ってなんだかワクワクしませんか?
このワクワクを一緒に共有できるクラウドエンジニア、アプリエンジニアを大募集中です。ぜひ一緒に働きましょう!お気軽にTwitter:@aquahikaまでリプライしてください。