Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

バンパーセンサーのイベント検出 (Pepper TechFes技術セッション)

More than 5 years have passed since last update.

2014/9/20にベルサール渋谷ガーデンでおこなわれた Pepper Tech Festival 2014 の技術セッションで紹介された作例を紹介します。
なお、 バンパーセンサーのイベント検出についてはバーチャルロボットでは動作確認手段はなく、Pepper実機が必要になります。 アルデバラン・アトリエ秋葉原などでPepper実機を使って実験などおこなってみていただければと思います。 (予約URL:http://pepper.doorkeeper.jp/events)

概要

技術セッションでは、Pepperの持つALMemoryという機能の使用例として、 バンパーセンサーが接触を検知したら、「いたい」としゃべる サンプルを作ってお見せしました。このチュートリアルでは、その内容についてまとめています。

Pepper Tech Festival 2014動画

以下のリンクで、該当箇所から再生できます。

Pepper技術セッション基礎編(日本語音声バージョン)

関連チュートリアル

また、以下のチュートリアルでもメモリイベントの考え方や、メモリウォッチャーの使い方を説明しています。あわせて参照してください。

つくってみる

実際にアプリケーションを作って試してみる動画は http://www.youtube.com/watch?v=SzVZPIFaweE&t=27m5s を参考にしてください。
新規にプロジェクトを開いた状態で、以下のように操作していきます。

  1. まず、メモリイベントを追加します。[+]ボタン をクリックします
    add-event.png

  2. すると、メモリイベントの選択ダイアログが開きます。今回はBumper関係のイベントを選択したいので、フィルターとして Bumper を入力 [A] し、そこであらわれた候補にある BackBumperPressed, LeftBumperPressed, RightBumperPressed をチェック [B] し、OKボタンをクリックします
    select-event.png

    すると、フローダイアグラム左端に、新たな入力があらわれます。
    added-event.png
    これらにマウスオーバーすると、それぞれ LeftBumperPressed, RightBumperPressed, BackBumperPressed に対応していることが確認できます。
    bumper-desc.png

    これらの入力を使うことで、Pepperのバンパー (センサーの位置は Pepperチュートリアル (8):移動#各種駆動系、センサー仕様 を参照) の変化により反応するフローを作ることができます。今回は、バンパーセンサーの接触に反応してPepperをしゃべらせてみます。

  3. しゃべるためのボックスを配置します。 standardボックスライブラリから Audio > Voice > Say ボックスをドラッグ&ドロップ します
    add-say.png

  4. ボックスを以下のようにつなぎます
    connect-say.png

  5. Sayボックスをダブルクリックし、Localized Textボックスの言語を [Japanese] に、内容を いたい! などと変更 します
    change-content.png

これで、Pepperの持つ3つのバンパーのセンサー値の変化にしたがい、Pepperがしゃべるようになります。

確認してみよう

動作確認をおこなうには Pepperチュートリアル (1):SDKインストールとアプリケーションの作成/実行#Pepperでの実行 を参考にPepperに接続し、[ロボットにアップロードして再生]をおこなってみてください。バンパーを押してみるとPepperがしゃべることが確認できると思います。

何度か試していると、バンパーが一回押されると「いたい」「いたい」と2回しゃべることがわかると思います。これはなぜなのでしょうか。確認してみましょう。

改めて3つのBumperPressed入力を確認してみると、入力と接続がグレーで表現されていることがわかります。
connections.png

これは、Pepperチュートリアル (2):ボックスの考え方#色による種類 の通り、Dynamicイベントであることがわかります。つまり、このイベントは何らかの値をともなう可能性がある入力であることを示しています。ここでは具体的にどのような値が渡されるのでしょうか。

ドキュメントの確認

まずはドキュメントから確認してみましょう。

  1. ドキュメントを開くには [ヘルプ]メニューの [参照API] をクリックします
    menu-api.png

  2. ブラウザが開きますので、Quick searchフィールドに今回は LeftBumperPressed と入力します
    search-document.png

    info.png (参考)ドキュメントを参照する際のブラウザについて

    Mac, Windowsともに、Chromeではドキュメントの検索機能が正常にはたらかないという問題があります。
    当面はドキュメント参照時はSafari, Firefoxなどを利用されることをおすすめします。

  3. 検索結果があらわれますので、 [ALTouch API] をクリックします
    search-result-1.png

  4. LeftBumperPressedの説明を探します。ここで、LeftBumperPressedイベントハンドラの呼び出しの際、 引数valとして、float型の値が渡されることがわかります
    search-result-2.png

このようにして、ドキュメントからイベントに渡される値を確認することができます。次に、実機でどのような値が渡されるのか、ログ機能を使って確認してみましょう。

ログを使った動作の確認

先に作ったアプリケーションに対して、Logボックスを加えることで、ログ出力をおこない、実際に渡されている値を確認することができます。

  1. まず、ログ出力のためのボックスを配置します。standardボックスライブラリから System > Log ボックスをドラッグ&ドロップします
    add-log.png

  2. 3つのBumperPressed入力とLogのmessage入力を接続します。これで、各BumperPressedから渡される値がログビューアに出力されるようになります
    connect-log.png

  3. Logボックスのパラメータ設定ダイアログを開き、Message prefix変数に Bumper Pressed を入力し、[OK]ボタンを押します。これで、ログのメッセージには Bumper Pressedというメッセージと、BumperPressedイベントから送られた値が表示されることになります。
    log-parameter.png

これでログ出力の準備は完了です。 Pepperチュートリアル (2):ボックスの考え方#エラーの表示とログビューア を参考にログビューアパネルを表示してから、再生してみてください。

Pepperのバンパーを押すと、以下のようなメッセージが表示されるはずです。

log-viewer.png

[INFO ] behavior.box :onInput_message:27 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11793650488__root__Log_2: Bumper Pressed: 1.0
[INFO ] behavior.box :onInput_message:27 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11793650488__root__Log_2: Bumper Pressed: 0.0

バンパーが押されるたびに、押されたことを示す1.0という値と、離されたことを示す0.0という値が表示されていることがわかります。
このように、BumperPressedイベントは、押されたこと、離されたこと、それぞれに反応するので、先の作例では「いたい!」を2回しゃべったということがわかります。

値に応じた挙動の変化

今回はBumperPressedイベントに対してSayボックスを直接接続したために、値にかかわらず「いたい」としゃべるという挙動になりましたが、Flow Control > Ifボックスを利用することで、 センサーから1.0が入力された時のみSayボックスへと出力するといったことが可能です。
ここでは作成方法までは示しませんが、ぜひ、チャレンジしてみてください。

if-example.png

このようにして、メモリイベントの値の変化と、出力が生じるタイミングを確認しながらフローを構成していく必要があります。

Atelier-Akihabara
ソフトバンクロボティクスで運用している開発者様向け体験スペース「Pepperアトリエ秋葉原 with SoftBank」の公式Qiitaアカウントとなります。 体験いただいているチュートリアルや、よくあるご質問、Tipsなどを展開してまいります。
http://www.softbank.jp/robot/special/tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away