2012-01-25 11 views
12

Estoy procesando datos de RGB y profundidad y construyendo puntos de nube que se visualizarán, actualmente uso PCL Visualizer y funciona bien. Quiero tener el visualizador en un hilo diferente (en tiempo real por lo que se volverá a dibujar el punto de turbidez mundial, probé hilos impulso pero me da un error de ejecución "VTK mesa de mal de búsqueda"Flujo de visualización de punto de nube usando PCL

Cualquiera sabe cómo visualizar corriente de ? puntos de enturbiamiento en un hilo diferente

Respuesta

7

OK, lo tengo para trabajar ahora, tal vez hice algo mal antes, aquí es cómo lo hice usando hilos impulsar y mutex

bool update; 
    boost::mutex updateModelMutex; 
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>); 

    void visualize() 
    { 
     // prepare visualizer named "viewer" 

     while (!viewer->wasStopped()) 
     { 
      viewer->spinOnce (100); 
      // Get lock on the boolean update and check if cloud was updated 
      boost::mutex::scoped_lock updateLock(updateModelMutex); 
      if(update) 
      { 
       if(!viewer->updatePointCloud(cloud, "sample cloud")) 
        viewer->addPointCloud(cloud, colorHandler, "sample cloud"); 
       update = false; 
      } 
      updateLock.unlock(); 

     } 
    } 


    int main() 
    { 
     //Start visualizer thread 
     boost::thread workerThread(visualize); 

     while(notFinishedProcessing) 
     { 
      boost::mutex::scoped_lock updateLock(updateModelMutex); 
      update = true; 
      // do processing on cloud 
      updateLock.unlock(); 

     } 
     workerThread.join(); 
    } 

ACTUALIZACIÓN:

según t su page La razón es que agregar una nube de puntos vacía al visualizador hace que las cosas se vuelvan locas, así que edité el código de arriba

+0

Hola @khaled!. Entonces, ¿el viusalizer se ejecuta en un hilo diferente y funciona bien ?. En PCLVisualizer doxy docs encontré esto: 'Esta clase NO se puede usar en múltiples hilos. ¡Solo llama a funciones de objetos de esta clase desde el mismo hilo en el que fueron creadas! Algunos métodos, p. addPointCloud, se bloqueará si se llama desde otros hilos'. Estoy realmente interesado en tener el visualizador ejecutándose en otro hilo, así que por favor. ¿Podría confirmar que su enfoque funciona? : D –

+1

sí esto realmente funciona. el documento sigue siendo correcto, debe llamar a métodos como 'addPointCloud' solo desde el hilo de la visualización no desde otro hilo. Por lo tanto, no puede llamar a 'addPointCloud' desde el método principal si su ciclo de visualización está en un hilo diferente. – Khaled

+0

¡Gracias !. Voy a intentar esto de inmediato !. –

Cuestiones relacionadas