Worldの他に追加のサンプルロボットが現時点で5個用意されています。Recognitionを試してみました。Recognitionのサンプルロボットは室内に配置されている顔写真をロボットが認識するアプリケーションです。ロボットが室内を移動する中で下図のように顔写真を見つけます。写真を見つけたというログをターミナルツール上で参照することができます。RoboMakerに記載されています。speech.に記載されています。CLIを1回だけ利用しているので実行環境に記述しています。サンプルロボットの起動まずはサンプルロボットを起動します。GitHubのResourcesに記載されている1.〜4.までの手順です。5.のCloudFormationのコンソールにアクセスする以降の手順は今回は利用しません。recognition]を選択します。job]ボタンをクリックします。more]の箇所に公式ドキュメントの該当箇所のリンクとコードリポジトリ(GitHub)のリンクが表示されます。シミュレートされたカメライメージを表示するシュミレーター上のロボットのカメライメージを見てみましょう。公式ドキュメントのシミュレートされたカメライメージを表示するに記載されている手順です。jobs]を選択し、今回起動したジョブのリンクをクリックしてジョブの画面を開いてください。job]ボタンをクリックした場合は自動的に表示されているはずです。次にロボットのカメライメージを表示するためrqtを利用します。rqtの右上のチェックボックにチェックを入れて右側にある[Actions]の中から[Open]をクリックします。するとrqtツールのウィンドウが別ウィンドウで開きます。開かない場合はブラウザのポップアップブロック機能を確認してください。View]をクリックします。Viewプラグインが表示されるので[/camera/rgb/image_raw]を選択してください。するとロボットのカメライメージをrqtツール上で参照することができるようになります。ロボットがシュミレーター上で移動している際のカメライメージであるためロボットの移動に合わせて表示される画像が変わります。イメージが湧きやすいように今回は2枚のスクリーンショットを貼っておきました。1枚目から室内であることが分かるかと思います。左側に顔写真が貼ってあることが分かるかと思います。2枚目からは他にも顔写真が貼ってあることが分かるかと思います。これらの顔写真をロボットが認識します。認識された人物を表示する次にターミナルツール上でロボットが顔写真を認識しているログを確認してみましょう。記載されている手順です。ジョブの画面に戻り、ターミナルの中央部分をクリックします。先程はツールの右上のチェックボックスにチェックを入れて接続していましたが、このようにツール毎にクリックするだけでウィンドウを開くこともできます。ターミナルツールのウィンドウが別ウィンドウで開きます。公式ドキュメントに沿ってまず以下のコマンドを入力します。コンテキストメニューにPasteがあるのでこちらを利用すると便利です。~/workspace/robot-application/bundle/setup.sh次に以下のコマンドを入力します。コンテキストメニューの表示がそのまま残ってしまう不具合があるようですが、動作自体は問題ありません。XXXX"というメッセージが表示されるようになるのが分かるかと思います。以下のようにrqtツールとターミナルツールを並べて表示しているとかなり離れた距離からでも画像認識できていることが分かるかと思います。以上が公式ドキュメントに記載されている手順の紹介でした。Videoに接続して、ストリーミングビデオ内の顔の認識を行います。Streams経由で読み取り、予め登録している顔写真が存在した場合は/rekognized_peopleというROSトピックに検出した画像名を配信します。GitHubにアーキテクチャの図が記載されていて分かりやすいです。図にもあるように顔の認識ができるよう予めRekognitionのIndexFacesオペレーションを実行しておく必要があります。aws-robomaker-sample-application-persondetectionリポジトリ内にIndexFacesに関するソースはなく、事前作業という位置づけのようです。そのため、サンプルロボットにおいても対応するCloudFormationによってIndexFacesを実施するLambda関数が作成されているようでした。実際にCloudFormationスタックが存在する状態で以下のコマンドを実行することでRekognitionのコレクションが作成されていることが確認できました。最後はソースファイルについての解説です。GitHub上には色々とソースファイルがありますが、今回は顔写真の認識に関係しているrobot_ws/src/person_detection_robot/nodes/rekognizeファイルについて解説します。_)mまずRoboMakerのロボットアプリケーションの起動の流れとしてはlaunchファイルが読み込まれて、そのlaunchファイルの中でROSノード(プログラム)を起動するという流れになっているようです。file]としてperson_detection.launchが指定されていることが分かります。この設定に対応するperson_detection.launchの23行目のにおいてrekognizeファイルをROSノードとして起動している記述があります。output="screen"/>では実際にrekognizeファイルの中身を見ていきたいと思います。Streamsのコンシューマーに対応しています。Videoの分析情報のJSONを処理しています。msg["FaceSearchResponse"]:と書かれていることからも分かるかと思います。Videoを利用できるのはkinesisvideo-ros1パッケージを利用しているためです。kinesisvideo-ros1パッケージの詳細については別途紹介できればと考えています。12行目の左辺でself.rekognition_subscriberインスタンス変数に代入しているのはSubscriberのインスタンスをメモリ上に保持することが目的であると予想されます。このように代入しておかないとコンストラクタを抜けたらSubscriberのインスタンスがなくなってしまうので。コンストラクタの呼び出し元であるmainメソッド内では50行目のrospy.spin()でmainメソッドから抜けるのを止めているようです。rospy#spin()はROSノードが終了するまで処理をブロックするメソッドのようです。46行目のrospy.init_nodeで現在実行されているPythonプログラムをROSノードとして登録し、48行目のRekognizerコンストラクタ内でSubscriberとPublisherを必要に応じて登録し、最後に50行目のrospy.spin()でmainから抜けないようにブロックしておくというのがROSノードの基本的なプログラムの作り方のようです。Wikiが参考になるかと思います。String)の箇所ですが、ここでは/rekognized_peopleというROSトピックにメッセージを送信するPublisherを生成しています。XXXX"というメッセージを送信しています。/rekognized_peopleというコマンドで/rekognized_peopleROSトピックのメッセージをechoすることで顔写真の認識結果を参照できるようになっていたわけです。RoboMakerに沿って以下の順に作成したリソースを削除してください。シミュレーションジョブをキャンセルするシミュレーションジョブに対応するCloudFormationのスタックを削除する(必要なら)IAMロールを削除する(必要なら)シミュレーションジョブに対応するS3バケットを削除するS3バケットに関する記載は公式ドキュメントにありませんが、画像認識に利用した顔写真画像やシュミレーションジョブのログが残っています。最後にいかがでしたでしょうか。rekognizeファイルも含めてaws-robomaker-sample-application-persondetectionリポジトリのソースコードはとても少なく、kinesisvideo-ros1などのパッケージを組み合わせるだけで簡単にカメライメージを処理するロボットが作れることが分かるので、GitHubのソースコードは一通り参照することをおすすめします。ちなみに私自身はROSに関する予備知識がなかったので最初は読み解くのにかなり苦労しました。今回のサンプルロボットを通じてROSのパッケージやノード、トピック、launchファイルなどがかなり理解できたので、今後その辺りの解説もできればと考えています。データ処理とか機械学習周りに興味があります。〜ログ収集、監視、分析を触って体感しよう!〜」を開催しますお申し込み受付は終了しました。ありがとうございました。今後セミナーのお知らせを受け取りたい方は、こちらからご登録をお願いします。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。平野重利123Pythonで、標準入力を変換して標準出力に出すCLIプログラムのテンプレートをご紹介します。菊池修治47こんにちは、菊池です。勉強会#1に登壇しました。サーバのみならずネットワーク機器の仮想化も年々進んでいます。スペックに縛られないこととか、展開のしやすさとか初期考慮点が少なくなるのは嬉しいです。武田隆志1098このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe300件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui300インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。悠紀235ShifterはWordPress環境をサーバーレスで立ち上げ、静的なサイトを生成することができるサービスです。FAQサイトをサクッと作ってみました。Takumi227こんにちは。DA事業本部の春田です。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。