スキップしてメイン コンテンツに移動

投稿

2019の投稿を表示しています

Pepper SDK入門(11) Robot ViewerとRobot Browser

Robot emulatorについては「 Pepper SDK入門(3) はじめてのロボアプリ開発② 」でも触れましたが、もう少し詳しく見ていきたいと思います。 Robot emulatorは、下記のモジュールから構成されています。 モジュール名 概要 NAOqi Robot emulatorエンジン。実機での操作をエミュレートする。 Robot Viewer Pepperの挙動のシミュレーションを表示する。 AVD Android仮想デバイス。Pepperのタブレットと同じ形状をしており、アプリはここで実行される。 以上の3つは同じライフサイクルを持っているため同時に起動し、一つでも停止すればすべてが停止します。 1.Robot Viewer Robot viewerにはpluginが接続しているPepperをモニタリングするツールがまとまっており、以下のような機能が利用できます。 Robot viewによる、Pepperの3Dモデル表示 Motion Viewによる、Pepperの関節の角度設定 Dialog viewによる、音声認識の結果や発話内容の表示 Log viewによる、Pepper本体側のログの表示 pluginがPepperに接続するタイミングで、Robot Viewerは自動で起動します。 <手順> Android StudioのToolsメニューのPepper SDKからEmulatorを選択するか、ツールバーのエミュレータボタン をクリックしてください。robotsdk.xmlに設定されているAPIレベルに応じたエミュレータが起動します。 1-1.Robot view Robot viewは接続しているPepperの状態を表示します。 エミュレータに接続している場合、Pepperは青い背景で表示されます。 実機に接続している場合、Pepperは緑の背景で表示されます。 Robot viewのツールバーで、表示内容を設定できます

Pepper SDK入門(10) Animation Browser

これまでは実装方法の話題を続けてきましたが、Pepper SDK PluginにはPepperのアニメーションを作成できるツールやサンプルアニメーションも充実しています。今回からは、そうしたPepper SDK Pluginの使い方を勉強していきたいと思います。 1.Animation Browserの起動 Animation Browserを利用して、サンプルアニメーションを自分のプロジェクトにインポートする方法を見ていきます。 FileメニューのNewから、Import animation…を選択してください。 すると、Animation Browserが起動します。 2.アニメーションのプレビュー アニメーションファイルを選択すると、Animation Browserの右側にアニメーションのプレビューが表示されます。 3.プロジェクトへアニメーションファイルをインポートする Animation Browserから選択したアニメーションファイルは、プロジェクトにインポートすることが可能です。アニメーションファイルを選択してSelectボタンを押下、もしくはダブルクリックすることで、プロジェクトのrawディレクトリの下にインポートされるのが確認できます。インポートされたファイルの拡張子は、.qianimです。 4.プロジェクト内アニメーションファイルのプレビュー Androidプロジェクト内のアニメーションファイルは単独でプレビューが可能です。アニメーションファイルを右クリックし、Previewをクリックしてください。 するとAnimation viewerが起動し、選択したアニメーションのプレビューが表示されます。 以上で、Animation Browserの使い方が確認できました。

Pepper SDK入門(9) オートノマスライフ

オートノマスライフについて、簡単な概要を説明します。 自律モードの管理 Pepperはオートノマスライフというモードを持っており、人間の検知や追跡、音への反応や立ち位置の調整といった振る舞いを、自律して自然に行い、Pepperをより生き物らしく見せています。 1.Autonomous abilities Autonomous abilitiesとは、Pepperに備わる複数の自律行動の機能のことです。自律行動はPepperへ生命らしさを与えるため、移動・アニメーション・顔追跡によって構成されています。 2.Autonomous abilitiesの管理 写真撮影など、Pepperのアニメーションの動きを完全に停止させたい場合には、Autonomous abilitiesを止める機能を使用してください。ここでは概要のみの記述ですが、詳細はまた改めて解説します。 いつもよりも短いですが、今回はここで終了です。次回はアニメーションブラウザについて見ていきます。

Pepper SDK入門(8) アクションの連結

同期と非同期について、今回は様々なクラスやメソッドと共に解説を行っていきます。 1.同期と非同期 アクションを順番に実行したい場合、同期で実行するようにコードを書く必要があります。 //animateアクションのビルド Animate animate = ...; //animateアクションを同期で実行 animate.run(); //listenアクションのビルド Listen listen = ...; //listenアクションを同期で実行 listen.run(); ここでは Animate と Listen を同期で順番に実行していますが、これらのアクションは非同期で実行することも可能です。 //animateアクションを非同期で実行 animate.async().run(); //listenアクションを非同期で実行 listen.async().run(); 単純にこれらのアクションを非同期で実行してしまうと、アクションが連結していないため双方のアクションが同時に開始されます。一つ目のアクションが終了してから二つ目のアクション(ここではAnimateが終わった後のListen)を開始するよう非同期で実行したい場合には、複数のアクションを連結させる必要があります。 2.Futures Futureクラスについて説明します。 Futureとは Futureクラスは非同期の操作をラップするオブジェクトであり、主として次のような非同期の処理を行うために使用されます。 アクションやリソースといったオブジェクトの作成 アクション実行の取り扱い(結果の取得やアクションのキャンセル) 複数のアクション実行やリソース作成の連結 Futureの状態 Futureの状態には成功、アクションのキャンセルもしくはエラーの3つがあり、成功した場合には値を返却することがあります。 Future<T>は戻り値の型にTを対応付けるジェネリッククラスであり、例えばFuture<String>インスタンスであればStringが返却されます。値を返却しないような場合にはFuture<Void>を使用します。 また、getメソッドを使用することで同期的な値の取得が可能です。 Fu

Pepper SDK入門(7) UIスレッドとワーカースレッド

前回、アクションについて解説するなかで同期と非同期の区別が登場しました。今回はその同期と非同期について、UIスレッドとワーカースレッドの二つを主軸に見ていきます。 同期と非同期 Pepperではタブレットと本体でそれぞれ異なるプロセスが動いており、二つのCPU間にはUSBを経由したTCP/IPによる通信があります。 同期と非同期のどちらでアクションを実行するかは、実際に動かしてみた上での選択をお勧めします。 1.UIスレッド  Androidシステムからのコールバック(onCreateやOnClickListenerなど)はUIスレッド上で動作します。 @Override protected void onCreate(Bundle savedInstanceState) { } @Override protected void onResume() { } タブレットからPepperに指示を出した場合、Pepperとタブレット間での通信が発生します。しかしUIスレッド上でのネットワーク通信は出来ないため、NetworkOnMainThreadExceptionがスローされてしまいます。そのため、UIスレッドからPepperに指示を出す際は非同期を使用するようにしてください。 実践:同期と非同期 同期:UIスレッドで呼ぶことができない // UIスレッド Say say = SayBuilder.with(qiContext) .withText("こんにちは") .build(); // NetworkOnMainThreadExceptionがスローされる // UIスレッド goTo.run(); // NetworkOnMainThreadExceptionがスローされる 非同期:UIスレッドで呼ぶことができる // UIスレッド Future<say> sayBuilding = SayBuilder.with(qiContext) .withText("こんにちは") .buildAsync(); // UIスレッド goTo.async().run(); 2.ワーカースレッド 続いて、ワーカースレッド

Pepper SDK入門(6) アクション

ロボットフォーカスとロボットライフサイクルに関しては、前回学習しました。今回はPepperのアクションについて掘り下げます。 Pepperでのアクション実行 Pepperは、話す・聞く・動く・アニメーションを再生する・人間を見つめる・チャットを行う・視線を動かす・特定の地点に留まる・写真を撮るといった動作が可能です。アプリを開発する際、これらのアクションがメインの構成要素になります。 前提条件 このページで説明しているアクションの利用方法を理解するためには、Javaの非同期やスレッドに関する知識が必要です。 1.アクションの作成 ビルダーを用いて、アクションを同期もしくは非同期で作成します。以下が各アクションをビルドする手順です。 アクションのビルダーにQiContextを渡す ビルダーへアクションのパラメータを渡す buildメソッドかbuildAsyncメソッドを呼び、アクションを作成する 同期 アクションを同期で作成するため、ビルダーのbuildメソッドを呼びます。 Say say = SayBuilder.with(qiContext) .withText("こんにちは") .build(); 警告 アクションを同期で作成した際はPepperとタブレットが通信するため、UI上で実行するとNetworkOnMainThreadExceptionがスローされる可能性があります。 非同期 アクションを非同期で作成するため、ビルダーのbuildAsyncメソッドを呼びます。 Future<say>sayActionFuture = SayBuilder.with(qiContext) .withText("Hello!") .buildAsync(); アクションを非同期で作成すると、非同期処理と連携するためのFutureインスタンスが取得できます。 2.アクションの実行 1で作成したアクションを実行してみまし

Pepper SDK入門(5) Robot focus と Robot lifecycle

Pepper SDK Plugin導入から始まり、簡単なロボアプリの開発を行ってきました。今回は、QiSDKの基本となるRobot focus と Robot lifecycleについて説明します。 1.フォーカスを理解する まずはロボットフォーカスについての簡単な説明です。 Activityがロボットのアクションを実行するためには、ロボットフォーカスが必要です。ロボットフォーカスはフォアグラウンドのActivityだけが保持することができ、ロボットフォーカスオーナーと呼ばれます。ロボットフォーカスはQiSDKに管理されており、Activityはいつでもロボットフォーカスを獲得したり喪失したりする可能性があります。  2.ロボットライフサイクル Pepper SDK入門(2) はじめてのロボアプリ開発①で登場したロボットライフサイクルについてです。 QiSDKがそれぞれのActivity用のロボットフォーカスを渡すために、RobotLifecycleCallbacksインタフェースを実装したオブジェクトが必要になります。以下はActivityにRobotLifecycleCallbacksインタフェースを実装した例です。 public class MyActivity extends RobotActivity implements RobotLifecycleCallbacks また、RobotLifecycleCallbacksオブジェクトにコールバックさせるにはonCreateメソッドでActivityとRobotLifecycleCallbacksオブジェクトをQiSDKに登録する必要があります。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); QiSDK.register(this, this); } その上で、onDestroyメソッドでの登録解除も必要です。  @Override protected void onDestroy() { QiSDK.unregister(this, this); super.onDestroy(

Pepper SDK入門(4) はじめてのロボアプリ開発③

アプリの実行についてまとめた前回の学習を踏まえ、このチュートリアルでPepperに"Hello human!"と発話させる簡単なアプリを開発していきます。 前提条件 Android Studio、Pepper SDK plugin、Robot SDKとその関連ツールがインストールされていること。 1.新規プロジェクトの開始 HelloPepperの名称で、新しいプロジェクトを開始してください。 Fileメニュー >New > Robot ApplicationからQiSDKの初期設定が完了していることと、ActivityにonCreateメソッドとonDestroyメソッド、及びRobotLifecycleCallbacksインターフェースが実装されていることを確かめてください。 2.発話の実行 Pepperを発話させるために、 Say クラスを使用します。これはPepperのアクションを作成できるクラスの一つです。 Say クラスの使い方は以下の通りです。 <手順> onRobotFocusGainedの中で、 SayBuilder クラスを使ってSayオブジェクトをビルドします。 Say say = SayBuilder.with(qiContext) .withText("Hello human!") .build(); 発話を実行するために、作成した Say オブジェクトのrunメソッドを呼びます。 say.run(); 完成したコードは下記のようになります。 @Override public void onRobotFocusGained(QiContext qiContext) { Say say = SayBuilder.with(qiContext) .withText("Hello human!").build(); say.run(); } 以上でPepperが発話出来るようになります。 3.チュートリアル GitHub に、上記と同様の発話を実行できる

Pepper SDK入門(3) はじめてのロボアプリ開発②

Androidプロジェクトの作成及びロボアプリの初期設定を行った前回に引き続き、Pepperのエミュレータと実機でアプリを実行するために必要な手順を確認していきます。 1.Pepperのエミュレータ  まずは、Pepperのエミュレータで動作確認するための方法についてです。 <手順> エミュレータボタン をクリックしてください。すると、ロボットエミュレータが表示されます。 プロジェクトにおける実行の構成でappが選択されているか を確認し、 選択されていない場合はそれを選択してください。 実行ボタン をクリックしてください。すると、Select Deployment Targetダイアログが表示されます。 ダイアログからPepperのエミュレータを選択してください。アプリがエミュレータにインストールされ、Robot Viewer上のバーチャルロボットで動作確認することが出来ます。 2.Pepperの実機  次に、Pepperの実機で動作確認するための方法を見ていきます。 <手順> Pepperのタブレットの設定を確認します。タブレットのホームにある設定アイコンをタップし、以下の設定を確認してください。 開発者モードが有効になっていること 開発者向けオプション、デバッグ、ADBも有効になっていること Android studioで、接続ボタン をクリックし、Robots Browserを表示してください。 Use fix portとUse fixed IP/hostnameにチェックを入れ、接続先のPepperのIPアドレスを入力してください。PepperのIPアドレスはタブレットの通知バーか、胸部ボタンを一回押すことで確認できます。 Selectボタンをクリックしてください。すると、セキュリティの警告が表示されます。 Pepperのパスワードを入力してください。初期パスワードはnaoです。変更している場合は管理者に確認して下さい。パスワード入力後にOKボタンをクリックすると、Robot Viewerが表示されます。 Pepperの実機に接続すると、同時にタブレットにもADB経由で接続されます。 プロジェクトにおける実行の構成でappが選択されてい

Pepper SDK入門(2) はじめてのロボアプリ開発①

発話を行うロボアプリの開発をしながら、開発手順について説明していきたいと思います。Androidプロジェクトを作成し、ロボアプリの初期設定を行い、ActivityがPepperを操作するために必要な実装について見ていきます。 1.プロジェクト作成 ロボアプリ開発にあたって、まず初めに標準的なAndroidプロジェクトを作成し、それにロボアプリの設定を追加します。Android StudioのFileメニューのNewからNew Projectを選択し、Androidプロジェクトを作成してください。プロジェクト作成時のTarget Android DeviceではPhone and TabletのAndroid 6.0 (Marshmallow)が選択してください。 2.ロボアプリの初期設定 作成したAndroidプロジェクトにロボアプリの初期設定を行います。 <手順> FileメニューのNewからRobot Applicationを選択します。 サポートするRobot SDKのバージョンと追加するモジュールを選び、OKをクリックしてください。 Sync Project with Gradle Fileボタン(下図の参照)をクリックし、プロジェクトとGradleファイルを同期させます。 結果 これでロボアプリの初期設定が完了しました。以下のファイルが更新されていることが確認できます。 assetsにrobotディレクトリとrobotsdk.xmlファイルが追加されます。robotsdk.xmlファイルには、選択したRobot SDKのバージョンが含まれています。 appのbuild.gradle fileのdependenciesにQiSKDのモジュールが追加されます。これにより、アプリからQiSDKが利用できるようになります。 AndroidManifest.xmlにuses-featureタグが追加されます。追加されたuses-featureタグはアプリがPepperを使用することを示しています。 3.QiSDK実装とロボットのライフサイクル Activityから