この記事はROSアドベントカレンダー 14日目の記事です。
こんにちは、WHILLの杉浦です。今年もアドベントカレンダーの時期がやってきましたね。
以前、ROSCon JP 2019で発表させていただいたのですが、AWS IoTのThingShadowとDynamic Reconfigureのパラメータを同期するノードを作りました。もっと早く公開する予定だったのですが、いい機会なのでROSアドベントカレンダーのネタにさせてください。
このノードは、他ノードのDynamic Reconfigureインターフェースにアクセスして、AWSIoT ThingShadowとパラメータを同期してくれるものです。
この仕組みを使うと、既にDynamic Reconfigureインターフェースを実装しているノードをすぐにクラウド対応することができます。今年1月にラスベガスで開催されたCES 2019で発表した仕組みも、この仕組みを使ってクラウドと連携しています。
— Hikaru Sugiura (@aquahika) December 14, 2019フル動画はこちら http://www.youtube.com/watch?v=JVf-OTqWyKM
AWS IoT ThingShadowとは?
AWS IoTの機能です。自身でサーバーを用意しなくてもJSON形式でIoT機器のパラメータの保持および状態の管理を行ってくれます。またパラメータの先祖返りを防ぐ機能なども持っています。
AWSの他サービスとの連携が取りやすく、ThingShadowのパラメータによってLambdaを起動したりもできます。
仕組み
今回作った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
また、以下のような設定ファイルを適当な場所に作っておきましょう
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を開きましょう。
AWS IoTとDynamic reconfigureの連携デモ: rqt_reconfigureで値を変更するとThing Shadowにも反映される pic.twitter.com/iYrgLOaBuk
— Hikaru Sugiura (@aquahika) December 14, 2019
AWS IoTとDynamic reconfigureの連携デモ2: ThingShadow上で値を変更するとDynamic Reconfigure上の値が変更される pic.twitter.com/OER24vy0bc
— Hikaru Sugiura (@aquahika) December 14, 2019
パッケージはこちら
GitHubから落としてcatkin_make
してください。
rosdep install
も必要です。
ros_dyn_reconf_shadow
https://github.com/WHILL/ros_dyn_reconf_shadow/
PR
現在WHILLでは 自動運転・障害物回避などの機能をもったパーソナルモビリティを用いたMaaSサービスを開発しています。
現在、MaaSアプリケーションとして空港利用者向けの移動サービスを世界各地の空港で展開する準備をしています。
このような形で羽田空港での自動運転は動いています。ユーザーからのフィードバックがなかなか嬉しい。さらに改善を進めています https://t.co/M42NCyuuAF
— Sugie @ WHILL Inc (@sugix_02) November 19, 2019
インターネットが繋がった移動体をクラウドから操作してサービスを提供できる事ってなんだかワクワクしませんか?
このワクワクを一緒に共有できるクラウドエンジニア、アプリエンジニアを大募集中です。ぜひ一緒に働きましょう!お気軽にTwitter:@aquahikaまでリプライしてください。