Mục lục:

Đặt đối tượng AR tại tọa độ GPS trong thực tế tăng cường: 8 bước (có hình ảnh)
Đặt đối tượng AR tại tọa độ GPS trong thực tế tăng cường: 8 bước (có hình ảnh)

Video: Đặt đối tượng AR tại tọa độ GPS trong thực tế tăng cường: 8 bước (có hình ảnh)

Video: Đặt đối tượng AR tại tọa độ GPS trong thực tế tăng cường: 8 bước (có hình ảnh)
Video: Toàn cảnh thế giới: Tướng Shoigu lệnh sử dụng bom mới kinh khủng 1500 kg “không thể chống đỡ” 2024, Tháng bảy
Anonim
Đặt Đối tượng AR tại Tọa độ GPS trong Thực tế Tăng cường
Đặt Đối tượng AR tại Tọa độ GPS trong Thực tế Tăng cường

Tài liệu hướng dẫn này sẽ chuyển sang tạo một ứng dụng di động để đặt các đối tượng AR tại tọa độ GPS với ARkit và ARCore bằng Unity3D. Tôi sẽ hướng dẫn bạn cách thiết lập một dự án mà tôi đã thực hiện bằng cách sử dụng Mapbox cho phép chúng tôi gắn thẻ tin nhắn tại các vị trí GPS cụ thể và ghi chúng vào cơ sở dữ liệu GameSparks.

Tất cả các phần mềm và dự án chúng tôi sẽ sử dụng ở đây đều miễn phí.

Tải xuống Unity 3D tại đây nếu bạn chưa có:

unity3d.com/

Bước 1: Vượt rào…

Vượt rào…
Vượt rào…

Vì vậy, đây không phải là ứng dụng dễ tạo nhất với những hạn chế hiện tại của GPS di động và la bàn di động.

Thành thật mà nói, các đối tượng hiển thị ở nơi mà chúng được cho là có thể khoảng 50% thời gian. Vì vậy, kết quả không lớn, nhưng chúng trở nên chính xác hơn khi bạn đến gần các đối tượng hơn.

Dù bằng cách nào, tôi nghĩ rằng một cách tốt hơn để sử dụng AR dựa trên GPS vào thời điểm này là sử dụng bản đồ như pokemon go và khi bạn đến gần một đối tượng, máy ảnh sẽ mở ra và bạn chỉ nhìn thấy đối tượng đó ngay trước mặt bạn. Trong tương lai, tôi muốn thực hiện một hướng dẫn đầy đủ về cách triển khai đơn giản hơn như vậy.

Dù bằng cách nào tôi đã sử dụng Mapbox trước đây và tôi biết chúng có một lớp chuyển đổi có chức năng chuyển đổi tọa độ GPS sang tọa độ thế giới Unity. Tôi nghĩ rằng tôi có thể vượt qua một số tọa độ GPS và chúng sẽ xuất hiện ở nơi tôi muốn. Không hoạt động.

Các đối tượng hiển thị tương đối chính xác với nhau nhưng chúng không bao giờ ở đúng vị trí. Vì vậy, tôi đã thực hiện một số nghiên cứu và nhận thấy rằng Máy ảnh Unity của tôi cần phải được căn chỉnh theo hướng bắc thực để các đối tượng hiển thị ở đúng vị trí.

Vấn đề là la bàn trong điện thoại của bạn không bao giờ hoàn toàn chính xác.

Bước 2: La bàn ngu ngốc

La bàn ngu ngốc
La bàn ngu ngốc
La bàn ngu ngốc
La bàn ngu ngốc

Vấn đề chính là khi bạn đặt các đối tượng ở xa máy ảnh, nếu ý tưởng về hướng bắc thực của điện thoại của bạn lệch đi vài độ, các đối tượng ở xa sẽ xuất hiện ở rất xa.

Tôi gần như đã từ bỏ liên doanh này nhưng một người bạn đã nói với tôi về dự án GitHub này:

github.com/mapbox/mapbox-ar-unity

Đây là nỗ lực thực hiện AR "quy mô thế giới" từ Mapbox nơi các đối tượng được neo vào tọa độ GPS để trải nghiệm Thực tế tăng cường có thể hoạt động bên ngoài trong khoảng cách xa thay vì chỉ bên trong một căn phòng nhỏ trong ngôi nhà của bạn.

Dự án của họ sử dụng các tam giác Định vị AR và các tam giác Định vị GPS để tính toán một góc là độ lệch từ camera AR về phía bắc thực. Vì vậy, về cơ bản hãy đọc một lần GPS khi người dùng khởi động ứng dụng và yêu cầu họ đi trên một đường thẳng và thực hiện một lần đọc GPS khác. Sau đó, với hai điểm này, bạn có thể biết người đó đang đi theo hướng nào (giả sử máy ảnh của họ đang hướng về hướng họ đang đi). Họ phát hiện ra rằng điều này chính xác hơn so với việc sử dụng la bàn trên điện thoại.

Vấn đề khác mà họ cố gắng giải quyết là sự trôi dạt với ARkit. Theo dõi là ok trong một căn phòng nhỏ nhưng khi bạn đi bộ đường dài bên ngoài, các đối tượng AR cuối cùng lại trôi đi rất xa so với nơi chúng được cho là ở đó.

Bước 3: Cuối cùng là một giải pháp

Cuối cùng là một giải pháp!
Cuối cùng là một giải pháp!

Vì vậy, dự án Mapbox này đã đưa ra một cách để có được hướng quay mặt đáng tin cậy so với hướng bắc thực để tất cả những gì còn lại chỉ là đặt các đối tượng trên thế giới.

Tôi đã mở rộng ví dụ này một chút để tôi có thể gắn thẻ tin nhắn văn bản tại một vị trí GPS cụ thể và sau đó ghi thông tin đó vào cơ sở dữ liệu GameSparks. Đó là những gì tôi sẽ chỉ cho bạn cách sử dụng.

Vấn đề duy nhất của dự án này là bạn phải có một sự liên kết tốt trước khi nó có thể được sử dụng.

Ý tôi muốn nói về căn chỉnh là vì Mapbox sử dụng các delta vị trí để tính toán tiêu đề, khi bạn mở ứng dụng lần đầu tiên và bạn phải đảm bảo rằng một mặt phẳng trên mặt đất được phát hiện và sau đó đi trên một đường thẳng cho đến khi tính được căn chỉnh thích hợp.

Theo nghĩa này, UX là một trở ngại khác nhưng trong những cải tiến của dự án, họ đưa ra một ví dụ về việc đặt các hình khối xuống phía trước người dùng để đi qua để đảm bảo sự liên kết tốt.

Vì vậy, bây giờ bạn đã biết những hạn chế của dự án này, hãy để tôi chỉ cho bạn cách sử dụng nó để mọi người có thể chơi xung quanh. Cuối cùng, bạn sẽ cần tạo một tài khoản mapbox và một tài khoản gamesparks, cả hai đều miễn phí. Tôi đã sử dụng công viên trò chơi chỉ để có thể lưu tọa độ GPS ở đâu đó vì trong quá trình thử nghiệm, bạn sẽ khởi động lại và xây dựng lại ứng dụng khá thường xuyên.

Ngoài ra, điều này sẽ hoạt động với cả ARkit và ARcore nhưng tôi chỉ có một chiếc iPhone vào lúc này nên đó là tất cả những gì tôi có thể kiểm tra.

Bước 4: Cho phép ứng dụng hoạt động

Cho phép ứng dụng hoạt động!
Cho phép ứng dụng hoạt động!

Trước tiên, hãy tải dự án này từ GitHub:

Lưu tệp vào màn hình của bạn và mở tệp đó trong Unity.

Đi tới tệp, cài đặt xây dựng và chuyển nền tảng của bạn sang Android hoặc IOS.

Bây giờ hãy truy cập Mapbox.com và tạo một tài khoản nếu bạn chưa có.

Lấy khóa API của bạn và quay lại Unity, nhấp vào tab Mapbox ở trên cùng và nhấp vào cấu hình. Dán khóa API của bạn vào đó.

Bây giờ, hãy tạo một tài khoản trên GameSparks.com và nhấp vào nút ở trên cùng bên phải để tạo một ứng dụng mới.

Gọi nó là bất cứ thứ gì bạn muốn và sao chép khóa API và bí mật ứng dụng của bạn. Quay lại Unity và tìm tab GameSparks ở trên cùng. Nhấp vào cấu hình và dán thông tin đăng nhập của bạn vào đó.

Bước 5: Định cấu hình GameSparks

Định cấu hình GameSparks
Định cấu hình GameSparks

Bây giờ trước khi ứng dụng hoạt động, chúng ta cần cấu hình cơ sở dữ liệu của mình.

GameSparks sử dụng noSQL, vì vậy trước tiên chúng tôi cần tạo một bộ sưu tập và thêm các sự kiện mà ứng dụng của chúng tôi sử dụng để đọc, ghi và xóa khỏi máy chủ.

Đầu tiên, hãy tạo một bộ sưu tập mới trên trang web GameSparks và gọi nó là bất cứ thứ gì bạn muốn.

Bây giờ chúng ta cần tạo 3 sự kiện.

Điều đầu tiên ứng dụng cần làm là ghi đối tượng tin nhắn vào cơ sở dữ liệu.

Một tin nhắn có vĩ độ, kinh độ và sau đó là nội dung của tin nhắn.

Vì vậy, hãy chuyển đến cấu hình và thêm một sự kiện mới. Tạo mã ngắn "SAVE_GEO_MESSAGE".

Đặt bất cứ điều gì bạn muốn cho tên và mô tả.

Thêm mã ngắn cho 3 thuộc tính:

"LAT" "LON"

"CHỮ"

Đặt từng kiểu dữ liệu thành chuỗi và đặt giá trị mặc định thành 0. Đặt kiểu tổng hợp mặc định của từng kiểu thành "được sử dụng trong tập lệnh".

Bước 6: Thêm các sự kiện cuối cùng…

Thêm các sự kiện cuối cùng…
Thêm các sự kiện cuối cùng…

Ứng dụng cũng cần tải tất cả thông báo từ cơ sở dữ liệu và đọc chúng vào Unity khi ứng dụng khởi động để chúng tôi có thể đặt thông báo AR được lưu trữ trong cơ sở dữ liệu.

Tạo một sự kiện khác và gọi nó là "LOAD_MESSAGE"

Sự kiện này không cần bất kỳ thuộc tính nào. Một lần nữa đặt bất cứ điều gì bạn muốn cho tên và mô tả.

Làm điều tương tự cho một sự kiện khác và gọi sự kiện đó là "REMOVE_MESSAGES"

Điều này thậm chí không cần bất kỳ thuộc tính nào.

Bây giờ, điều cuối cùng chúng ta cần làm là thêm một số "mã đám mây" hoặc mã phía máy chủ được gọi khi mỗi sự kiện được bắt đầu từ ứng dụng của chúng ta.

Bước 7: Thêm mã đám mây

Trong GameSparks, chuyển đến trình cấu hình và mã đám mây.

Chúng tôi cần thêm một tập lệnh cho mỗi sự kiện mà chúng tôi vừa thực hiện.

Trong sự kiện LOAD_MESSAGE, hãy thêm mã này và lưu nó:

var messageData = Spark.runtimeCollection ("GeoMessage");

var cursor = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = cursor.next ();

xóa (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // trả về tất cả dữ liệu

Trong sự kiện REMOVE_MESSAGES, hãy thêm mã này:

var messageData = Spark.runtimeCollection ("GeoMessage");

messageData.remove ({});

Cuối cùng trong sự kiện SAVE_MESSAGES, hãy thêm cái này:

var geoMessageList = Spark.runtimeCollection ("GeoMessage");

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). TEXT;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

"messText": messageText,

};

geoMessageList.insert (currentMessage);

Bước 8: CHÚNG TÔI XONG

CHÚNG TA XONG RỒI!
CHÚNG TA XONG RỒI!

Dự án này sử dụng ID duy nhất của thiết bị của bạn để xác thực với máy chủ GameSparks, vì vậy, bây giờ bạn có thể quay lại Unity và nhấp vào phát, và bạn sẽ thấy trong bảng điều khiển "thiết bị được xác thực…"

Bây giờ đi tới tệp, cài đặt xây dựng và nhấp vào xây dựng. Nếu bạn chưa bao giờ tạo ứng dụng cho Android hoặc IOS, bạn có thể cần thiết lập tài khoản phát triển với Google hoặc Apple.

Sau khi ứng dụng có trên điện thoại của bạn, trước tiên, bạn cần đảm bảo rằng ARKit hoặc ARCore phát hiện một mặt đất. Bây giờ hãy nhấp vào nút nhật ký ở góc dưới cùng bên trái. Đi bộ về phía trước một vài bước và bạn sẽ thấy "căn chỉnh được tính toán" xuất hiện với màu xanh lam nhạt. Bây giờ các nút giao diện người dùng sẽ xuất hiện và nếu bất kỳ thông báo nào được tải trong cơ sở dữ liệu của bạn, chúng sẽ được đưa vào thế giới.

Để gắn thẻ một tin nhắn GPS AR mới ở đâu đó, hãy đi bộ đến vị trí bạn muốn gửi tin nhắn đó và nhấp vào biểu tượng tin nhắn ở trên cùng bên phải của màn hình. Nhập bất kỳ tin nhắn nào bạn muốn và nhấp vào nút ghim!

Đề xuất: