#はじめに
都市伝説に登場するメリーさんは、自分の現在地を丁寧に電話してきてくれます。Pepperもそのように正しい位置を把握できれば便利ですね!そこで登場するのがFrameです。
Frameは特定の位置を表します🗺それでは早速、順を追ってFrameについての理解を深めていきましょう。
#FreeFrameかAttachedFrameで最先端
Frameの位置は後から更新されます。交信はしません📡🛸
FreeFrameは緯度と経度を表します。例えば本棚の位置にフレームを設定すれば、Pepperはどこに動いても本棚に戻ってきます。
AttachedFrameは対象の物体との相対位置を表します。人も設定することが可能で、その人が動けば一緒についていくピクミン的挙動を示します🌱画像は刷り込まれるひよこです。
作成後、AttachedFrameと親フレームの間にある偏りは更新され続けます。
下記のソースコードではAttachedFrameを作成しています↓
Frame baseFrame = ...;
Transform transform1 = TransformBuilder.create().fromXTranslation(1);
AttachedFrame attachedFrame = baseFrame.makeAttachedFrame(transform1);
Transform transform2 = TransformBuilder.create().fromXTranslation(2);
attachedFrame.update(transform2);
既存のFrameのGoToやLookAtアクションのため、ターゲットを特定します👼
#Pepperに見せびらかそう✨
GoToアクションとFrameで特定の場所までおびき寄せる動いてもらうことができます。
Frame targetFrame = ...;
GoTo goTo = GoToBuilder.with(qiContext)
.withFrame(targetFrame)
.build();
goTo.async().run();
LookAtで人の顔を見つめるなどしてもらいましょう🔭🌕
Frame targetFrame = ...;
LookAt lookAt = LookAtBuilder.with(qiContext)
.withFrame(targetFrame)
.build();
Future<Void> lookAtFuture = lookAt.async().run();
#Robot Frame
Pepperの位置を教えてくれます。
Actuationサービスで取り扱い可能です1。
Actuation actuation = qiContext.getActuation();
Frame robotFrame = actuation.robotFrame();
#Human head Frame
人間の位置を表しています。Pepperが認知してくれます👁🗨🙌
Humanインスタンスでアクセス可能です。
Human human = ...;
Frame headFrame = human.getHeadFrame();
#Gaze Frame
Pepperの胴体ではなく頭の位置を起点とするフレームで、Pepperの視線の位置と方向を表しています。ブラックホールのような目に吸収されそうですね🧹🌌ちなみに首はかなり動く部分なので、使いにくいです。
Actuationサービスで取り扱い可能となっています。
Actuation actuation = qiContext.getActuation();
Frame gazeFrame = actuation.gazeFrame();
Mapping mapping = qiContext.getMapping();
Frame mapFrame = mapping.mapFrame();
#Charging Station Frame
Pepperの充電場所の位置と方向を表しています。
Pepperが充電場所を感知していない場合は利用できません。某電気ネズミは充電には利用できませんので注意してください🐭⚡️
Mappingサービスで取り扱い可能です。
Mapping mapping = qiContext.getMapping();
Frame chargingStationFrame = mapping.chargingStationFrame();
#あとがき
今回もPepperSDKforAndroidを参考に書かせていただきました。
さらに詳しい情報はFrameのAPIリファレンスを参照してみてください!
次回はLookAtです、母音は同じですがCOOKPADのお話はありません。それでは〜🍳👐
-
RobotFrameを起点としてFreeFrameやAttachedFrameを作るため、Pepperの位置が分かるわけではなくPepperを起点の位置として使うフレームが取れるという意味になります。 ↩