Índice:

Colocando Objetos AR em Coordenadas GPS em Realidade Aumentada: 8 Passos (com Imagens)
Colocando Objetos AR em Coordenadas GPS em Realidade Aumentada: 8 Passos (com Imagens)

Vídeo: Colocando Objetos AR em Coordenadas GPS em Realidade Aumentada: 8 Passos (com Imagens)

Vídeo: Colocando Objetos AR em Coordenadas GPS em Realidade Aumentada: 8 Passos (com Imagens)
Vídeo: DigitalFUTURES.Português Tutorial: Realidade aumentada na prática 2024, Novembro
Anonim
Colocando Objetos AR em Coordenadas GPS em Realidade Aumentada
Colocando Objetos AR em Coordenadas GPS em Realidade Aumentada

Este instrutível irá abordar a criação de um aplicativo móvel para colocar objetos AR em coordenadas GPS com ARkit e ARCore usando Unity3D. Vou orientá-lo na configuração de um projeto que fiz usando o Mapbox que nos permite marcar mensagens em localizações GPS específicas e gravá-las em um banco de dados GameSparks.

Todos os softwares e projetos que usaremos aqui são gratuitos.

Baixe o Unity 3D aqui se ainda não o tiver:

unity3d.com/

Etapa 1: obstáculos …

Obstáculos …
Obstáculos …

Portanto, este não é o aplicativo mais fácil de fazer com as limitações atuais do GPS móvel e da bússola móvel.

Para ser honesto, os objetos aparecem onde deveriam, cerca de 50% do tempo. Portanto, os resultados não são ótimos, mas se tornam mais precisos quanto mais você se aproxima dos objetos.

De qualquer forma, acho que a melhor maneira de AR baseado em GPS neste ponto seria usar um mapa como o Pokémon Go faz e quando você se aproxima de um objeto, a câmera se abre e você vê apenas aquele objeto bem na sua frente. No futuro, gostaria de fazer um tutorial completo sobre uma implementação mais simples como essa.

De qualquer forma, eu usei o Mapbox antes e sei que eles têm uma classe de conversão que tem funções para converter coordenadas GPS em coordenadas mundiais Unity. Achei que poderia simplesmente passar algumas coordenadas de GPS e elas apareceriam onde eu queria. Não funcionou.

Os objetos aparecem corretamente em relação uns aos outros, mas eles nunca estiveram no lugar certo. Então, fiz algumas pesquisas e descobri que minha câmera de unidade precisava estar alinhada com o norte verdadeiro para que os objetos aparecessem no lugar certo.

O problema é que a bússola do seu telefone nunca é totalmente precisa.

Etapa 2: bússola estúpida

Bússola estúpida
Bússola estúpida
Bússola estúpida
Bússola estúpida

O principal problema é quando você posiciona objetos longe da câmera, se a ideia do seu telefone do norte verdadeiro estiver errada, mesmo que alguns graus, os objetos à distância aparecerão muito distantes.

Quase desisti desse empreendimento, mas um amigo me contou sobre este projeto GitHub:

github.com/mapbox/mapbox-ar-unity

Esta é uma tentativa de fazer AR em "escala mundial" do Mapbox, onde os objetos são ancorados nas coordenadas do GPS para que as experiências de Realidade Aumentada possam funcionar ao ar livre em longas distâncias, em vez de apenas dentro de um pequeno cômodo em sua casa.

Seu projeto usa deltas de posição AR e deltas de posição GPS para calcular um ângulo que é o deslocamento da câmera de AR para o norte verdadeiro. Então, basicamente, faça uma leitura do GPS quando o usuário iniciar o aplicativo e faça com que ele ande em linha reta e faça outra leitura do GPS. Então, com esses dois pontos, você pode dizer em que direção a pessoa estava caminhando (supondo que a câmera esteja apontando para a direção em que ela está caminhando). Eles descobriram que isso era mais preciso do que usar a bússola no telefone.

O outro problema que eles tentam resolver é o desvio com o ARkit. Rastrear é ok dentro de uma sala pequena, mas quando você caminha por longas distâncias, os objetos de RA acabam se afastando de onde deveriam estar.

Etapa 3: Finalmente uma solução

Finalmente uma solução!
Finalmente uma solução!

Portanto, este projeto do Mapbox ofereceu uma maneira de obter uma direção confiável em relação ao norte verdadeiro, de modo que tudo o que restou foi apenas colocar os objetos no mundo.

Acabei estendendo este exemplo um pouco para que pudesse marcar uma mensagem de texto em uma localização GPS específica e, em seguida, gravar essa informação em um banco de dados GameSparks. É isso que vou mostrar a você como usar.

O único problema com este projeto é que você precisa obter um bom alinhamento antes que ele possa ser usado.

O que quero dizer com alinhamento é que, como o Mapbox usa deltas de posição para calcular o rumo, quando você abre o aplicativo pela primeira vez, precisa ter certeza de que um plano de solo é detectado e, em seguida, andar em linha reta por um tempo até que um alinhamento adequado seja calculado.

Nesse sentido, a UX é outro obstáculo, mas nas melhorias do projeto eles dão um exemplo de colocar cubos na frente do usuário para percorrer e garantir um bom alinhamento.

Agora que você conhece as limitações deste projeto, deixe-me mostrar como usá-lo para que os caras possam brincar. Em última análise, você precisará criar uma conta mapbox e uma conta gamesparks, ambas gratuitas. Usei gamesparks apenas para salvar as coordenadas de GPS em algum lugar, porque durante o teste, você reiniciará e reconstruirá o aplicativo com bastante frequência.

Além disso, isso deve funcionar com ARkit e ARcore, mas eu só tenho um iPhone no momento, então isso foi tudo que pude testar.

Etapa 4: vamos fazer o aplicativo funcionar

Vamos fazer o aplicativo funcionar!
Vamos fazer o aplicativo funcionar!

Em primeiro lugar, baixe este projeto no GitHub:

Salve o arquivo em sua área de trabalho e abra-o no Unity.

Acesse o arquivo, crie configurações e mude sua plataforma para Android ou IOS.

Agora vá para Mapbox.com e crie uma conta se ainda não tiver uma.

Pegue sua chave de API e volte para o Unity, clique na guia Mapbox na parte superior e clique em configurar. Cole sua chave de API lá.

Agora crie uma conta em GameSparks.com e clique no botão no canto superior direito para criar um novo aplicativo.

Chame-o do que quiser e copie sua chave de API e o segredo do aplicativo. Volte para o Unity e encontre a guia GameSparks no topo. Clique em configurar e cole suas credenciais lá também.

Etapa 5: Configurar GameSparks

Configure GameSparks
Configure GameSparks

Agora, antes que o aplicativo funcione, precisamos configurar nosso banco de dados.

GameSparks usa noSQL, portanto, precisamos primeiro criar uma coleção e adicionar os eventos que nosso aplicativo usa para ler, gravar e excluir do servidor.

Primeiro crie uma nova coleção no site GameSparks e chame-a como quiser.

Agora precisamos criar 3 eventos.

A primeira coisa que o aplicativo precisa fazer é gravar o objeto da mensagem no banco de dados.

Uma mensagem tem uma latitude, longitude e o texto da mensagem.

Então vá ao configurador e adicione um novo evento. Faça o código curto "SAVE_GEO_MESSAGE".

Insira o que quiser para o nome e a descrição.

Adicione o código curto para 3 atributos:

"LAT" "LON"

"TEXTO"

Defina cada tipo de dados como string e defina o valor padrão como 0. Torne o tipo de agregação padrão de cada um para "usado no script".

Etapa 6: Adicionar os eventos finais …

Adicione os eventos finais …
Adicione os eventos finais …

O aplicativo também precisa carregar todas as mensagens do banco de dados e lê-las no Unity quando o aplicativo é iniciado, para que possamos colocar mensagens AR armazenadas no banco de dados.

Crie outro evento e chame-o de "LOAD_MESSAGE"

Este evento não precisa de nenhum atributo. Novamente coloque o que quiser para o nome e a descrição.

Faça o mesmo para outro evento e chame-o de "REMOVE_MESSAGES"

Isso também não precisa de nenhum atributo.

Agora, a última coisa que precisamos fazer é adicionar algum "código de nuvem" ou código do lado do servidor que é chamado quando cada evento é iniciado em nosso aplicativo.

Etapa 7: adicione o Cloud Code

Em GameSparks, acesse o configurador e o código da nuvem.

Precisamos adicionar um script para cada evento que acabamos de fazer.

No evento LOAD_MESSAGE, adicione este código e salve-o:

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

var cursor = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = cursor.next ();

delete (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // retorna todos os dados

No evento REMOVE_MESSAGES adicione este código:

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

messageData.remove ({});

Finalmente, no evento SAVE_MESSAGES, adicione este:

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);

Etapa 8: TERMINAMOS

ACABAMOS!
ACABAMOS!

Este projeto usa o ID exclusivo do seu dispositivo para se autenticar no servidor GameSparks, então você pode voltar ao Unity e clicar em reproduzir, e você deve ver no console "dispositivo autenticado …"

Agora vá para o arquivo, crie as configurações e clique em construir. Se você nunca fez um aplicativo para Android ou IOS, pode ser necessário configurar uma conta de desenvolvimento no Google ou Apple.

Assim que o aplicativo estiver em seu telefone, primeiro certifique-se de que o ARKit ou ARCore detecta um plano no solo. Agora clique no botão de log no canto esquerdo inferior. Dê alguns passos para frente e você verá o "alinhamento calculado" aparecer em azul claro. Agora os botões da IU devem aparecer e se alguma mensagem for carregada em seu banco de dados, ela será colocada no mundo.

Para marcar uma nova mensagem GPS AR em algum lugar, vá até o local que deseja que a mensagem esteja e clique no ícone de mensagem no canto superior direito da tela. Digite a mensagem que quiser e clique no botão de alfinete!

Recomendado: