Spisu treści:

Umieszczanie obiektów AR we współrzędnych GPS w rzeczywistości rozszerzonej: 8 kroków (ze zdjęciami)
Umieszczanie obiektów AR we współrzędnych GPS w rzeczywistości rozszerzonej: 8 kroków (ze zdjęciami)

Wideo: Umieszczanie obiektów AR we współrzędnych GPS w rzeczywistości rozszerzonej: 8 kroków (ze zdjęciami)

Wideo: Umieszczanie obiektów AR we współrzędnych GPS w rzeczywistości rozszerzonej: 8 kroków (ze zdjęciami)
Wideo: Śladami starożytnej cywilizacji? 🗿 A co jeśli myliliśmy się co do naszej przeszłości? 2024, Grudzień
Anonim
Umieszczanie obiektów AR we współrzędnych GPS w rzeczywistości rozszerzonej
Umieszczanie obiektów AR we współrzędnych GPS w rzeczywistości rozszerzonej

Ta instrukcja omówi tworzenie aplikacji mobilnej do umieszczania obiektów AR we współrzędnych GPS za pomocą ARkit i ARCore przy użyciu Unity3D. Przeprowadzę Cię przez konfigurację projektu, który wykonałem przy użyciu Mapbox, który pozwala nam oznaczać wiadomości w określonych lokalizacjach GPS i zapisywać je w bazie danych GameSparks.

Całe oprogramowanie i projekty, których tutaj użyjemy, są bezpłatne.

Pobierz Unity 3D tutaj, jeśli jeszcze go nie masz:

unity3d.com/

Krok 1: Przeszkody…

Płotki…
Płotki…

Więc nie jest to najłatwiejsza aplikacja do wykonania przy obecnych ograniczeniach mobilnego GPS i mobilnego kompasu.

Szczerze mówiąc przedmioty pojawiają się tam, gdzie powinny być może około 50% czasu. Wyniki nie są więc wspaniałe, ale stają się dokładniejsze, im bliżej obiektów się zbliża.

Tak czy inaczej, myślę, że lepszym sposobem na AR opartego na GPS w tym momencie byłoby użycie mapy, takiej jak pokemon go, a kiedy zbliżasz się do obiektu, kamera otwiera się i widzisz tylko ten obiekt tuż przed tobą. W przyszłości chciałbym zrobić pełny samouczek dotyczący prostszej implementacji takiej jak ta.

Tak czy inaczej, wcześniej korzystałem z Mapbox i wiem, że mają klasę konwersji, która ma funkcje do konwersji współrzędnych GPS na współrzędne świata Unity. Pomyślałem, że mogę po prostu podać niektóre współrzędne GPS i pojawią się tam, gdzie chciałem. Nie działało.

Obiekty ukazują się poprawnie względem siebie, ale nigdy nie były we właściwym miejscu. Zrobiłem więc trochę badań i stwierdziłem, że moja kamera Unity musi być ustawiona na rzeczywistą północ, aby obiekty pojawiły się we właściwym miejscu.

Problem polega na tym, że kompas w telefonie nigdy nie jest całkowicie dokładny.

Krok 2: Głupi kompas

Głupi kompas
Głupi kompas
Głupi kompas
Głupi kompas

Główny problem polega na tym, że umieszczasz obiekty z dala od kamery, jeśli twoje wyobrażenie prawdziwej północy jest przesunięte nawet o kilka stopni, obiekty w oddali pojawią się bardzo daleko.

Prawie zrezygnowałem z tego przedsięwzięcia, ale znajomy powiedział mi o tym projekcie GitHub:

github.com/mapbox/mapbox-ar-unity

Jest to próba stworzenia AR w „skali światowej” z Mapbox, w której obiekty są zakotwiczone we współrzędnych GPS, dzięki czemu doświadczenia rzeczywistości rozszerzonej mogą działać na zewnątrz na duże odległości, a nie tylko w małym pokoju w domu.

Ich projekt wykorzystuje delty AR Position i GPS Position do obliczenia kąta, który jest przesunięciem kamery AR do prawdziwej północy. Więc po prostu weź jeden odczyt GPS, gdy użytkownik uruchomi aplikację i poprowadź go w linii prostej i wykonaj kolejny odczyt GPS. Dzięki tym dwóm punktom możesz określić, w którym kierunku szła ta osoba (zakładając, że jej kamera jest skierowana w kierunku, w którym idzie). Okazało się, że było to dokładniejsze niż używanie kompasu w telefonie.

Innym problemem, który próbują rozwiązać, jest dryf z ARkit. Śledzenie w małym pokoju jest w porządku, ale gdy pokonujesz duże odległości, obiekty AR kończą się dryfować daleko od miejsca, w którym powinny być.

Krok 3: Wreszcie rozwiązanie

Wreszcie rozwiązanie!
Wreszcie rozwiązanie!

Tak więc ten projekt Mapbox zaoferował sposób na uzyskanie wiarygodnego kierunku orientacji względem prawdziwej północy, więc jedyne, co pozostało, to po prostu umieścić obiekty na świecie.

Skończyło się na rozszerzeniu tego przykładu, aby móc oznaczyć wiadomość tekstową w określonej lokalizacji GPS, a następnie zapisać te informacje w bazie danych GameSparks. Właśnie tego pokażę, jak używać.

Jedyny problem z tym projektem polega na tym, że musisz uzyskać dobre wyrównanie, zanim będzie można go użyć.

Przez wyrównanie mam na myśli to, że ponieważ Mapbox używa delt pozycji do obliczania kursu, po pierwszym otwarciu aplikacji musisz upewnić się, że wykryto płaszczyznę podłoża, a następnie iść przez chwilę w linii prostej, aż zostanie obliczone prawidłowe wyrównanie.

W tym sensie UX jest kolejną przeszkodą, ale w ulepszeniach projektu dają przykład umieszczania sześcianów przed użytkownikiem, aby przejść przez nie, aby zapewnić dobre wyrównanie.

Więc teraz, gdy znasz ograniczenia tego projektu, pozwól, że pokażę ci, jak go używać, aby faceci mogli się pobawić. Ostatecznie będziesz musiał utworzyć konto mapbox i konto gamesparks, z których oba są bezpłatne. Użyłem gameparków tylko po to, aby móc gdzieś zapisać współrzędne GPS, ponieważ podczas testów będziesz dość często restartował i przebudowywał aplikację.

Powinno to działać zarówno z ARkit, jak i ARcore, ale w tej chwili mam tylko iPhone'a, więc to wszystko, co mogłem przetestować.

Krok 4: Pozwól, aby aplikacja działała

Uruchom aplikację!
Uruchom aplikację!

Najpierw pobierz ten projekt z GitHub:

Zapisz plik na pulpicie i otwórz go w Unity.

Przejdź do pliku, kompiluj ustawienia i przełącz platformę na Androida lub IOS.

Teraz przejdź do Mapbox.com i utwórz konto, jeśli jeszcze go nie masz.

Chwyć klucz API i wróć do Unity, kliknij kartę Mapbox u góry i kliknij konfiguruj. Wklej tam swój klucz API.

Teraz utwórz konto na GameSparks.com i kliknij przycisk w prawym górnym rogu, aby utworzyć nową aplikację.

Nazwij go, jak chcesz, i skopiuj klucz API i tajny klucz aplikacji. Wróć do Unity i znajdź zakładkę GameSparks na górze. Kliknij konfiguruj i wklej tam również swoje dane uwierzytelniające.

Krok 5: Skonfiguruj GameSparks

Skonfiguruj GameSparks
Skonfiguruj GameSparks

Teraz zanim aplikacja zacznie działać, musimy skonfigurować naszą bazę danych.

GameSparks używa noSQL, więc najpierw musimy utworzyć kolekcję i dodać zdarzenia, których nasza aplikacja używa do odczytywania, zapisywania i usuwania z serwera.

Najpierw utwórz nową kolekcję w witrynie GameSparks i nazwij ją, jak chcesz.

Teraz musimy stworzyć 3 wydarzenia.

Pierwszą rzeczą, którą aplikacja musi zrobić, jest zapisanie obiektu komunikatu do bazy danych.

Wiadomość ma szerokość i długość geograficzną, a następnie tekst wiadomości.

Przejdź więc do konfiguratora i dodaj nowe wydarzenie. Utwórz krótki kod „SAVE_GEO_MESSAGE”.

Wpisz, co chcesz, jako nazwę i opis.

Dodaj krótki kod dla 3 atrybutów:

„LAT” „LON”

"TEKST"

Ustaw każdy typ danych na ciąg i ustaw wartość domyślną na 0. Ustaw domyślny typ agregacji każdego z nich na „używany w skrypcie”.

Krok 6: Dodaj wydarzenia końcowe…

Dodaj wydarzenia końcowe…
Dodaj wydarzenia końcowe…

Aplikacja musi również załadować wszystkie wiadomości z bazy danych i odczytać je w Unity po uruchomieniu aplikacji, abyśmy mogli umieścić wiadomości AR przechowywane w bazie danych.

Utwórz kolejne wydarzenie i nazwij je „LOAD_MESSAGE”

To wydarzenie nie wymaga żadnych atrybutów. Ponownie umieść, co chcesz, jako nazwę i opis.

Zrób to samo dla innego wydarzenia i nazwij je „REMOVE_MESSAGES”

To nawet nie wymaga żadnych atrybutów.

Teraz ostatnią rzeczą, którą musimy zrobić, jest dodanie „kodu w chmurze” lub kodu po stronie serwera, który jest wywoływany, gdy każde zdarzenie jest uruchamiane z naszej aplikacji.

Krok 7: Dodaj kod chmury

W GameSparks przejdź do konfiguratora i kodu w chmurze.

Do każdego wydarzenia, które właśnie stworzyliśmy, musimy dodać skrypt.

W zdarzeniu LOAD_MESSAGE dodaj ten kod i zapisz go:

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

var kursor = messageData.find();

var wszystkieWiadomości = ;

while(kursor.hasNext()) {

var obj = kursor.następny();

usuń(obj ["_id"]);

wszystkieWiadomości.push(obj);

}

Spark.setScriptData("wszystkie_komunikaty", wszystkie komunikaty); // zwróć wszystkie dane

W zdarzeniu REMOVE_MESSAGES dodaj ten kod:

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

messageData.remove({});

Na koniec w wydarzeniu SAVE_MESSAGES dodaj to:

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

var wiadomośćLat = Spark.getData(). LAT;

var wiadomośćLon = Spark.getData(). LON;

var tekst wiadomości = Spark.getData(). TEKST;

var bieżąca wiadomość = {

"messLat": wiadomośćLat,

"messLon": wiadomośćLon,

"messText": messageText,

};

geoMessageList.insert(bieżąca wiadomość);

Krok 8: SKOŃCZYLIŚMY

SKOŃCZYLIŚMY!
SKOŃCZYLIŚMY!

Ten projekt używa unikalnego identyfikatora Twojego urządzenia do uwierzytelniania na serwerze GameSparks, dzięki czemu możesz teraz wrócić do Unity i kliknąć przycisk Odtwórz, a w konsoli powinieneś zobaczyć „uwierzytelnione urządzenie…”

Teraz przejdź do pliku, ustawienia kompilacji i kliknij kompiluj. Jeśli nigdy nie tworzyłeś aplikacji na Androida lub iOS, może być konieczne założenie konta programistycznego w Google lub Apple.

Po uruchomieniu aplikacji na telefonie musisz najpierw upewnić się, że ARKit lub ARCore wykryją samolot naziemny. Teraz kliknij przycisk dziennika w lewym dolnym rogu. Przejdź kilka kroków do przodu, a zobaczysz „obliczone wyrównanie” w kolorze jasnoniebieskim. Teraz powinny pojawić się przyciski interfejsu użytkownika, a jeśli jakieś wiadomości zostaną załadowane do twojej bazy danych, zostaną umieszczone w świecie.

Aby oznaczyć nową wiadomość GPS AR gdzieś, przejdź do lokalizacji, w której chcesz umieścić wiadomość, i kliknij ikonę wiadomości w prawym górnym rogu ekranu. Wpisz dowolną wiadomość i kliknij przycisk pinezki!

Zalecana: