Slide 1

Slide 1 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. Bonfire iOS #4 2018೥5݄15೔ Kenta Tokumoto ARKit+CoreLocation

Slide 2

Slide 2 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 2 Outline • ࣗݾ঺հ • ARϞʔυʹ͍ͭͯ • ARKitͷ֓ཁ • ARKit+CoreLocation • ΦϒδΣΫτͷ഑ஔํ๏ʹ͍ͭͯ • ϧʔτϥΠϯ • ؃൘ • ଍੻ • ͚Μ͘͞+ΰʔϧϐϯ • ۭؒิਖ਼ • ARͱ஍ਤͰͷUIͷҧ͍ʹ͍ͭͯ

Slide 3

Slide 3 text

About me ,FOUB5PLVNPUP 5XJUUFSUPUPNP (JUIVCUPUPNP 2JJUBUPUPNP ໊ݹ԰ۈ຿ɺೖࣾ̒೥໨ :BIPP."1ͷJ04 8FC"1*։ൃ୲౰ 3

Slide 4

Slide 4 text

AR mode? 4 • Yahoo! MAPΞϓϦ(iOS)Ͱఏڙ͍ͯ͠ΔARΛ࢖ͬͨ ెาφϏࢧԉػೳ • iOS 11͔Βར༻ՄೳͳARKitΛ࢖༻

Slide 5

Slide 5 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 5 Team Product Manager Designer Engineer

Slide 6

Slide 6 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 6 Schedule 2017೥9݄ʙ 12݄ 1݄ 2݄ 3݄ ϧʔτϥΠϯɺ଍੻ ࣮ݧ ؃൘ɺ͚Μ͘͞ QAɺਃ੥ ۭؒิਖ਼ ϦϦʔε

Slide 7

Slide 7 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 7 ARKit • iOS 11Ҏ߱Ͱ࢖͑ΔARػೳΛ࣮૷͢Δͷʹศ རͳFramework • AR mode͸Position TrackingΛඞཁͱ͢ΔͨΊ A9νοϓ͕౥ࡌ͞Εͨ୺຤ͷΈαϙʔτ • Android → ARCore

Slide 8

Slide 8 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 8 ARKit+CoreLocation • ARConfiguration.worldAlignment.gravit yAndHeadingΛࢦఆ͢Δ • ݪ఺ͷҐஔ৘ใͱARKitʹΑΓߏங͞Ε ͨੈքۭؒͷݪ఺͸૬ޓม׵Մೳ AR ࣮ۭؒ N N (x n , z n ) (lat n , lon n )

Slide 9

Slide 9 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 9 ARKit+CoreLocation (0, 0) d [m] (x 1 , z 1 ) (lat 0 , lon 0 ) d [m] (lat 1 , lon 1 )

Slide 10

Slide 10 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 10 SCNNodeͷ഑ஔ • ϧʔτϥΠϯ (SCNPlane) • ؃൘ (3D) • ͚Μ͘͞+ΰʔϧϐϯ(3D) • ଍੻ (SCNPlane)

Slide 11

Slide 11 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 11 ϧʔτϥΠϯ

Slide 12

Slide 12 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 12 ϧʔτϥΠϯ position eulerAngles.y

Slide 13

Slide 13 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 13 ؃൘

Slide 14

Slide 14 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 14 ؃൘ position

Slide 15

Slide 15 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 15 ؃൘ position

Slide 16

Slide 16 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 16 ؃൘ position • ϚʔδϯΛઃ͚ͯݟ΍͍͢ํ޲ʹճస • ౦੢ͲͪΒʹ഑ஔ͢Δ͔͸ɺਐߦํ޲ ͱ࣍ͷํ޲ͱͷࠩ෼͔Β൑அ͍ͯ͠Δ

Slide 17

Slide 17 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 17 ଍੻

Slide 18

Slide 18 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 18 ଍੻ position

Slide 19

Slide 19 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 19 ଍੻ position • ARSCNView͔ΒऔΕΔ pointOfViewͷpositionΛऔಘ • ݱࡏҐஔͷ࠲ඪΛ΋ͱʹҠಈڑ཭ ͱ֯౓Λܭࢉ • ଍੻͸ϥϯμϜͰग़͢Α͏ʹ materialʹઃఆ͍ͯ͠ΔUIImageΛ ಈతʹઃఆ͍ͯ͠Δ

Slide 20

Slide 20 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 20 ͚Μ͘͞+ΰʔϧϐϯ position SCNBillboardConstrain t

Slide 21

Slide 21 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 21 SCNNodeͷ௥Ճ locationInfoProvider.location { [weak self] location in guard let origin = location else { self?.displayError() return } self?.addObjects(origin: origin) }

Slide 22

Slide 22 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 22 ஞ࣍తͳSCNNodeͷ௥Ճ func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { // 5ͭͣͭ௥Ճ͢Δ } self.navigationView.worldNode.addScheduledNodes(quantity: 5) func addObjects(origin: CLLocation) { self.navigationView.origin = origin let routeLineNodes = routeNodes(withCoordinates: self.coordinates) self.navigationView.scheduleNodes(routeLineNodes, priority: .high) } // ARSCNViewDelegate

Slide 23

Slide 23 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 23 ۭؒิਖ਼ Correctable Space Fixed Space Root Space

Slide 24

Slide 24 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ۭؒิਖ਼ 24 • Fixed Space • ଍੻ • Correctable Space • ϧʔτϥΠϯ • ͚Μ͘͞&ΰʔϧϐϯ • ؃൘

Slide 25

Slide 25 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ۭؒิਖ਼ 25 GPSʹΑΔݱࡏ஍ (CoreLocation) AR্ۭؒͷΧϝϥͷݱࡏ஍ (ARKit) GPSʹΑΔޡࠩͷ൒ܘ

Slide 26

Slide 26 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ۭؒิਖ਼ 26 GPSʹΑΔݱࡏ஍ (CoreLocation) AR্ۭؒͷΧϝϥͷݱࡏ஍ (ARKit) GPSʹΑΔޡࠩͷ൒ܘ ޡࠩͷԁ͔Β͸Έग़ͯ͠ ͍Δ

Slide 27

Slide 27 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 27 LocationInfoProvider public protocol LocationInfoProvidable { func location(completion: @escaping (CLLocation?)->()) func nearbyRoutePoint(from origin: SCNVector3) -> SCNVector3? var delegate: LocationInfoProviderDelegate? { get set }
 } protocol LocationInfoProviderDelegate: class { // ֯౓ิਖ਼ (ిࢠίϯύε·ͨ͸Ґஔ৘ใͷਫ਼౓͕޲্ͨ͠λΠϛϯάͰ௨஌) // ਫ਼౓: heading.headingAccuracy func locationInfoProvider(_ provider: LocationInfoProvidable, requestUpdateHeading heading: CLHeading) // Ґஔิਖ਼ (Ґஔ৘ใͷਫ਼౓͕޲্ͨ͠λΠϛϯάͰ௨஌ // ਫ਼౓: location.horizontalAccuracy func locationInfoProvider(_ provider: LocationInfoProvidable, requestUpdateLocation location: CLLocation, oldLocation: CLLocation?)
 }

Slide 28

Slide 28 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ۭؒิਖ਼ 28 extension ARRouteNavigationViewController: ARLocationInfoProviderDelegate { public func arLocationInfoProvider(_ provider: ARLocationInfoProvidable, requestUpdateLocation location: CLLocation, oldLocation: CLLocation?) { guard let origin = navigationView.origin, let currentPosition = navigationView.pointOfView?.worldPosition else { return } 
 ɹɹɹɹɹ// GPS͔Βܭࢉͨ͠ARۭؒʹ͓͚Δ࠲ඪ ɹɹɹɹɹlet gpsPosition = location.coordinate.relativeVector3(to: origin.coordinate) + ɹɹɹɹɹ navigationView.worldNode.correctableNode.worldPosition ɹɹɹɹɹ// GPSͷޡࠩΛ௒͑ͯͣΕ͍ͯͳ͍৔߹͸Կ΋͠ͳ͍ ɹɹɹɹɹguard idealPosition.length(between: currentPosition) > location.horizontalAccuracy else { ɹɹ return ɹɹɹɹɹ} 
 ɹɹɹɹɹ// ޡࠩΛܭࢉ ɹɹɹɹɹlet positionDifference = gpsPosition – currentPosition 
 ɹɹɹɹɹ// ิਖ਼ ɹɹɹɹɹnavigationView.worldNode.correctableNode.worldPosition -= SCNVector3(positionDifference.x, 0, positionDifference.z) } }

Slide 29

Slide 29 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ARͱ஍ਤͰͷφϏήʔγϣϯͷҧ͍ 29 • ՄࢹྖҬ • ۭؒͱ࣍ݩ

Slide 30

Slide 30 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ՄࢹྖҬͷҧ͍ 30 • ՄࢹྖҬ • ஍ਤɹ →ɹશମΛ၆ᛌͯ͠ݟΕΔ • ARɹ →ɹपลʹϑΥʔΧεͯ͠ݟΔ

Slide 31

Slide 31 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ՄࢹྖҬͷҧ͍΁ͷରࡦ 31 ํ޲ࢦࣔΛࡉ͔͘දࣔ ؃൘Ͱํ޲ͱ࢒Γͷڑ཭Λࡉ͔͘දࣔ

Slide 32

Slide 32 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ۭؒͱ࣍ݩͷҧ͍ 32 • ۭؒͱ࣍ݩ • ஍ਤɹ →ɹ஍ਤʹΑΔ2࣍ݩۭؒ ɹɹɹɹɹ (ݱ࣮Λ2Dʹͯ͠Ճ޻ͨ͠΋ͷ) • ARɹ →ɹݱ࣮ۭؒ (3D)

Slide 33

Slide 33 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ࣍ݩͷҧ͍΁ͷରࡦ 33 • ي੻ɹɹɹ →ɹ଍੻ • ਧ͖ग़͠ɹ →ɹ؃൘ • ΰʔϧϐϯ →ɹ͚Μ͘͞(ͱΰʔϧϐϯ)

Slide 34

Slide 34 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. ஍ਤͱARΛγʔϜϨεʹซ༻͢Δ 34 1λοϓͰ͙͢੾Γସ͑ΒΕΔΑ͏ʹ

Slide 35

Slide 35 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 35 ·ͱΊ • ARKit + CoreLocation Ͱ࣮ࡍͷ෩ܠΛݟͳ͕ΒಓҊ಺͕Ͱ͖Δ • ARKit͕ߏ੒͢Δۭؒ࠲ඪͱ࣮ۭؒͷҢ౓ܦ౓͸૬ޓʹม׵͢Δ͜ ͱ͕Ͱ͖Δ • 3DΦϒδΣΫτͷ഑ஔʹ͸SceneKitͷ஌͕ࣝඞཁ • GPS΍ిࢠίϯύεͷਫ਼౓ΛݟͭͭΧϝϥͷ࠲ඪ͔ΒҐஔ΍ํ޲ Λิਖ਼Մೳ • ARͱ஍ਤͰ͸ಛੑ͕ҧ͏ͨΊUI΋ͦΕͧΕʹ߹ΘͤΔඞཁ͕͋Δ

Slide 36

Slide 36 text

Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. Fin