Carregar apresentação
A apresentação está carregando. Por favor, espere
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.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.