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

投稿

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(