Open3d: exemplos de como usar Open3D com biblioteca PCL e ROS

Criado em 26 jun. 2018  ·  14Comentários  ·  Fonte: intel-isl/Open3D

Oi,
Gostaria de saber como usar o Open3D com a biblioteca PCL e ROS. Alguém pode ter um exemplo de como converter para ponto nuvem pcl ou malha pcl da estrutura de dados do Open3D?
Obrigado

question

Comentários muito úteis

@ ipa-mah sim, para contornar essas referências indefinidas durante a vinculação, você precisa garantir que, ao compilar o Open3D a partir do código-fonte, defina o sinalizador de compilação cmake

-DGLIBCXX_USE_CXX11_ABI=ON

por exemplo

cmake -DBUILD_EIGEN3=ON -DBUILD_GLEW=ON -DBUILD_GLFW=ON -DBUILD_JSONCPP=ON -DBUILD_PNG=ON -DGLIBCXX_USE_CXX11_ABI=ON -DPYTHON_EXECUTABLE=/usr/bin/python ..

Isso permitirá que tudo seja compilado e vinculado adequadamente em um espaço de trabalho catkin com ROS

Todos 14 comentários

O I / O atual suporta o formato .pcd, que é o formato principal usado pelo PCL.
Para mesh, tanto PCL quanto Open3D suportam .ply, que é bastante padrão.

Veja isto: http://www.open3d.org/docs/tutorial/Basic/file_io.html

Não tenho muita experiência com ROS. Esse é um problema conhecido de que o Open3D não tem interface com ROS. Estamos planejando resolver isso. Está em nosso roteiro.

obrigado

Consegui converter a nuvem de pontos escrevendo e lendo de / dev / shm, que é um arquivo armazenado na RAM. Provavelmente não é a melhor maneira, mas funciona.

void point_cloud_callback(const sensor_msgs::PointCloud2::ConstPtr& msg)
{
    auto start = std::chrono::steady_clock::now();
    pcl::PCLPointCloud2 pcl_cloud;
    pcl_conversions::toPCL(*msg, pcl_cloud);
    pcl::PLYWriter pclWrite;
    pclWrite.writeBinary("/dev/shm/point_cloud.ply", pcl_cloud);
    open3d::geometry::PointCloud pc;
    pc = *open3d::io::CreatePointCloudFromFile("/dev/shm/point_cloud.ply","ply").get();
    auto end = std::chrono::steady_clock::now();
    std::cout << "Elapsed time in nanoseconds : "
         << std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count()
         << " ns" << std::endl;
}

Essa conversão leva cerca de 244 ms no meu i7-8700 a 4,3 Ghz

@ airfield20 você construiu com sucesso ROS + open3d juntos? Sem o sinalizador -D_GLIBCXX_USE_CXX11_ABI=0 CXX nosso código usando Open3D não compilará, mas com ele nosso código usando ROS não compilará - você não encontrou esse problema?

@ finger563 Eu não os construí juntos, instalei o Open3D separadamente antes de construir meu espaço de trabalho catkin

@ airfield20 foi o que também fizemos. No entanto, se adicionarmos open3d como uma dependência a um de nossos pacotes ROS, obteremos links incompletos - certas funções como CreateVisualizerWindow( ... ) reference são símbolos indefinidos (acredito que devido à falta de compatibilidade de string imposta pelo sinalizador I Mencionado acima). Os documentos dizem para usar ${Open3D_CXX_FLAGS} que contém esse sinalizador, mas usar esse sinalizador faz com que o código ros não seja vinculado.

Deixa pra lá - nós apenas tivemos que reconstruir o Open3D e definir explicitamente esse sinalizador ao gerar arquivos de compilação com cmake - o padrão mudou esse sinalizador para 0, mas open3d funciona bem e se integra com ROS muito bem se definirmos esse sinalizador para 1.

@ finger563 como você está renderizando mensagens ros usando isso?

Temos um código que projeta uma imagem depth + rgb ( sensor_msgs/Image ) em um pointcloud e, em seguida, cria uma grade de voxel usando open3d. porque é um único nó e queríamos animação e callbacks principais, temos que criar explicitamente a janela e gerenciar o loop de eventos. Semelhante é verdade no lado C ++, que é o que estivemos trabalhando e que encontramos antes.

Também tentei instalar o Open3D com ROS há algumas semanas, mas não tive sucesso. Lembro que existem conflitos de dependências Open3D e ROS, que levam a undefined reference de funções de visualização. Então decidi remover o Open3D do ROS, escrever minhas próprias funções semelhantes às funções do Open3D

@ ipa-mah sim, para contornar essas referências indefinidas durante a vinculação, você precisa garantir que, ao compilar o Open3D a partir do código-fonte, defina o sinalizador de compilação cmake

-DGLIBCXX_USE_CXX11_ABI=ON

por exemplo

cmake -DBUILD_EIGEN3=ON -DBUILD_GLEW=ON -DBUILD_GLFW=ON -DBUILD_JSONCPP=ON -DBUILD_PNG=ON -DGLIBCXX_USE_CXX11_ABI=ON -DPYTHON_EXECUTABLE=/usr/bin/python ..

Isso permitirá que tudo seja compilado e vinculado adequadamente em um espaço de trabalho catkin com ROS

Acabamos de lançar open3d_ros para fornecer a funcionalidade de conversão de pointclouds de ROS para Open3D e vice-versa

Também tentei instalar o Open3D com ROS há algumas semanas, mas não tive sucesso. Lembro que existem conflitos de dependências Open3D e ROS, que levam a undefined reference de funções de visualização. Então decidi remover o Open3D do ROS, escrever minhas próprias funções semelhantes às funções do Open3D

Estou com o mesmo problema, você resolveu?

Estou com o mesmo problema, você resolveu?

O mesmo problema aqui.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Prakash19921206 picture Prakash19921206  ·  4Comentários

nrj127 picture nrj127  ·  4Comentários

hzxie picture hzxie  ·  4Comentários

HaiyongJiang picture HaiyongJiang  ·  3Comentários

DKandrew picture DKandrew  ·  3Comentários