Realidade Virtual Aula 10

Document Sample
Realidade Virtual Aula 10 Powered By Docstoc
					Realidade Virtual
    Aula 10
  Remis Balaniuk
         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).
     Arquitetura de um sistema de
              RV háptico      Geometria
                               -scanners
                                                               -ultrasom
                                                               -Visual Man
                                 imagens   forças             Física
 -Elementos Finitos
                                                               -elasticidade
 -Massa-mola                                                   -dureza
 -LEM                                                          -densidade
                          30Hz        1KHz
                                                               -deformações


     Método de               Display       Display       Modelo
     Simulação               gráfico       háptico       (orgãos)


  Sólido                       Simulação                        Sólido
Embasamento                   em tempo real                   Embasamento
  físico                                                        médico
                      Sólido embasamento computacional
        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.
       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.
       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
                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

                       ?
       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.
                                Proxy
• 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.
             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()
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);
                 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.
                 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);
              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.
                  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();
              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.
          Haptics no Chai
• Note que a adição de haptics numa
  aplicação Chai consiste basicamente em
  adicionar os métodos
  ToggleHapticsButtonClick(TObjec
  t *Sender) e HapticLoop()ao seu
  main, não exigindo nenhum outro esforço
  de implementação.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:28
posted:1/10/2012
language:Portuguese
pages:17