A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Realidade Virtual Aula 10

Apresentações semelhantes


Apresentação em tema: "Realidade Virtual Aula 10"— Transcrição da apresentação:

1 Realidade Virtual Aula 10
Remis Balaniuk

2 Interfaces hápticas Permitem simular contato físico do usuário com objetos virtuais. Exige hardware específico. Demanda alta velocidade de processamento. Implementação envolve: Detecção de colisão Cálculo de forças Comunicação com o(s) dispositivo(s).

3 Arquitetura de um sistema de RV háptico
Geometria -scanners -ultrasom -Visual Man Física -elasticidade -dureza -densidade -deformações -Elementos Finitos -Massa-mola -LEM imagens forças 30Hz 1KHz Modelo (orgãos) Método de Simulação Display gráfico Display háptico Sólido Embasamento físico Sólido Embasamento médico Simulação em tempo real Sólido embasamento computacional

4 Modelos de interação As interfaces hápticas comerciais no seu estágio atual permitem o contato pontual com os objetos virtuais. É como tocar a cena virtual segurando uma caneta. Funciona como um mouse 3D.

5 Modelos de interação O modelo mais usado para simulação do contato háptico é o proxy. O proxy é baseado num método chamado “penalty-based”, ou baseado em penalidade. A idéia básica é penalizar uma penetração com uma força de reação do objeto sobre o usuário de forma a “expulsar” o usuário de dentro do objeto.

6 Modelos de interação Nos modelos de penalidade a força é proporcional à penetração e sua direção é definida pela normal do contato. Posição do dispositivo Força de reação Força de reação

7 Modelos de interação Entretanto o método de penalidade não funciona bem em algumas situações particulares, como em objetos finos e nos cantos onde a penetração não é bem definida. Posição em t0 ? Posição em t1

8 Modelos de interação Para resolver esses problemas foi proposto uma adaptação do método de penalidade chamado proxy. O proxy indica uma posição de referência na superfície do objeto tocado pelo dispositivo háptico (chamado de probe). O proxy depende da trajetória de entrada do probe no objeto e da forma do objeto.

9 Proxy calculada por um algoritmo de minimização que procura
a posição do proxy é calculada por um algoritmo de minimização que procura a posição mais próxima ao probe na superfície do objeto o vetor formado pela diferença entre as posições do probe e do proxy, multiplicado por um fator correspondente à dureza do objeto tocado define a força a ser enviada ao dispositivo háptico.

10 Haptics no Chai O Chai foi concebido com foco nas interfaces hápticas.
É a primeira biblioteca 3D totalmente preparada para interagir com diversos dispositivos hápticos reais e ainda dispõe de uma dispositivo háptico virtual. Para exemplo abra o projeto “aula7.bpr” e veja em main.cpp as rotinas: void __fastcall TForm1::ToggleHapticsButtonClick(TObject *Sender) void HapticLoop()

11 Adicionando uma interface háptica à simulação
tool = new cMeta3dofPointer(world, 0); camera->addChild(tool); tool->setPos(-2.0, 0.0, 0.0); tool->setWorkspace(2.0,2.0,2.0); // set up the device tool->initialize(); // open communication to the device tool->start(); // update initial orientation and position of device tool->updatePose(); // tell the tool to show his coordinate frame so you can see tool rotation tool->visualizeFrames(true); // I need to call this so the tool can update its internal // transformations before performing collision detection, etc. tool->computeGlobalPositions(); tool->setForcesON(); // Enable the "dynamic proxy", which will handle moving objects cProxyPointForceAlgo* proxy = tool->getProxy(); proxy->enableDynamicProxy(true);

12 multi-threads O objeto cMeta3dofPointer quando criado tenta se conectar através de memória compartilhada a outro processo rodando como servidor de um dispositivo háptico. O Chai prevê a comunicação com dois tipos de dispositivos hápticos: o Phantom e o Delta. Se nenhum servidor estiver ativo o objeto cMeta3dofPointer lança o executável dhdvirtual.exe, que é um simulador de dispositivo háptico.

13 multi-threads Dentro da aplicação Chai é preciso lançar uma thread que vai ficar se comunicando com o servidor háptico, lendo a posição do dispositivo e informando as forças calculadas: DWORD thread_id; ::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)(HapticLoop), this, 0, &thread_id); // Boost thread and process priority ::SetThreadPriority(&thread_id, THREAD_PRIORITY_ABOVE_NORMAL);

14 multi-threads Essa thread ao ser lançada chama uma rotina chamada HapticLoop, que fará a comunicação com o servidor através de um loop. Note que a aplicação poderia usar um timer, mas como a comunicação precisa ser muito rápida (em torno de 1KHz ou 1000 vezes por segundo), uma thread é mais eficiente pois pode ser configurada com alta prioridade para ter sua velocidade garantida.

15 Haptic loop O loop háptico roda enquanto a simulação estiver ativa e consiste de 3 passos principais: // read position from haptic device Form1->tool->updatePose(); // compute forces Form1->tool->computeForces(); // send forces to haptic device Form1->tool->applyForces();

16 Haptic loop O método updatePose() lê e atualiza a posição do dispositivo na tela. O método computeForces() recalcula a posição do proxy (para isso detecta antes se está havendo colisão), e recalcula as forças de interação. O método applyForces() envia as forças calculadas para o dispositivo.

17 Haptics no Chai Note que a adição de haptics numa aplicação Chai consiste basicamente em adicionar os métodos ToggleHapticsButtonClick(TObject *Sender) e HapticLoop()ao seu main, não exigindo nenhum outro esforço de implementação.


Carregar ppt "Realidade Virtual Aula 10"

Apresentações semelhantes


Anúncios Google