package Ġcom . soft bank robot ics . sample app Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . util . Log Ċ import Ġcom . al de bar an . qi . Future Ċ import Ġcom . al de bar an . qi . sdk . Qi Context Ċ import Ġcom . al de bar an . qi . sdk . Qi SDK Ċ import Ġcom . al de bar an . qi . sdk . Robot Lifecycle Callbacks Ċ import Ġcom . al de bar an . qi . sdk .` object `. act uation .* Ċ import Ġcom . al de bar an . qi . sdk .` object `. geometry . Vector 3 Ċ import Ġcom . al de bar an . qi . sdk . builder . Local ize And Map Builder Ċ import Ġcom . al de bar an . qi . sdk . builder . Local ize Builder Ċ import Ġcom . al de bar an . qi . sdk . builder . Transform Builder Ċ import Ġcom . al de bar an . qi . sdk . design . activity . Robot Activity Ċ import Ġcom . al de bar an . qi . sdk . design . activity . conversation status . Speech Bar Display Strategy Ċ import Ġcom . soft bank robot ics . dx . pep per extras . act uation .* Ċ import Ġcom . soft bank robot ics . dx . pep per extras . geometry . IDENTITY _ TRANSFORM Ċ import Ġcom . soft bank robot ics . dx . pep per extras . geometry . inverse Ċ import Ġcom . soft bank robot ics . dx . pep per extras . geometry . times Ċ import Ġcom . soft bank robot ics . dx . pep per extras . util .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . isActive Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . util . concurrent . Cancellation Exception ĊĊ Ċ class ĠMainActivity Ġ: ĠRobot Activity (), ĠRobot Lifecycle Callbacks Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Speech Bar Display Strategy ( Speech Bar Display Strategy . OVER LAY ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ ĠQ i SDK . register ( this , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠQ i SDK . unregister ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Robot Focus G ained ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Robot Ġfocus Ġg ained .") ĊĠĠĠĠĠĠĠ ĠExtra Look At Doc _ Example 1 ( qi Context ) ĊĠĠĠĠĠĠĠ ĠExtra Look At Doc _ Example 2 ( qi Context ) ĊĠĠĠĠĠĠĠ ĠStub born Go To Doc _ Example ( qi Context ) ĊĠĠĠĠĠĠĠ ĠEx ploration MapView Doc _ Example ( qi Context ) ĊĠĠĠĠĠĠĠ ĠGeometry Computation Doc _ Example 1 ( qi Context ) ĊĠĠĠĠĠĠĠ ĠGeometry Computation Doc _ Example 2 ( qi Context ) ĊĠĠĠĠĠĠĠ ĠGeometry Computation Doc _ Example 3 ( qi Context ) ĊĠĠĠĠĠĠĠ ĠNew Coroutine Scope Doc _ Monitor Robot Speed ( qi Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Robot Focus Lost () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Robot Ġfocus Ġlost .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Robot Focus Ref used ( reason : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Robot Ġfocus Ġrefused Ġbecause Ġ$ reason .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠExtra Look At Doc _ Example 1 ( qi Context : ĠQ i Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġa Ġtarget Ġframe Ġto Ġlook Ġat . ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcreate Ġa Ġframe Ġ 5 Ġmeters Ġfront Ġof ĠP ep per , Ġ 2 Ġmeter Ġon Ġits Ġleft ĊĠĠĠĠĠĠĠ Ġval Ġtarget Frame : ĠFrame Ġ= Ġq i Context . mapping . make Free Frame (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( qi Context . act uation . robot Frame (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransform Builder . create (). from 2 D Translation ( 5 . 0 , Ġ 2 . 0 ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ}. frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġthe Ġaction . ĊĠĠĠĠĠĠĠ Ġval Ġextra Look At : ĠExtra Look At Ġ= ĠExtra Look At Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Frame ( target Frame ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Termination Policy ( Extra Look At . Termination Policy . TERMIN ATE _ WHEN _ LOOK ING _ AT _ OR _ NOT _ MOV ING _ ANY MORE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy Ġ= ĠLook At Movement Policy . HEAD _ ONLY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe Ġaction Ġsynchronous ly , Ġit Ġtermin ates Ġonce ĠP ep per Ġis Ġlooking Ġat , Ġor Ġif Ġit Ġcan 't ĊĠĠĠĠĠĠĠ Ġ// Ġlook Ġat Ġand Ġdoes Ġnot Ġmove Ġanymore . ĊĠĠĠĠĠĠĠ Ġextra Look At . run () ĊĊĠĠĠĠĠĠĠ Ġ// Ġextra Look At Ġdoes Ġnot Ġrun Ġanymore . ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf ĠBackground Movement Ġor ĠBasic Aware ness Ġare Ġnot Ġheld , ĠP ep per Ġhead Ġwill Ġcome Ġback Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġneutral Ġposition , Ġor Ġto Ġwhere ĠBasic Aware ness Ġwas Ġlooking Ġat . ĊĠĠĠĠĠĠĠ Ġ// ĠHold ĠBackground Movement Ġand ĠBasic Aware ness Ġif Ġyou Ġwant ĠP ep per Ġhead Ġstays Ġwhere ĊĠĠĠĠĠĠĠ Ġ// Ġextra Look At Ġput Ġit . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠExtra Look At Doc _ Example 2 ( qi Context : ĠQ i Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtransform On The Left Ġ= ĠTransform Builder . create (). from 2 D Translation ( 5 . 0 , Ġ 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtransform On The Right Ġ= ĠTransform Builder . create (). from 2 D Translation ( 5 . 0 , Ġ- 2 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġrobot Frame Ġ= Ġq i Context . act uation . robot Frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠFree Frame ĊĠĠĠĠĠĠĠ Ġval Ġtarget Free Frame : ĠFree Frame Ġ= Ġq i Context . mapping . make Free Frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠPut Ġit Ġ 5 Ġmeters Ġfront Ġof ĠP ep per , Ġ 2 Ġmeter Ġon Ġits Ġleft ĊĠĠĠĠĠĠĠ Ġtarget Free Frame . update ( robot Frame , Ġtransform On The Left , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġthe Ġaction . ĊĠĠĠĠĠĠĠ Ġval Ġextra Look At : ĠExtra Look At Ġ= ĠExtra Look At Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Frame ( target Free Frame . frame ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Termination Policy ( Extra Look At . Termination Policy . RUN _ FORE VER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLook At Movement Policy . HEAD _ AND _ BASE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy Ġ= ĠLook At Movement Policy . HEAD _ ONLY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Status Changed Listener ( object : ĠExtra Look At . On Status Changed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Status Changed ( status : ĠExtra Look At . Look At Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Example Extra Look At ", Ġ" Extra Look At Ġstatus Ġchanges Ġto : Ġ$ status ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe Ġaction Ġasynchronously ĊĠĠĠĠĠĠĠ ĠLog . i (" Example Extra Look At ", Ġ" Starting ") ĊĠĠĠĠĠĠĠ Ġval Ġextra Look At Future : ĠFuture < Void > Ġ= Ġextra Look At . async (). run () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWait Ġ 3 Ġseconds ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 3 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNow Ġput Ġthe Ġtarget Ġframe Ġon Ġthe Ġright Ġof ĠP ep per ĊĠĠĠĠĠĠĠ ĠLog . i (" Example Extra Look At ", Ġ" Changing Ġthe Ġtarget Ġto Ġthe Ġright ") ĊĠĠĠĠĠĠĠ Ġtarget Free Frame . update ( robot Frame , Ġtransform On The Right , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWait Ġ 3 Ġseconds ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 3 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠStop Ġthe ĠExtra Look At ĊĠĠĠĠĠĠĠ Ġextra Look At Future . request Cancellation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠStub born Go To Doc _ Example ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa ĠFrame Ġ 2 Ġmeter Ġin Ġfront Ġof Ġthe Ġrobot ĊĠĠĠĠĠĠĠ Ġval Ġframe 2 Meter In Front Ġ= Ġq i Context . mapping . make Free Frame (). Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( qi Context . act uation . robot Frame (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransform Builder . create (). from X Translation ( 3 . 0 ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ}. frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠStub born Go To Ġaction ĊĠĠĠĠĠĠĠ Ġval Ġgoto Ġ= ĠStub born Go To Builder . with ( qi Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Final Orientation Policy ( Orientation Policy . ALIGN _ X ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Max Retry ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Max Speed ( 0 . 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Max Distance From Target Frame ( 0 . 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Walk ing Animation Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Frame ( frame 2 Meter In Front ). build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnd Ġrun Ġint ĊĠĠĠĠĠĠĠ Ġgoto . run () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEx ploration MapView Doc _ Example ( qi Context : ĠQ i Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 0 ) ĠCreate Ġa Ġminimal Ġmap ĊĠĠĠĠĠĠĠ Ġ// Ġ---------------- ------- ĊĊĠĠĠĠĠĠĠ Ġvar Ġlocal ize And Map Future : ĠFuture < Void >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġlocal ize Ġand Ġmap ĊĠĠĠĠĠĠĠ Ġval Ġlocal ize And Map Ġ= ĠLocal ize And Map Builder . with ( qi Context ). build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠStop Ġit Ġonce Ġthe Ġrobot Ġis Ġlocalized ĊĠĠĠĠĠĠĠ Ġlocal ize And Map . add On Status Changed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠLocalization Status . LOCAL IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map Future ?. request Cancellation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe Ġaction Ġasynchronously Ġto Ġget Ġa Ġfuture ĊĠĠĠĠĠĠĠ Ġlocal ize And Map Future Ġ= Ġlocal ize And Map . async (). run () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWait Ġfor Ġthe Ġfuture Ġto Ġbe Ġcancelled Ġ( it Ġwill Ġbe Ġcancelled Ġin Ġthe Ġlistener Ġonce Ġthe Ġrobot ĊĠĠĠĠĠĠĠ Ġ// Ġis ĠLOCAL IZED ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal ize And Map Future . get () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠC ancellation Exception ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġexploration Map ĊĠĠĠĠĠĠĠ Ġval Ġexploration Map Ġ= Ġlocal ize And Map . dump Map () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 ) ĠDisplay Ġthe Ġmap ĊĠĠĠĠĠĠĠ Ġ// Ġ---------------- -- ĊĊĠĠĠĠĠĠĠ Ġ// ĠPass Ġthe ĠEx ploration Map Ġto Ġthe ĠEx ploration MapView , Ġit Ġwill Ġget Ġdisplayed ĊĠĠĠĠĠĠĠ Ġexploration MapView . set Ex ploration Map ( ex ploration Map . top Graph ical Representation ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 ) ĠOptionally , Ġdisplay Ġthe Ġrobot Ġposition Ġin Ġthe Ġmap ĊĠĠĠĠĠĠĠ Ġ// Ġ------------------------------------------------ ---- ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġlocal ize ĊĠĠĠĠĠĠĠ Ġval Ġlocal ize Ġ= ĠLocal ize Builder . with ( qi Context ). with Map ( ex ploration Map ). build () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġasynchronously ĊĠĠĠĠĠĠĠ Ġlocal ize . async (). run () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġrobot ĠFrame ĊĠĠĠĠĠĠĠ Ġval Ġrobot Frame Ġ= Ġq i Context . act uation . robot Frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthe Ġorigin Ġof Ġthe Ġmap ĠFrame ĊĠĠĠĠĠĠĠ Ġval Ġmap Frame Ġ= Ġq i Context . mapping . map Frame () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe Ġposition Ġof Ġthe Ġrobot Ġrelatively Ġto Ġthe Ġmap ĠFrame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrobot Pos Ġ= Ġrobot Frame . compute Transform ( map Frame ). transform ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġposition Ġin Ġthe ĠEx ploration MapView Ġwidget , Ġit Ġwill Ġbe Ġdisplayed Ġas Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġred Ġcircle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexploration MapView . set Robot Position ( robot Pos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWait Ġa Ġlittle Ġbit Ġbefore Ġupdating Ġagain Ġthe Ġrobot Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠGeometry Computation Doc _ Example 1 ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrobot Frame Ġ= Ġq i Context . act uation . robot Frame () ĊĠĠĠĠĠĠĠ Ġval Ġg aze Frame Ġ= Ġq i Context . act uation . g aze Frame () ĊĊĠĠĠĠĠĠĠ Ġval Ġdistance : ĠDouble Ġ= Ġrobot Frame . distance ( g aze Frame ) ĊĠĠĠĠĠĠĠ Ġval Ġtranslation : ĠVector 3 Ġ= Ġrobot Frame . compute Translation ( g aze Frame ) ĊĠĠĠĠĠĠĠ Ġval Ġdistance Future : ĠFuture < Double > Ġ= Ġrobot Frame . async (). distance ( g aze Frame ) ĊĠĠĠĠĠĠĠ Ġval Ġtranslation Future : ĠFuture < Vector 3 > Ġ= Ġrobot Frame . async (). compute Translation ( g aze Frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠGeometry Computation Doc _ Example 2 ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrobot Frame Ġ= Ġq i Context . act uation . robot Frame () ĊĠĠĠĠĠĠĠ Ġval Ġg aze Frame Ġ= Ġq i Context . act uation . g aze Frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġthe Ġtransform Ġfrom Ġg aze Frame Ġto Ġrobot Frame ĊĠĠĠĠĠĠĠ Ġval Ġg aze To Robot Ġ= Ġrobot Frame . compute Transform ( g aze Frame ). transform ĊĊĠĠĠĠĠĠĠ Ġ// ĠT aking Ġthe Ġinverse Ġof Ġthat Ġtransform , Ġis Ġequivalent Ġto Ġcomputing Ġthe Ġtransform Ġbetween ĊĠĠĠĠĠĠĠ Ġ// Ġrobot Frame Ġto Ġg aze Frame : ĊĠĠĠĠĠĠĠ Ġval Ġrobot To G aze 1 Ġ= Ġg aze To Robot . inverse () ĊĠĠĠĠĠĠĠ Ġval Ġrobot To G aze 2 Ġ= Ġg aze Frame . compute Transform ( robot Frame ). transform ĊĊĠĠĠĠĠĠĠ Ġ// Ġrobot To G aze 1 Ġand Ġrobot To G aze 2 Ġare Ġequivalent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠGeometry Computation Doc _ Example 3 ( qi Context : ĠQ i Context ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrobot Frame Ġ= Ġq i Context . act uation . robot Frame () ĊĠĠĠĠĠĠĠ Ġval Ġg aze Frame Ġ= Ġq i Context . act uation . g aze Frame () ĊĊĠĠĠĠĠĠĠ Ġ// ĠMultiply ing Ġtransform Ġis Ġuseful Ġto Ġchange Ġfrom Ġcoordinate Ġsystem ĊĠĠĠĠĠĠĠ Ġ// ĠIm ag ine Ġthere Ġis Ġthe Ġtransform Ġof Ġan Ġobject Ġexpressed Ġin Ġg aze Frame Ġcoordinates , ĊĠĠĠĠĠĠĠ Ġ// Ġwith Ġcoordinate Ġ( 1 , Ġ 3 ) Ġin Ġg aze Frame ĊĠĠĠĠĠĠĠ Ġval Ġg aze ToObject Ġ= ĠTransform Builder . create (). from 2 D Translation ( 1 . 0 , Ġ 3 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCan Ġwe Ġcompute Ġthe Ġcoordinate Ġof Ġthat Ġobject Ġin Ġrobot Frame Ġ? ĊĠĠĠĠĠĠĠ Ġ// ĠIts Ġeasy , Ġget Ġthe Ġg aze To Robot Ġtransform ĊĠĠĠĠĠĠĠ Ġval Ġg aze To Robot Ġ= Ġrobot Frame . compute Transform ( g aze Frame ). transform ĊĠĠĠĠĠĠĠ Ġval Ġrobot ToObject Ġ= Ġg aze To Robot . inverse () Ġ* Ġg aze ToObject ĊĊĠĠĠĠĠĠĠ ĠLog . i (" Geometry ", Ġrobot ToObject . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠNew Coroutine Scope Doc _ Monitor Robot Speed ( qi Context : ĠQ i Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp scope Ġ= ĠSingle Thread . new Coroutine Scope () ĊĠĠĠĠĠĠĠ Ġval Ġfuture : ĠFuture < Unit > Ġ= Ġapp scope . async Future Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrobot Frame Ġ= Ġq i Context . act uation . async (). robot Frame (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrobot Frame Snapshot Ġ= Ġq i Context . mapping . async (). make Free Frame (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrobot Frame In Past Ġ= Ġrobot Frame Snapshot . async (). frame (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperiod Ġ= Ġ 2 0 0 L Ġ// ms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot Frame Snapshot . async (). update ( robot Frame , ĠIDENTITY _ TRANSFORM , Ġ 0 ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( period ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġrobot Frame . async (). distance ( robot Frame In Past ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspeed km h Ġ= Ġdistance Ġ* Ġ 3 6 0 0 . 0 Ġ/ Ġperiod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Robot Ġis Ġgoing Ġat Ġ$ speed km h Ġkm / h ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 6 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . request Cancellation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . await OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊĊ