はじめに
この記事は
ドローンを活用した避難勧告システム
の第三章です.
製作背景などはそれを参照してください.
また,本章の内容は以下の内容が前提なので,まだ読まれていない方はまずそちらをご覧ください.
第一章【AWS・Tello】ドローンをクラウド上で操作するシステムの構築
第二章【AWS・Tello】声でドローンを操作してみたPart1
システム構成図
Lambda
lambdaのコードを書いていきます.
といっても完成形書いたので載せます.Alexa Skills Kit SDK for Python のドキュメントが分かりにくくコード書くのに苦労しました笑
https://github.com/shoda888/alexa2tello/blob/master/lambda_function.py
冗長なコードがあるかもしれないのでその時はPRください!
抜粋して説明
session_attributes:セッション中に保持できる変数群
今回はslot名を保持させています.今回,距離と方向がセットで入力されるべきところをどちらか一つしか言わなかった場合に言わなかった方について再度訊ねるようにしています.その際既に言った項目についてセッション中に短期記憶させる必要があり,session_attributesはそれに用いています.(126~128行目でsession_attributesをリセットさせたかったのですが,リセット方法がわからず,無理やりNoneを代入しています.簡単にリセットできる方法をご存知の方教えて下さい)
session_attr = handler_input.attributes_manager.session_attributes
slots = handler_input.request_envelope.request.intent.slots
resolutions: エンティティ解決(←名前だけじゃピンときませんね)
slot値に対してその同意語を設定している場合,それらを一つのグループIDとして認識させたい時があります.例えば,「うえ」というslot値に対して「上昇」「上方」という同意語を登録した場合,それらをグループIDとして「up」を登録しておけば,「上昇」と言った場合でも「うえ」と言った場合でもID「up」として認識することができます.つまりドローンにコマンドとして送信する時,「上」と言った場合でも「上昇」と言った場合でも「up」を送信できるように組み込めます.
direction = slots["direction"].resolutions.resolutions_per_authority[0].values[0].value.name
IoTCoreとの通信
iot = boto3.client('iot-data')
def publish(msg):
# トピックを指定
topic = 'test/pub'
# メッセージの内容
payload = {
"message": msg
}
try:
# メッセージをPublish
iot.publish(
topic=topic,
qos=0,
payload=json.dumps(payload, ensure_ascii=False)
)
return True
except Exception as e:
print(e)
return False
以上!
ちなみにlambdaに,IoTCoreへのpublishを許可するポリシーをアタッチしたロールを指定するようにしてください.(じゃないと通信できません)
subscriberの方のコードは前章前々章の内容をそのまんま参考にすればドローンと通信できるようになります.
まとめ
次の章では画像から何か判断してドローンにフィードバック制御するようなシステムを構築しましょう.
「画像解析された人の姿勢などの情報から状態を推定し,通知するシステムの構築」