タグ別アーカイブ: チュートリアル

20150202_camera_tablet

撮影した写真をタブレットに表示する


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は 画像を撮影してタブレットに画像表示 です。

カメラで撮影するのは Take Picture ボックスを使います。
デフォルトでは、撮影した画像ファイルは ホームディレクトリ配下の/recordings/cameras/ ディレクトリに保存されます。
タブレットに画像を表示するのは Show Image ボックスを使います。
画像はアプリケーション配下の html ディレクトリを参照します。

設定
フローダイヤグラムに、Take Picture ボックスと Show Image ボックスを配置します。
20150202_camera_flowdiagram

Take Picture ボックスの保存先を、Show Image ボックスから参照できるように変更します。
Take Picture ボックスのコードを、下記のように変更します。

タブレットを使う で少し触れたように、Show Image ボックスには パスの問題 が存在します。
Show Image ボックスのコードを、下記のように変更します。

Take Picture ボックスと Show Image ボックスの両方に、画像ファイル名を設定します。
このとき、Show Image ボックスのは拡張子あり(例 test.jpg) とし、Take Picture ボックスは拡張子なし(例 test)とします。
20150202_camera_show_image 20150202_camera_take_picture

タブレットを使う と同じように、
画像の保存先となる html ディレクトリを作成します。
html ディレクトリにダミーの画像ファイルを置きます。
20150202_camera_project

動作確認
「再生」ボタンを押すと、Pepper のカメラが撮影した画像がタブレットに表示されます。
20150202_camera_take 20150202_camera_tablet

タブレットのキャッシュの回避
タブレットのWebブラウザは画像をキャッシュします。
そのため、アプリを実行しても、2回目以降は最初の画像を表示します。
キャッシュを回避するには、画像の名称は同じでも、異なる画像のように見せかけます。
よく使われる手法は、画像のパス名に実行したときの時間を付加する方法です。
Show Image ボックスのコードを、下記のように変更します。

20150212_http_pepper

HTTP Get ボックスの作成


20150212_http_pepper

アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は HTTP Get ボックスの作成 です。
HTTP Get ボックスは、入力されたURLからデータを取得し、そこで得られたテキストを出力する Python ボックスです。
20150212_http_box

Python ボックス
Python ボックスを新規作成します。
初期状態では、onStart 入力、onStop 入力、onStopped 出力があります。
20150212_http_create_python_box 20150212_http_edit_box_default

以下のように変更します。
(1) 名前を「HTTP Get」に設定する。
(2) onStart 入力の Type を「”バン”」から「文字列」に変更する。
20150212_http_on_start

(3) onStop 入力を削除する。
20150212_http_on_stop 20150212_http_on_stop_confirm

(4) onStopped 出力の Type を「”バン”」から「文字列」に変更する。
(5) 出力に「onFailed」 を追加して、 Type を「文字列」にする。
20150212_http_on_stoped 20150212_http_on_failed

(6) 変数に「Timeout」を追加して、Typeを「整数」にして、デフォルト値, 最小値, 最大値をそれぞれ「30」「1」「3600」に設定する、
(7) 変数に「Start line」を追加して、Typeを「整数」にして、デフォルト値, 最小値, 最大値をそれぞれ「0」「0」「10000」に設定する。
(8) 変数に「Max lines」を追加して、Typeを「整数」にして、デフォルト値, 最小値, 最大値をそれぞれ「1」「1」「10000」に設定する。
20150212_http_param_timeout 20150212_http_param_start_line 20150212_http_param_max_lines

(9) 「OK」ボタンを押すと、フローダイアグラムに HTTP Getボックス が作成されます。
20150212_http_edit_box_http

Python スクリプト
HTTP Get ボックスをダブルクリックしてスクリプトエディタを開き、下記のスクリプトを記述します。

20150212_http_script

アプリの作成
(1) HTTP Get ボックスのパラメータを以下のように設定する。
Timeout は 30 のまま
Start line は 0 から 2 に変更する
Max lines は 1 から 8 に変更する
20150212_http_box_param

(2) HTTP Get ボックスの前に、Text Edit ボックスを接続して、Pepperチュートリアルの
URL「http://qiita.com/Atelier-Akihabara/items/c5f57358a7b333eef397」 を設定する。
(3) HTTP Get ボックスの後ろに Text Say ボックスを接続する。
20150212_http_app_say

実行すると、
「このチュートリアルでは、以下のような構成で…」と話します。

身振りを追加する
Text Say ボックスの代わりに、Animated Say Text ボックスを使います。
Animated Say Text ボックスは、ボックス・ライブラリにないので、Animated Say ボックスから取り出します。
Animated Say ボックスを開きます。
後段の Animated Say Text ボックスにマウスオーバーして「切り取り」を選択します。
rootのフローダイアグラムに戻り「貼り付け」を選択すると、Animated Say Text ボックスが表れます。
元の Animated Say ボックスを削除します。
20150212_http_say_cut 20150212_http_say_paste

Animated Say Text ボックスを HTTP Get ボックスの後段に接続して、アプリを完成させます。
20150212_http_app_animated

実行すると、
身振りをしながら「このチュートリアルでは、以下のような構成で…」と話します。

20150111_bumper_pepper

バンパーセンサーのイベント検出


20150111_bumper_pepper

アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は バンパーセンサーのイベント検出 です。

バンパーセンサーが接触を検知したら、「いたい」としゃべる サンプルを作ってみます。
まず、フローダイアグラムにメモリイベントを追加します
BackBumperPressed, LeftBumperPressed, RightBumperPressed
20150111_bumper_memory_event 20150111_bumper_document

Say ボックスを接続して、「いたい」を設定します。
おまけで、Log ボックスを接続して、Message prefix に「Bumper Pressed」を設定します。
20150111_bumper_app_1 20150111_bumper_log_box

実機で確認します。
バンパーセンサーに触ると「いたい」としゃべります。
ログビューアに、下記のようなログが表示されます。

このままだと、押されたとき (1.0) と離されたとき (0.0) に反応するので、
押されたときだけ反応するように変更します。
Ifボックスを接続して、「値 > 0」となるように、Condition Operator に「>」を、Value to compare に「0」を設定します。
20150111_bumper_app_2 20150111_bumper_if_box

実機で確認すると、ログビューアに、下記のようなログが表示されます。

Pepper チュートリアル:移動


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は 移動 です。

1. 各種駆動系とセンサー
Pepper は下記の駆動系とセンサーを持っています。
車輪 : WheelFR, WheelFL, WheelB
バンパー : BumperFR, BumperFL, BumperB
ソナー : SonarF, SonarB
レーザーセンサー : 3カ所
レーザーアクチュエータ : Shovel, Vertical right, Vertical left, Front, Left, Right

2. 単純な移動
「まえ」「うしろ」「ひだり」「みぎ」と言うとその方向に移動し、「とけい」「はんとけい」と言うと回転するようにします。
移動には、Move To ボックスを使用します。
音声認識がうまくいかないことがありますが、個々の移動は動作しました。
20141209_tutorial_8_sdK_move_to

3. 任意の軌道による移動
任意の軌道による移動には、Move Along ボックスを使用します。
プロジェクトの内容パネルから、平面動作エディタを開きます。
平面動作エディタにて、円をドラッグすることで、任意の軌道を描くことができます。
前とか横などの単純な移動は、うまくいったのですが。
曲線的に移動するのは、うまくいきませんでした。
20141209_tutorial_8_sdK_move_along 20141209_tutorial_8_sdK_plane

20141208_tutorial_7_pepper_face_tracker

Pepperチュートリアル:画像認識


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は 画像認識 です。

1. カメラの仕様
2Dカメラ (額, 口) 出力1920×1080, 15fps
3Dカメラ (右目:赤外線照射, 左目:赤外線検出) ASUS Xtion 3Dセンサー, 出力320×240, 20fps
20141208_tutorial_7_pepper_camera

2. ビデオモニターパネルによる確認
Pepper の画像にかかわる操作には、ビデオモニターパネルを利用します。
20141208_tutorial_7_sdk_video

3. Monitorによる確認
Monitor アプリケーションを使うこともできます。
3dsensormonitor を使って、3Dカメラの内容を確認できます。
20141208_tutorial_7_monitor_3d

4. 顔認識
Pepper が認識している顔の数をしゃべらせてみます。
顔の検出には、Face Detection ボックスを使います。
検出された顔の数が 1 ならば、「私の前に人が1人います」としゃべせます。
Say Text ボックスの Python スクリプトを変更します。

20141208_tutorial_7_sdk_face_detection_script

5. 顔の追跡
顔のある方向に向かって進むようにします。
顔の追跡は、Face Tracker ボックスを使います。
20141208_tutorial_7_sdk_face_tracker 20141208_tutorial_7_pepper_face_tracker

6. 顔の学習
Pepper が見た顔を「たろう」という名称で記憶させます。
顔の学習には、Learn Face ボックスを使います。
正常に顔が学習できた場合はPepperの目が緑色に、失敗した場合は赤色になります。
20141208_tutorial_7_sdk_learn_face 20141208_tutorial_7_pepper_learn_face

7. 顔の識別
Pepper が認識している顔が誰の顔なのかを判別し、その名前をしゃべらせます。
顔の識別には、Face Reco ボックスを使います。
20141208_tutorial_7_sdk_face_reco

8. 画像の学習
画像の学習には、ビデオモニターを使います。
(1) 画像を写します。
(2) 対象物の輪郭を指定すると、赤くなります。
20141208_tutorial_7_sdk_image_1 20141208_tutorial_7_sdk_image

9. 画像の識別
今見ている画像が何なのかをしゃべらせます。
画像の識別には、視覚認識データベースを照合する Vision Reco を使います。
画像を見ている間、ずっと同じ言葉をしゃべります。
それを抑止するために、Vision Reco ボックスの onPictureLabel 出力と onStop 入力を接続します。
しゃべり終わったあと、Vision Reco ボックスの動作を再開させるために、Say Text ボックスの onStopped 出力 を Vision Reco ボックスの onStart 入力に接続します。
20141208_tutorial_7_sdk_vision_reco

20141206_tutorial_6_pepper_tactile

Pepperチュートリアル:タッチセンサーと人の認識


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は タッチセンサーと人の認識 です。

1. タッチ検出
Pepperは、頭部の前部、中央、後部と、左右の手の甲に、タッチセンサーを持っています。
頭部の前、中央、後部がさわられたら、「あたままえ」「あたまなか」「あたまうしろ」としゃべり、左手の甲がさわられたら「ひだりて」としゃべり、右手の甲がさわられたら「みぎて」としゃべらせてみます。
タッチを検出するには、Tactile Head ボックス、Tactile L.Hand ボックス、Tactile R.Hand ボックスを使用します。
なお、マイロボット画面では動作せず、起動後はOKでした。
20141206_tutorial_6_sdK_tactile 20141206_tutorial_6_pepper_tactile

2. 人の接近
Pepperは、3Dセンサーをはじめさまざまなセンサーを活用して、人の動きを検出することができます。
人が近づいてきたら「やあ」としゃべり、離れていったら「じゃあ また」としゃべらせます。
人が近づいたことと離れてことを検出するために、PersonApproached イベントと、PersonMovedAway イベントを使います。

イベントを追加するのは、フローダイアグラム左端の [+]ボタン をクリックします
メモリイベントの選択ダイアログが開きます。
PersonApproached イベントと、PersonMovedAway イベントを、選択します。
フローダイアグラム左端に、新たな入力があらわれます。
マウスオーバーで、イベントを確認することができます。
なお、マイロボット画面では動作せず、起動後はOKでした。
20141206_tutorial_6_sdK_person 20141206_tutorial_6_sdK_person_event

3. エンゲージメントゾーンへの侵入
Pepperは、3Dセンサーをはじめさまざまなセンサーを活用して、どのあたりに人がいるのかを検出することができます。
距離によって、3つのゾーンに分かれます。
ゾーン1 1.5m 以内
ゾーン2 1.5mから2.5m
ゾーン3 2.5m以上

ゾーン1に人が入ってきたら「ゾーン1」、ゾーン2ならば「ゾーン2」、ゾーン3ならば「ゾーン3」としゃべらせます。
ゾーンを検出するために、PersonEnteredZone1 イベント、PersonEnteredZone2 イベント、PersonEnteredZone3 イベントを使います。
なお、マイロボット画面では動作せず、起動後はOKでした。
20141206_tutorial_6_sdK_zone 20141206_tutorial_6_sdK_zone_event

20141205_tutorial_5_pepper_image

Pepper チュートリアル:タブレットを使う


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は タブレットを使う です。

1. タブレットの仕様
Pepper の胸部にタブレットが付いています。
ディスプレイは 10.1インチで、解像度は 1280 x 800 です。
噂では Android OS らしい。

2. 画像を表示する
画像をタブレットに表示させてみます。
画像を表示するには、Show Image ボックスを使用します。
対応している画像形式は、PNG, JPEG, GIF です。

(1) プロジェクトに、画像を置くディレクトリを作成します。
(2) 画像ファイルをインポートします。
20141205_tutorial_5_sdk_directory 20141205_tutorial_5_sdk_file

(3) Show Image ボックスに、画像ファイルを指定します。
(4) Show Image ボックスには、パスの問題があります。
Show Image ボックスのデフォルトの設定では、プロジェクトファイルの最上位にビヘイビア・ファイルがあることになっています。
そのため、ビヘイビア・ファイル behavior_1/behavior.xar をプロジェクトファイルの最上位に移動します。
その他の方法として、Show Image ボックスの Python コードを変更することで、任意の場所にビヘイビア・ファイルを配置することが出来ます。
20141205_tutorial_5_sdk_image

テストに使用した画像は Pepper Tech Festival 2014 のもの。
20141205_tutorial_5_pepper_image 20140920_pepper_panel

3. 動画を表示する
動画をタブレットに表示させてみます。
動画を表示するには、Play Video ボックスを使用します。
対応している動画形式は、mp4, mov です。

(1) プロジェクトに、動画を置くディレクトリを作成します。
(2) 動画ファイルをインポートします。
(3) Play Video ボックスに、動画ファイルを指定します。
(4) ビヘイビア・ファイル behavior_1/behavior.xar をプロジェクトファイルの最上位に移動します。
20141205_tutorial_5_sdk_video 20141205_tutorial_5_pepper_video

4. タッチイベントを取得する
タブレットがタッチされたら「こんにちは」としゃべらせてみます。
タッチの検出には、 Touch Detection ボックスを使用します。
Touch Detection ボックスのパラメータは、変数Actionを [On touch down] にします。
タブレットがタッチしたときだけでなく、手を離したときも、On touch down と検出されるみたいです。
なお、マイロボット画面で動作せず、起動後はOKです。
20141205_tutorial_5_sdk_touch

tutorial_4_pepper_sound

Pepper チュートリアル : 会話をする 音を鳴らす


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は 会話をする 音を鳴らす です。

1. 音のデバイスとタッチセンサー
下記の場所にスピーカーとマイクがついています。
(1) 頭部の耳の位置に左右のスピーカー
(2) タブレットにステレオスピーカー
(3) 頭頂部に4つのマイク
下記の場所にタッチセンサがついています。
(1) 頭部の前部、中央、後部
(2) 左右の手の甲
tutorial_4_head

2. 音声認識と音声出力
これは ボックスの考え方 の ボックスの制御構造 と同じなので、割愛します。

3. 会話をするChat script
Dialog ボックス にて、QiChat Script という対話言語を記述することで、Pepperとの対話を実現することができます。
下記の対話を作成します。
– ユーザから「こんにちは」と話しかけられたら「やあ」と応答する
– ユーザから「げんき」と問いかけられたら「まあまあかな」と応答する

(1) ダイアログのトピックを作成します。
(2) スクリプトエディタパネルを開いて、下記のスクリプトを記述します。

(3) 作成したダイアログをフローダイアグラムにドラッグ&ドロップします。
tutorial_4_dialog_create tutorial_4_dialog_script

(4) ダイアログ・パネルで会話を確認します
tutorial_4_dialog_result

4. 音を鳴らす
人が頭をさわると「ワン」と犬の鳴き声を再生するようにします。
頭がさわられたことの検出には、Tactile Head ボックスを使用します。
音声ファイルの再生には、 Play Sound ボックスを使用します。
tutorial_4_sound tutorial_4_pepper_sound

犬の鳴き声は、効果音ラボの素材 を利用しました。
なお、起動前の状態では、Tactile Head と Play Sound はともに動作しなかった。

5. 音のした方向の追跡
音のした方向を振り向くような振る舞いを作成してみます
まわりの音に追従するには、Sound Tracker ボックスを使用します。
tutorial_4_tracker

残念ながら、動作しなかった。(^^;

20141202_tutorial_3_pepper_animation

Pepper チュートリアル:ポーズを作る


アトリエ秋葉原から公開されている チュートリアル を試してみます。
今回は ポーズを作る です。

1. モーション・ダイアログボックス でポーズを作る
ロボットビュー上のロボットに対して、変更をおこないたい部位をクリックするとモーション ダイアログが開きます。
モーションダイアログ上のスライダーを移動させることで、関節を回転させることができます。
20141202_tutorial_3_sdK_motion

2. アニメーション・モード でポーズを作る
頭と、左右の手の甲に、タッチセンサーがついています。
目がオレンジ色のときに、頭や手に触ると、目の一部分が緑色になり、関節の固定が解除されます。
手で自由に動かして、ポーズをつけることができます。
20141202_tutorial_3_pepper_animation

3. ポーズの記憶
ポーズライブラリの[ポジションを追加]ボタンから登録できます。
20141202_tutorial_3_sdK_add_pose

4. ポーズの実行
8つのポーズを作ってポーズ・ライブラリに登録します。
20141202_tutorial_3_pepper_pose_a 20141202_tutorial_3_pepper_pose_b 20141202_tutorial_3_pepper_pose_c 20141202_tutorial_3_pepper_pose_d
20141202_tutorial_3_pepper_pose_e 20141202_tutorial_3_pepper_pose_f 20141202_tutorial_3_pepper_pose_g 20141202_tutorial_3_pepper_pose_h

ポーズ・ライブラリからポーズを選択し、フローダイアグラムにドラッグ&ドロップします。
ボックス同士を接続します。
20141202_tutorial_3_sdK_pose_box

5. タイムライン・ボックスの作成
タイムライン・ボックスを新規作成します。
20141202_tutorial_3_sdK_timeline_add 20141202_tutorial_3_sdK_timeline_edit_box

タイムラインにポースを配置します。
タイムラインに終了フレームを設定します。
20141202_tutorial_3_sdK_timeline_pose 20141202_tutorial_3_sdK_timeline_end

Pepper チュートリアル:ボックスの考え方


アルデバラン社から公開されている チュートリアル を試してみます。
今回は ボックスの考え方 です。

1. ボックスの順序実行
前に進ませてから「こんにちは」としゃべらせます。
前に進ませるのは、Move To ボックスを使用します。
残念ながら、Move To ボックスが動きませんでした (^^;
20141201_tutorial_2_sdK_move

2. ボックスの並列実行
汗をぬぐうモーションを再生しつつ、モーション開始後3秒後に「ふう」としゃべらせます。
汗をぬぐうモーションは、Wipe Forehead ボックスを使用します。
タイミングの調整には、Wait ボックスと Wait For Signals ボックスを使用します。
20141201_tutorial_2_sdK_wipe

3. タイムラインボックスのカスタマイズ
上記で使用した Wipe Forehand ボックスをカスタマイズします。
Wipe Forehand ボックスを開いて、タイムラインを変更します。
なお、タイムラインを変更するときは、「停止」状態でないといけないようです。
20141201_tutorial_2_sdK_timeline

4. ボックスの制御構造
言うことを聞き取り、「いちご」ならば「あかい」と言い、「ばなな」ならば「きいろい」と言うようにします。
音声認識には、Speech Reco ボックスを使用します。
認識した言葉に対して異なる出力をするには、Switch Case ボックスを使用します。
Switch Case が赤くなりました。
「ログビューア」を見てみると、SynsaxError になっています。
ダブルクォーテーションが間違っていたみたいです。
20141201_tutorial_2_sdK_speech 20141201_tutorial_2_sdK_speech_error

5. 独自ボックスの作成
(1) 上記で作成した音声認識と応答処理をひとつのボックスにまとめてみます。
(2)「いちご」や「ばなな」に対する応答をカスタマイズできるようにします。
対象となるボックスをマウスドラッグで選択して「ボックスに変換」します。
20141201_tutorial_2_sdK_box_change_to

「ボックスを編集」から変数を追加します。
20141201_tutorial_2_sdK_box_edit_box 20141201_tutorial_2_sdK_box_add_parameter

Get Parameter ボックスを使用して、変数に対するパラメータ値を受け取れるようにします。
パラメータ値を設定します。
20141201_tutorial_2_sdK_box_get_parameter 20141201_tutorial_2_sdK_box_parameter_setting