Protótipo - módulo de funcionamento em rede

Os últimos tempos tem sido dedicados ao desenvolvimento do protótipo, especificamente a componente de comunicação em rede. As tentativas de colocar esta componente a funcionar foram várias. Pretendo neste post descrever de uma forma resumida os vários testes efetuados, os problemas encontrados no desenvolvimento e o estado atual da componente de rede do projeto.
A primeira tarefa foi desenvolver a componente de rede, através da criação de um servidor e de um cliente, e colocar os dois a comunicar. Esta componente foi programada em javascript no Unity3D. Para aprender esta componente foram essenciais tutoriais de rede disponíveis na internet. 
O sistema como está desenvolvido é do tipo ligação directa, em que os computadores na rede funcionam como servidores e clientes simultaneamente. Assim cada computador processa os dados de forma individual e envia os resultados para o servidor que de seguida actualiza/sincroniza as acções em todos os computadores na rede. Desta forma os movimentos associados ao avatar que o utilizador controla são visíveis nos outros computadores na rede. De forma resumida, o avatar que controlo é visto pelos outros utilizadores na rede a mexer-se.
Após a criação do servidor, e a ligação com o cliente funcionar com sucesso, o passo seguinte foi sincronizar, na rede, a animação proveniente do sensor e por conseguinte associada ao avatar.  Esta componente é essencial para a questão de um ambiente colaborativo funcionar. Assim os testes de sincronização da animação do avatar começaram. Começaram também alguns problemas e dores de cabeça, que acabaram por atrasar o desenvolvimento do protótipo.
Houve uma incompatibilidade entre a componente de animação e de comunicação em rede. De uma forma resumida, era necessário o avatar estar no cenário para funcionar a componente de animação do avatar, mas por outro lado para a componente de rede funcionar o objeto não podia estar presente no cenário. Por forma a contornar este problema foram efetuados vários testes. Uma das possibilidades pensadas para contornar o problema era instanciar o objeto sem estar presente no cenário, mas os testes efetuados não resolveram o problema. Foram colocados dois avatares no cenário, uma a interagir com o sensor, e um segundo a copiar os movimentos do primeiro e a enviar para a rede. Esta solução não funcionou como o esperado. Neste momento do desenvolvimento já era complicado identificar a origem do problema.
Até ao momento foi muito importante uma reunião efetuada com  o Professor Telmo, tanto na componente de rede, como algumas classes desenvolvidas em C#. Com a ajuda do Professor foi possível fazer testes e perceber as incompatibilidades no desenvolvimento, e foram sugeridas alternativas. 
Um dos momentos decisivos e que ajudou (e muito!) a resolver este impasse no desenvolvimento foi o contacto estabelecido com um colega de ECT da Universidade de Aveiro. Ele está a trabalhar e a desenvolver na mesma área da interação controlada por gestos em ambientes 3D distribuídos, e após uma reunião foi possível esclarecer algumas dúvidas.
A primeira recomendação do colega foi de mudar de framework. A framework recomendada é a OpenNI Toolkit para o Unity3D.
Esta framework apresenta uma estrutura das classes diferente, o que permitiu fazer uma integração com o módulo de rede de uma forma diferente. E assim permitir a sincronização do avatar no ambiente 3D.
De momento o protótipo já se pode considerar como sendo multiutilizador, pois permite a sincronização de dois avatares no mesmo cenário em tempo real. Dois utilizadores ligados, com dois sensores, cada utilizador com o respectivo sensor a controlar o avatar no ambiente colaborativo distribuído. 
Alguns pormenores tem de ser trabalhados, especialmente a posição dos avatares no cenário (evitar a sbreposição dos elementos). 
Até depois!

 

publicado por paulamargarida às 19:32 | comentar