0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pepper SDK入門(32) Frameでメリーさんのように正確な現在地を把握する

Last updated at Posted at 2021-10-07

#はじめに
都市伝説に登場するメリーさんは、自分の現在地を丁寧に電話してきてくれます。Pepperもそのように正しい位置を把握できれば便利ですね!そこで登場するのがFrameです。
Frameは特定の位置を表します🗺それでは早速、順を追ってFrameについての理解を深めていきましょう。

#FreeFrameかAttachedFrameで最先端
Frameの位置は後から更新されます。交信はしません📡🛸
FreeFrameは緯度と経度を表します。例えば本棚の位置にフレームを設定すれば、Pepperはどこに動いても本棚に戻ってきます。
AttachedFrameは対象の物体との相対位置を表します。人も設定することが可能で、その人が動けば一緒についていくピクミン的挙動を示します🌱画像は刷り込まれるひよこです。
niwatori_hiyoko_koushin.png
作成後、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();
2021-09-27 13.31.png

#Human head Frame
人間の位置を表しています。Pepperが認知してくれます👁‍🗨🙌
Humanインスタンスでアクセス可能です。

Human human = ...;
Frame headFrame = human.getHeadFrame();
yumekawa_angel_tenshi.png

#Gaze Frame
Pepperの胴体ではなく頭の位置を起点とするフレームで、Pepperの視線の位置と方向を表しています。ブラックホールのような目に吸収されそうですね🧹🌌ちなみに首はかなり動く部分なので、使いにくいです。
Actuationサービスで取り扱い可能となっています。

Actuation actuation = qiContext.getActuation();
Frame gazeFrame = actuation.gazeFrame();
dasfdfgfnsgf.png #Map Frame Pepperの起点を表しています。ローカライズ(周辺地図の作成)が実行されていない場合は利用できません。Pepperはどこから来てどこへ行くのでしょう🎈🍃 Mappingサービスで取り扱い可能です。
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のお話はありません。それでは〜🍳👐

  1. RobotFrameを起点としてFreeFrameやAttachedFrameを作るため、Pepperの位置が分かるわけではなくPepperを起点の位置として使うフレームが取れるという意味になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?