タグ別アーカイブ: Android

ワークショップ : Android アプリでPepperを喋らせてみる


20151002_pepper_android_opening

2016年5月19日の発表に関連して、この記事を読みに来た人へ。
人型ロボット「Pepper」がAndroid に対応 もどうぞ。

10月2日に アトリエ秋葉原 にて Android アプリでPepperを喋らせてみる を開催し、講師を担当しました。
今回は、日本Androidの会 と アトリエ秋葉原 の合同企画で、Android 端末から Pepper を操作するという内容です。
Android アプリの開発経験者という参加資格だったにも関わらず、20名ほどの方に参加頂きました。

参加者層は、Pepper が初めての人が多いと想定していましたが。
実際には、初めての人は数人で、大多数は Pepper アプリの開発経験がある人でした。
当初の予定では、前半は Choregraphe による Pepper アプリの講習、後半は Android アプリの講習と、思っていましたが。
予定を変更して、Choregraphe の講習と、Android アプリの講習を、平行して行うことにしました。

最終的には、9割がたの人が、Android アプリを作成して、Pepper にしゃべらせることが出来ました。
20150903_pepper_speaker__main 20150914_pepper_move_toward _20151002_pepper_image_remote

ロボットスタートさんが記事にしてくれました。
「日本Androidの会 x アトリエ秋葉原 勉強会」に行ってきました。

ワークショップの資料
Android アプリで Pepper を喋らせてみる

Pepper MoveToward – Android SDK


20150914_pepper_move_toward

機能
Pepper を指定した速度で移動する Android アプリです。

矢印のあるボタンが9個あります。
ボタンにタッチしている間は、Pepper は矢印の方向に移動します。
ボタンから指を離すと、Pepepr は停止します。
[斜め左に前進]、[前進]、[斜め右に前進]
[左横]、[停止]、[右横]
[反時計回り]、[後退]、[時計回り]

パラメータとして、下記のものが指定できます。
移動する速度 (0 – 1.0) : 初期値 0.1

使用上の注意
途中に段差や障害物があっても、Pepper は指定した速度で移動しようとします。
安全センサーで停止することもありますが。
うまく働かずに、Pepper が転倒することがあります。
Wifi 通信のため、電波の状況によっては、停止の指示が伝わらないことがあります。
Pepper をすぐに停止できるように、Pepper の近くに居てください。

API
移動には ALMotion#moveToward を使用しました。

ソースコード
Github で公開しました。

Pepper MoveTo – Android SDK


20150913_pepper_move_to

機能
Pepper を指定した距離だけ移動する Android アプリです。

矢印のあるボタンが9個あります。
ボタンにタッチすると、Pepper は矢印の方向に移動します。
指定した距離だけ移動するか、真ん中の [停止] ボタンにタッチすると、Pepper は停止します。
[斜め左に前進]、[前進]、[斜め右に前進]
[左横]、[停止]、[右横]
[反時計回り]、[後退]、[時計回り]

パラメータとして、下記の3つが指定できます。
前後に移動する距離 (m) : 初期値 0.5m
左右に移動する距離 (m) : 初期値 0.5m
回転する角度 (degree) : 初期値 90度

使用上の注意
途中に段差や障害物があっても、Pepper は指定した距離だけ移動しようとします。
安全センサーで停止することもありますが。
うまく働かずに、Pepper が転倒することがあります。
Wifi 通信のため、電波の状況によっては、停止の指示が伝わらないことがあります。
Pepper をすぐに停止できるように、Pepper の近くに居てください。

API
移動には ALMotion#moveTo を使用しました。

ソースコード
Github で公開しました。

Pepper Joint – Android SDK


20150912_pepper_joint

機能
Pepper の関節を操作する Android アプリです。
Pepper には下記の15つの関節が用意されています。
HeadYaw, HeadPitch,
LShoulderPitch, LShoulderRoll, LElbowYaw, LElbowRoll, LWristYaw,
RShoulderPitch, RShoulderRoll, RElbowYaw, RElbowRoll, RWristYaw,
HipRoll, HipPitch, KneePitch

Choregraphe のモーション画面にあるものと同様な機能です
20150912_choregraphe_motion

注意 : このアプリは開発中です。

API
(1) 関節の名前の取得 ALMotion#getBodyNames
(2) 関節の角度の範囲 ALMotion#getLimits
(3) 関節の角度の現在の値 ALMotion#getAngles
(4) 関節の角度の指定 ALMotion#angleInterpolationWithSpeed

ソースコード
Github で公開しました。

補足
Pepper には、LHand と RHand もあるはずですが。
ALMotion#getBodyNames では、取得できませんでした。

Pepper Posture – Android SDK


20150911_pepper_posture

機能
Pepper にポースをとらせる Android アプリです。
Choregraphe のポーズ・ライブラリにあるものと同様な機能です。
20150911_choregraphe_pose_library

Pepper には4つのポースが用意されています。
Stand、Stand Init、Stand Zero、Crouch。
最初の3つは、Choregraphe と同じです。
Crouch は Choregraphe に入っていませんが、前に屈むポースです。

参考: NAOのポーズ一覧

API
(1) ポーズの一覧の取得 : ALRobotPosture#getPostureList
(2) ポーズの指定 : ALRobotPosture#goToPosture

ソースコード
Github で公開しました。

Pepper Speaker – Android SDK


20150903_pepper_speaker_concept

機能
Pepper を拡声器の代わりにする Android アプリです。
Android 端末に話した言葉が、Pepper から彼の声で発声されます。

仕組み
Android 端末に話した言葉は、クラウドサービスにて、テキストに変換されます。
Pepper には、変換されたテキストを渡して、しゃべります。

API
Seech to Text : 音声からテキストへの変換
Android の 音声認識 API を使用しました。

Text to Seech : テキストから音声への変換
NAOqi API の ALTextToSpeech#say を使用しました。

感想
音声認識には、誤認識も多いですが。
Pepper が話すと、日本語が不慣れな外国人のようで、愛嬌になりますね。

ソースコード
Github で公開しました。

20150903_pepper_speaker__main 20150903_pepper_speaker_mic

Pepper Say List – Android SDK



20150903_pepper_say_list_main

前回に作ったサンプルコード Pepper Say をブラッシュアップしました。

主な機能変更
(1) Android のデータベース機能を使って台詞を登録できるようにした。
台詞の登録の他に、変更や削除も出来ます。
登録の際に、分かりやすいように任意のタイトルを付けることが出来ます。
(2) 登録された台詞の一覧が表示されます。
一覧から台詞を選んで、Pepper に送信して、しゃべらすことが出来ます。
一覧は、登録・変更した時刻や、台詞を選んだ時刻などで、ソートされます。
一番最後に使った台詞が、一覧の一番上になります。
(3) 日本語と英語の切替えができるようにした。

API
使用した NAOqi API は、Pepper Say と同じです。

ソースコード
Github で公開しました。

Pepper Say – Android SDK



20150902_pepper_say

前回に作ったサンプルコード Pepper Say Sample をブラッシュアップしました。

主な機能変更
(1) IPアドレスを記憶するようにした。
(2) ボタンを増やして、台詞を追加しました。
「こんにちは」「さようなら」「ありがとう」
(3) 音量調整を追加しました。
(4) 英語と日本語の言語ファイルを用意しました。
Pepper Say Sample では、ソースコードに直接に日本語を記述していた。

API
音量調整には ALAudioDevice#setOutputVolume を使用した。

ソースコード
Github で公開しました。

Pepper Android SDK


Pepper の開発環境として、Choregraphe の他に、Python や Java も用意されています。
開発環境には、プラットホームの違いにより Windows 版、Mac 版、Linux 版 が用意されています。
以前に、Java SDK の Mac 版での確認 を行っています。
さらに、Java SDK には Android 版も用意されています。
公開前のものを入手したので、試してみました。

アプリの作成
最初のアプリとして、Pepperに「こんにちは」としゃべらせます。
Android Studio を使って Android アプリ を作成します。
Android Studio でビルドして、Android 端末に転送します。
ソースコードは、Github で公開しました。

アプリの実行
下記の画面が表示されます。
IPアドレスを指定して、「Connect」をクリックすると、Pepper に接続されます。
「Say」をクリックすると、Pepper が「こんにちは」としゃべります。
IPアドレスの確認方法は、Pepper に ssh で接続する をご覧ください。
20150901_pepper_say_sample

アプリを作成するときの留意点
(1) ライブラリの保存場所を指定する。
Pepper SDK の Jar ファイルには、ダイナミック・ライブラリが含まれています。

(2) Thread から NAOqi API を実行する
Android では、 UI スレッドから通信スレッド (NAQqi API) は実行できない、という制約があります。

(3) IPアドレスから Session を取得する。

(4) パーミッションを設定する。
NAOqi API は WiFi 通信を行います。
AndroidManifest.xml

補足
(1) Android 開発環境
Android Studio 1.0 以上と Android API 22 以上 を使ってください。
Eclipse 4.2 と Android API 17 の組み合わせでは、下記のエラーが出来ました。

(2) Java SDK との違い
Session を取得する方法が異なります。
Java のときは、Application#session を使用します。

なお、Android にて Application#session を使用すると、下記のエラーで落ちました。

(3) 実行環境
Choregraphe のバーチャルロボットは、同じPC内のIPソケットからは接続できますが、PC外からは接続できません。
Choregraphe や Java は、バーチャルロボット に接続することができます。
Android エミュレータや Android の実機からは、接続できません。