Question

Je fais un traitement sur les données RVB et en profondeur et la construction de points cloud qui doivent être visualisés, j'utilise actuellement le visualiseur PCL et cela fonctionne bien. Je veux avoir le visualiseur dans un autre fil (en temps réel pour redessiner le point de cloud global, j'ai essayé Boost Threads mais j'obtiens une erreur d'exécution "VTK Bad Table"

Quelqu'un sait-il comment visualiser le flux de points cloud dans un autre fil?

Était-ce utile?

La solution

Ok, je l'ai fait fonctionner maintenant, peut-être que j'ai fait quelque chose de mal avant, voici comment je l'ai fait en utilisant Boost Threads et 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();  
    }

METTRE À JOUR:

Selon ce page La raison en est que l'ajout d'un nuage de points vide au visualiseur fait que les choses deviennent folles alors j'ai édité le code ci-dessus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top