Navigation App
1. Giới thiệu
1.1 Ứng dụng Navigation
- Ứng dụng giúp bạn dễ dàng tìm những địa điểm xung quanh vị trí của bạn bằng cách sử dụng GPS. Đặc biệt ứng dụng được tích hợp Augmented Reality[1], cho phép những địa điểm được đặt trong thế giới Augmented Reality theo hệ toạ độ thế giới thật.
- Được phát triển cho cả hai hệ điều hành iOS (sử dụng ARKit[2] – Apple) và Android (sử dụng ARCore[3] – Google).
1.2 Nguyên tắc hoạt động
- Lấy vị trí của bạn dựa vào GPS của thiết bị.
- Sử dụng AR lấy thông tin thiết bị cảm biến chuyển động, kết hợp với hình ảnh từ camera, để lấy thông tin thế giới thật.[4]
- Với những thông tin đã có, tiến hành mô phỏng những đặc điểm ở thế giới thật 3D sang màn hình thiết bị 2D.
- Độ tương phản rất quan trọng trong việc xác định các vùng xung quanh. Camera sẽ hoạt động tốt nếu các bề mặt xung quanh không quá sáng hoặc quá tối.
2. Yêu cầu
2.1 iOS
- iOS 11 hoặc cao hơn.
- Thiết bị: Chíp xử lý A9 hoặc lớn hơn (iPhone SE, 6S hoặc cao hơn, tất cả dòng iPad Pro, iPad 2017 hoặc cao hơn).[5]
- Xcode 10.2.1 hoặc cao hơn.
2.2 Android
- Android 7.0 (Nougat) hoặc cao hơn.
- Thiết bị: danh sách các thiế bị được hỗ trợ ở đây.[6]
- Android Studio 3.1 hoặc cao hơn.
3. Khởi tạo cho iOS
3.1 Mở Xcode.
3.2 Chọn File ➤ New ➤ Project.
3.3 Chọn “Augmented Reality App” sau đó chọn Next. Điền product name, organization name, organization identifiers.
3.4 Content technology ➤ SceneKit.
3.5 Trong Info.plist:
- Thêm “Privacy – Camera Usage Description”, “Privacy – Location When In Use Usage Description” và diễn giải.
- Trong “Required device capabilities”: thêm “arkit”.
4. Khởi tạo cho Android
4.1 Mở Android Studio.
4.2 Chọn File ➤ New ➤ New Project.
4.3 Thêm JitPack trong root build.gradle ở dòng cuối cùng của repositories:
4.4 Thêm the Sceneform library trong app build.gradle.
4.5 Xin quyền, cho phép tính năng ARCore trong Manifest.
5. Chức năng chính
5.1 Hiển thị các địa điểm xung quanh vị trí của bạn, các điạ điểm này được sắp xếp trong thiết bị giống với thế giới thật, và hiển thị thông tin khoảng cách tới các địa điểm đó. Có thể di chuyển các điạ điểm tới các vị trí khác nhau trên màn hình thiết bị. Ngoài ra khi thiết bị di chuyển thông tin về khoảng cách sẽ được cập nhật.
5.2 Hiển thị và tìm kiếm địa điểm hoặc danh mục. Bên cạnh đó, có thể ẩn/hiện chúng trên màn hình.
5.3 Hỗ trợ hiển thị nhiều ngôn ngữ.
5.4 Hiển thị những thông tin cơ bản và chi tiết về địa điểm.
6. Bài toán
6.1 Sự khác biệt giữa vị trí lấy được từ GPS so với vị trí thật.
- Thật sự mà nói thì vấn đề xác định phương hướng của thiết bị không hoàn toàn chính xác. Vì lý do đó, việc hiển thị các địa điểm trong thiết bị cũng sẽ đôi lúc không được chính xác và có thể khác xa so với kỳ vọng.
- Có một chút khác biệt giữa iOS và Android. Khi đặt cùng một vị trí, GPS lấy được cũng khác nhau ở các thiết bị nên các địa điểm hiển thị trên thiết bị cũng khác nhau.
- Độ cao cũng là một vấn đề. Thỉnh thoảng các thiết bị Android không thể lấy được độ cao trong quá trình sử dụng ứng dụng.
6.2 Hiển thị các địa điểm trong AR.
- Phát triển tính năng mô phỏng những địa điểm thật sang AR trong thiết bị chiếm khá nhiều thời gian. Bởi vì thỉnh thoảng Location SDK không thật sự hoạt động tốt nên không thể xác định được các vị trí trong AR. Nói theo một cách đơn giản việc hiển thị một địa điểm trong AR sẽ theo các bước:
– Bước 1: Từ thông tin một địa điểm, tính toán khoảng cách tới vị trị của thiết bị. Tiếp theo, tạo một view tạm để chứa tên và khoảng cách tới địa điểm.
– Bước 2: chuyển đổi khoảng cách ở (bước 1) vào hệ trục toạ độ AR(x, y, z).
– Bước 3: thu nhỏ view (bước 1) theo tỉ lệ với giá trị (bước 2) sau đó thêm view đó vào AR.
– Lưu ý: cập nhật khoảng cách của địa điểm sau 1 khoảng thời gian cố định để đảm bảo UI được cập nhật trong khi di chuyển. - Bên cạnh đó, sắp xếp các địa điểm để đảm bảo người dùng có một góc nhìn tốt hơn, đối với những địa điểm quá gần thì độ cao của chúng sẽ ảnh hưởng đến việc hiện thị trên màn hình.
- Cuối cùng là giải quyết vấn đề khi di chuyển một địa điểm trên màn hình thì không ảnh hưởng đến những địa điểm đã được sắp xếp khác.
6.3 Lưu ý về Pin.
- Có hai chức năng tốn khá nhiều pin là camera và GPS. Chúng luôn bật khi đang sử dụng ứng dụng. Thiết bị sẽ nóng lên nhanh trong suốt quá trình sử dụng.
7. Cải tiến
Để mang đến một trải nghiệm tốt nhất cho người dùng, một số biện pháp đã được áp dụng nhằm nâng cao hiệu suất của ứng dụng.
7.1 Những địa điểm được sắp xếp theo thứ tự khoảng cách của chúng.
- Những địa điểm có khoảng cách gần hơn sẽ được hiển thị ở phía trước cho cả thiết bị iOS và Android. Việc thu nhỏ và sắp xếp các địa điểm cho phù hợp với kích thước của thiết bị để nhằm mục đích cho người dùng một cái nhìn tốt hơn khi trải nghiệm ứng dụng.
7.2 Hạn chế việc cập nhật UI.
Sau một khoảng thời gian cố định, ứng dụng sẽ cập nhật UI để lấy những thông tin mới nhất về khoảng cách đến các địa. Tuy nhiên,
- Nếu vị trí hiện tại của thiết bị không thay đổi trong khoảng 10m, ứng dụng sẽ không cập nhật UI.
- Trong lúc di chuyển một địa điểm trên màn hình, cũng không cập nhật UI.
8. Cảm ơn
Trong ứng dụng, chúng tôi có sử dụng hai thư viện hỗ trợ là ProjectDent[7] (iOS) and Appoly[8] (Android).
9. Tham khảo:
[1] https://en.wikipedia.org/wiki/Augmented_reality
[2] https://developer.apple.com/augmented-reality/
[3] https://developers.google.com/ar/
[4] https://developers.google.com/ar/discover/concepts
[6] https://developers.google.com/ar/discover/supported-devices