2012-01-25 14 views
12

Wykonuję pewne przetwarzanie danych RGB i głębokości oraz konstruuję punkty chmury, które mają być wizualizowane, aktualnie używam wizualizatora PCL i działa dobrze. Chcę, aby wizualizator był w innym wątku (w czasie rzeczywistym, więc przerysuje globalny punkt mętnienia, próbowałem wątków pobudzających, ale pojawia się błąd runtime "Tabela wyszukiwania niewłaściwego VTK"Strumień Wizualizacji Punktów Chmury przy użyciu PCL

Każdy wie, jak wizualizować strumień ? mętnienia w innym wątku

Odpowiedz

7

OK, mam go do pracy teraz, być może zrobiłem coś nie tak przed, oto jak to zrobiłem używając wątki Boost i 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(); 
    } 

UPDATE:

Według t jego page Powodem jest to, że dodanie pustej chmury punktów do wizualizatora powoduje, że szaleją rzeczy, więc zredagowałem kod powyżej

+0

Hi @ khaled !. Czy viusalizer działa w innym wątku i działa dobrze? W dokumentach doksliver do PCLVisalizer znalazłem to: 'tej klasy NIE można używać w wielu wątkach. Tylko wywołuj funkcje obiektów tej klasy z tego samego wątku, w którym zostały utworzone! Niektóre metody, np. addPointCloud, ulegnie awarii, jeśli zostanie wywołany z innych wątków ". Jestem naprawdę zainteresowany uruchomieniem wizualizatora w innym wątku, więc proszę. Czy możesz potwierdzić, że twoje podejście działa? : D –

+1

tak to faktycznie działa. Dokumenty nadal są poprawne, powinieneś wywoływać metody takie jak 'addPointCloud' tylko z wątku wizualizacji, a nie z innego wątku. Więc nie możesz wywołać 'addPointCloud' z głównej metody, jeśli twoja pętla wizualizacji znajduje się w innym wątku. – Khaled

+0

Dzięki !. Spróbuję tego od razu! –

Powiązane problemy