1. ภาพรวม
ARCore เป็นเฟรมเวิร์กของ Google สำหรับการสร้างประสบการณ์ Augmented Reality บนสมาร์ทโฟน ARCore Geospatial API ใหม่มอบมุมมองใหม่ให้กับ Augmented Reality ซึ่งช่วยให้คุณวางจุดอ้างอิง Augmented Reality ที่เจาะจงตำแหน่งรอบๆ จุดสังเกตในโลกจริงได้
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้เริ่มต้นใช้งาน ARCore Geospatial API คุณจะได้ค้นพบข้อมูลที่ Geospatial API มอบให้สำหรับประสบการณ์ AR โดยรวม และวิธีนำข้อมูลนี้ไปใช้ขับเคลื่อนประสบการณ์การค้นหาเส้นทางด้วย AR แบบง่ายๆ
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าโครงการ ARCore ที่ใช้ Geospatial API
- วิธีขอข้อมูลทางภูมิศาสตร์จาก Geospatial API และแสดงข้อมูลโดยใช้ Google Maps
- วิธีวางจุดยึดที่ติดกับตำแหน่งในโลกจริง
สิ่งที่ต้องมี
- อุปกรณ์ ARCore Android ที่รองรับ เชื่อมต่อโดยใช้สาย USB กับเครื่องพัฒนาซอฟต์แวร์ โดยกำหนดค่าด้วยการแก้ไขข้อบกพร่อง USB
- Android Studio ติดตั้งและกำหนดค่าให้สร้างแอป Android แล้ว
- บริการ Google Play สำหรับ AR 1.31 ขึ้นไปที่ติดตั้งในอุปกรณ์การพัฒนา Android
2. ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์
ตั้งค่า Android Studio
ในการเริ่มต้นใช้งาน Geospatial API เราได้ให้โครงการเริ่มต้นที่มีข้อมูลพื้นฐานเกี่ยวกับโครงการ ARCore ที่ผสานรวมกับ Google Maps SDK วิธีนี้ช่วยให้คุณเริ่มต้นการใช้งาน Geospatial API ได้อย่างรวดเร็ว
- เริ่ม Android Studio และนำเข้าโปรเจ็กต์จาก VCS
- หากเปิดโปรเจ็กต์ไว้อยู่แล้ว ให้ใช้ไฟล์ > ใหม่ > โปรเจ็กต์จากการควบคุมเวอร์ชัน...
- หากเห็นหน้าต่างยินดีต้อนรับสู่ Android Studio ให้ใช้รับจาก VCS
- เลือก Git และใช้ URL
https://github.com/google-ar/codelab-geospatial.git
เพื่อนำเข้าโปรเจ็กต์
ตั้งค่าโปรเจ็กต์ Google Cloud
Geospatial API ใช้ภาพ StreetView รวมกับเครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กและข้อมูลเซ็นเซอร์ของกล้องของอุปกรณ์เพื่อปรับปรุงค่าการวางแนว หากต้องการใช้บริการนี้ คุณต้องตั้งค่าโปรเจ็กต์ Google Cloud
- สร้างโปรเจ็กต์ในคอนโซล Google Cloud ดังนี้
- ไปที่สร้างโปรเจ็กต์ใน Google Cloud Platform
- ป้อนชื่อโปรเจ็กต์ที่เหมาะสม (เช่น "โปรเจ็กต์ ARCore Geospatial API") แล้วเลือกตำแหน่งที่ตั้ง
- คลิกสร้าง
- ไปที่สร้างโปรเจ็กต์ใน Google Cloud Platform
- เปิดใช้ API ที่จำเป็น:
- สร้างข้อมูลเข้าสู่ระบบคีย์ API:
- ในส่วน API และบริการ ให้เลือกข้อมูลเข้าสู่ระบบ
- ในแถบด้านบน ให้คลิกสร้างข้อมูลเข้าสู่ระบบ แล้วเลือกคีย์ API
- จดบันทึกคีย์ที่สร้างขึ้นตามที่คุณต้องการสำหรับขั้นตอนถัดไป กลับไปที่หน้าข้อมูลเข้าสู่ระบบหากต้องการดึงข้อมูล
การทำตามขั้นตอนเหล่านี้ จะเป็นการสร้างโปรเจ็กต์ Google Cloud ที่มีการให้สิทธิ์คีย์ API และพร้อมใช้ Geospatial API แล้ว
ผสานรวมคีย์ API กับโปรเจ็กต์ Android Studio
หากต้องการเชื่อมโยงคีย์ API จาก Google Cloud กับโปรเจ็กต์ของคุณ ให้เปิดโปรเจ็กต์ที่คุณสร้างใน Android Studio แล้วแก้ไขคีย์ API ดังนี้
- เปิดแอป > src > AndroidManifest.xml
- ค้นหารายการ
meta-data
ต่อไปนี้<meta-data android:name="com.google.android.ar.API_KEY" android:value="PLACEHOLDER_API_KEY" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="PLACEHOLDER_API_KEY" />
- แทนที่
PLACEHOLDER_API_KEY
ด้วยคีย์ API ที่คุณสร้างในโปรเจ็กต์ Google Cloud
ค่าที่เก็บไว้ใน com.google.android.ar.API_KEY
ให้สิทธิ์แอปนี้ใช้ Geospatial API และค่าที่เก็บไว้ใน com.google.android.geo.API_KEY
ให้สิทธิ์แอปนี้ใช้ Google Maps SDK
ยืนยันโปรเจ็กต์ของคุณ
ตรวจสอบว่าโปรเจ็กต์ทั้งหมดพร้อมใช้งานแล้ว ใน Android Studio ให้เรียกใช้แอปของคุณ คุณควรจะเห็นมุมมองกล้อง พร้อมกับแผนที่ที่ใช้งานได้ที่ด้านล่างของหน้าจอ
3. กำหนดตำแหน่งของผู้ใช้
ในขั้นตอนนี้ คุณเพิ่มโค้ดไปยังโปรเจ็กต์ตัวอย่างเพื่อเริ่มต้นใช้งาน Geospatial API
กำหนดค่าเซสชัน ARCore เพื่อใช้ Geospatial API
หากต้องการรับข้อมูลภูมิสารสนเทศ คุณต้องเปิดใช้ Geospatial API เปลี่ยน GeospatialMode
ในการกำหนดค่าเซสชันเป็น ENABLED
โดยแก้ไขฟังก์ชัน configureSession
ใน HelloGeoActivity.kt
:
fun configureSession(session: Session) {
session.configure(
session.config.apply {
// Enable Geospatial Mode.
geospatialMode = Config.GeospatialMode.ENABLED
}
)
}
ขณะที่โหมดภูมิสารสนเทศคือ ENABLED
แอปพลิเคชันสามารถรับข้อมูลภูมิสารสนเทศได้
ขอข้อมูลจาก Geospatial API
ใน HelloGeoRenderer.kt
ให้หาบรรทัดต่อไปนี้
// TODO: Obtain Geospatial information and display it on the map.
ที่ด้านล่าง ให้ตรวจสอบว่าวัตถุ Earth พร้อมใช้งาน เมื่อถึงตอนนั้นก็มี trackingState
TrackingState.ENABLED
val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
// TODO: the Earth object may be used here.
}
ใต้ TODO
ให้ขอข้อมูลภูมิสารสนเทศจาก ARCore เพิ่มบรรทัดนี้:
val cameraGeospatialPose = earth.cameraGeospatialPose
ซึ่งคุณจะได้รับ GeospatialPose
ที่มีข้อมูลต่อไปนี้
- สถานที่ตั้ง แสดงเป็นละติจูดและลองจิจูด นอกจากนี้ยังมีค่าประมาณความแม่นยำของตำแหน่งด้วย
- ระดับความสูง และค่าประมาณความแม่นยำของระดับความสูง
- ส่วนหัว การประมาณทิศทางที่อุปกรณ์หันไป และค่าประมาณความแม่นยำของการมุ่งหน้า
แสดงข้อมูลการจัดตำแหน่งบนแผนที่
คุณสามารถใช้ GeospatialPose
ที่เก็บไว้ใน cameraGeospatialPose
เพื่อย้ายเครื่องหมายบนแผนที่เพื่อแสดงว่าผู้ใช้อยู่ที่ไหน ดำเนินการต่อจากจุดที่คุณค้างไว้และเพิ่มสิ่งต่อไปนี้:
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
การดำเนินการนี้จะอัปเดตตำแหน่งของแผนที่อย่างต่อเนื่องโดยใช้ค่าที่ได้จาก Geospatial API
ลองเลย
คลิกเล่นใน Android Studio ยกอุปกรณ์ขึ้นและขยับไปรอบๆ เพื่อช่วยให้ ARCore สร้างการติดตาม หลังจากนั้นสักครู่ คุณจะเห็นเครื่องหมายสีเขียวปรากฏบนแผนที่ เครื่องหมายนี้จะหมุนขณะที่คุณดูสภาพแวดล้อม และควรชี้ไปในทิศทางที่ถูกต้องด้วย เมื่อคุณหันหน้าไปทางทิศเหนือ ลูกศรจะชี้ไปทางทิศเหนือเช่นกัน
4. วางจุดยึดโดยใช้พิกัด Earth
Geospatial API สามารถวาง Anchor ที่คู่พิกัดและการหมุนใดก็ได้ในโลกจริง การทำเช่นนี้ทำให้ผู้ใช้ของคุณเห็นเนื้อหาที่ตรึงไว้เมื่อมีการเยี่ยมชมสถานที่หนึ่งๆ
ในขั้นตอนนี้ คุณจะเพิ่มวิธีการวางแท็ก Anchor โดยการแตะบนแผนที่
ตั้งค่าการทำงานเมื่อแตะแผนที่
โปรเจ็กต์มาพร้อมกับฟังก์ชัน onMapClick
ซึ่งเรียกใช้ด้วยละติจูดและลองจิจูดเมื่อมีการคลิกส่วนย่อยของแผนที่ หาฟังก์ชัน onMapClick
ใน HelloGeoRenderer.kt
ตรวจสอบว่าสามารถใช้วัตถุ Earth ได้
ก่อนสร้างจุดยึดบน Earth ให้ตรวจสอบว่า TrackingState
ของวัตถุ Earth มีค่าเป็น TRACKING
ซึ่งหมายความว่าเราทราบตำแหน่งของโลก และตรวจสอบว่า EarthState
ของอุปกรณ์คือ ENABLED
ซึ่งหมายความว่าไม่มีปัญหาใดๆ กับ Geospatial API เพิ่มบรรทัดเหล่านี้ใน onMapClick
:
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
กำหนดตำแหน่งของจุดยึดใหม่
หลังจากยืนยันว่าวัตถุ Earth กำลังติดตาม ให้ถอด earthAnchor
ก่อนหน้าออก (หากมี) คุณจะแทนที่ earthAnchor
ด้วยแท็ก Anchor ใหม่ในขั้นตอนถัดไป
earthAnchor?.detach()
จากนั้นใช้ cameraGeospatialPose
เพื่อหาระดับความสูงสำหรับจุดยึดใหม่ ใช้คู่พิกัดจากการแตะแผนที่เป็นตำแหน่งของจุดยึด
// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)
createAnchor
สร้าง Anchor
คงที่เป็นพิกัดทางภูมิศาสตร์ด้วยการหมุนที่กำหนด จุดยึดนี้จะพยายามคงตัวและคงที่ตามพิกัดและระดับความสูงที่ระบุ
แสดงเครื่องหมายที่วางบนแผนที่
สุดท้าย ย้ายเครื่องหมายใหม่ที่ระบุตำแหน่งของเครื่องหมาย ดังนี้
activity.view.mapView?.earthMarker?.apply {
position = latLng
isVisible = true
}
ลองเลย
คลิกเล่นใน Android Studio ยกอุปกรณ์ขึ้นและขยับไปรอบๆ เพื่อช่วยให้ ARCore สร้างการติดตาม หลังจากนั้นสักครู่ คุณจะเห็นเครื่องหมายสีเขียวปรากฏในแผนที่ซึ่งแสดงถึงตำแหน่งปัจจุบันของคุณ
การแตะแผนที่จะใช้ Geospatial API เพื่อวางจุดยึดซึ่งยึดกับตำแหน่งในโลกจริง ลองวางจุดยึดใกล้กับตำแหน่งปัจจุบันเพื่อให้คุณดูในมุมมอง AR ได้ จะมีความเสถียรคงที่ขณะที่คุณไปยังส่วนต่างๆ ในสภาพแวดล้อม
5. บทสรุป
ใน Codelab นี้ คุณได้เรียนรู้วิธีใช้ Geospatial API เพื่อสร้างประสบการณ์ AR ที่เรียบง่ายที่ผูกกับโลกจริง
สิ่งที่เราครอบคลุม
- วิธีตั้งค่าโปรเจ็กต์ Google Cloud ที่เปิดใช้ Geospatial API
- วิธีรับข้อมูลภูมิสารสนเทศในโครงการ ARCore และแสดงบนแผนที่
- วิธีการวางจุดยึดที่มีตำแหน่งในโลกจริงโดยใช้การจัดตำแหน่งทางภูมิศาสตร์
แหล่งข้อมูลเพิ่มเติม
ดูรายละเอียดเพิ่มเติมเกี่ยวกับแนวคิดทางภูมิศาสตร์และ SDK ที่ใช้ใน Codelab นี้ได้ในแหล่งข้อมูลเพิ่มเติมต่อไปนี้