PCL Kütüphanesi Octree Kodunun Çalıştırılması (Run PCL Octree Code)

Daha önceden anlatıldığı gibi PCL kütüphanesi kurulduktan sonra bir octree kodunun çalıştırılması için aşağıdaki işlemler yapılmalıdır.

  • Herhangibir klasörde bir diziinoluşturarak bu dizine gidiyoruz.
  • Burada build adında bir klasörü aşağıdaki gibi oluşturuyoruz.
mkdir build

 

  • Daha sonra oluşturulan klasörün içine cloud_viewer.cpp CMakeLists.txt ve Bu linkteki örnek pcd uzantılı pcl dataseti indirilerek atıyoruz.

CMakeLists.txt’nin içeriği

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(cloud_viewer)

find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (cloud_viewer cloud_viewer.cpp)
target_link_libraries (cloud_viewer ${PCL_LIBRARIES})

cloud_viewer.cpp dosyasının içeriği

#include <pcl/visualization/cloud_viewer.h>
#include
#include <pcl/io/io.h>
#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>io<span class="pl-k">/</span>pcd_io<span class="pl-k">.</span>h<span class="pl-k">></span>
<span class="pl-c">/////////////////////</span>
#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>point_cloud<span class="pl-k">.</span>h<span class="pl-k">></span>
#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>point_types<span class="pl-k">.</span>h<span class="pl-k">></span>
#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>io<span class="pl-k">/</span>openni_grabber<span class="pl-k">.</span>h<span class="pl-k">></span>
#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>visualization<span class="pl-k">/</span>cloud_viewer<span class="pl-k">.</span>h<span class="pl-k">></span>

#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>compression<span class="pl-k">/</span>octree_pointcloud_compression<span class="pl-k">.</span>h<span class="pl-k">></span>
#include <span class="pl-k"><</span>stdio<span class="pl-k">.</span>h<span class="pl-k">></span>
#include <span class="pl-k"><</span>sstream<span class="pl-k">></span>
#include <span class="pl-k"><</span>stdlib<span class="pl-k">.</span>h<span class="pl-k">></span>

#include <span class="pl-k"><</span>pcl<span class="pl-k">/</span>octree<span class="pl-k">/</span>octree<span class="pl-k">.</span>h<span class="pl-k">></span>
#include <span class="pl-k"><</span>vector<span class="pl-k">></span>
#include <span class="pl-k"><</span>ctime<span class="pl-k">></span>

using namespace std;
<span class="pl-k">int</span> user_data;

<span class="pl-k">void</span> viewerOneOff (pcl<span class="pl-k">::</span>visualization<span class="pl-k">::</span><span class="pl-smi">PCLVisualizer</span><span class="pl-k">&</span> viewer)
{
    viewer<span class="pl-k">.</span>setBackgroundColor (<span class="pl-c1">1.0</span>, <span class="pl-c1">0.5</span>, <span class="pl-c1">1.0</span>);
    pcl<span class="pl-k">::</span><span class="pl-smi">PointXYZ</span> o;
    o<span class="pl-k">.</span>x <span class="pl-k">=</span> <span class="pl-c1">1.0</span>;
    o<span class="pl-k">.</span>y <span class="pl-k">=</span> <span class="pl-c1">0</span>;
    o<span class="pl-k">.</span>z <span class="pl-k">=</span> <span class="pl-c1">0</span>;
    viewer<span class="pl-k">.</span>addSphere (o, <span class="pl-c1">0.25</span>, <span class="pl-s"><span class="pl-pds">"</span>sphere<span class="pl-pds">"</span></span>, <span class="pl-c1">0</span>);
    std<span class="pl-k">::</span>cout <span class="pl-k"><<</span> <span class="pl-s"><span class="pl-pds">"</span>i only run once<span class="pl-pds">"</span></span> <span class="pl-k"><<</span> std<span class="pl-k">::</span>endl;

}

<span class="pl-k">void</span> viewerPsycho (pcl<span class="pl-k">::</span>visualization<span class="pl-k">::</span><span class="pl-smi">PCLVisualizer</span><span class="pl-k">&</span> viewer)
{
    <span class="pl-k">static</span> unsigned count <span class="pl-k">=</span> <span class="pl-c1">0</span>;
    std<span class="pl-k">::</span>stringstream ss;
    ss <span class="pl-k"><<</span> <span class="pl-s"><span class="pl-pds">"</span>Once per viewer loop: <span class="pl-pds">"</span></span> <span class="pl-k"><<</span> count<span class="pl-k">++</span>;
    viewer<span class="pl-k">.</span>removeShape (<span class="pl-s"><span class="pl-pds">"</span>text<span class="pl-pds">"</span></span>, <span class="pl-c1">0</span>);
    viewer<span class="pl-k">.</span>addText (ss<span class="pl-k">.</span>str(), <span class="pl-c1">200</span>, <span class="pl-c1">300</span>, <span class="pl-s"><span class="pl-pds">"</span>text<span class="pl-pds">"</span></span>, <span class="pl-c1">0</span>);

    <span class="pl-c">//FIXME: possible race condition here:</span>
    user_data<span class="pl-k">++</span>;
}

<span class="pl-k">int</span>
main ()
{

    bool showStatistics <span class="pl-k">=</span> <span class="pl-c1">true</span>;
    pcl<span class="pl-k">::</span>io<span class="pl-k">::</span><span class="pl-k">OctreePointCloudCompression<pcl:</span><span class="pl-k">:</span><span class="pl-smi">PointXYZRGBA</span><span class="pl-k">></span><span class="pl-k">*</span> <span class="pl-smi">PointCloudEncoder</span>;
    pcl<span class="pl-k">::</span>io<span class="pl-k">::</span><span class="pl-k">OctreePointCloudCompression<pcl:</span><span class="pl-k">:</span><span class="pl-smi">PointXYZRGBA</span><span class="pl-k">></span><span class="pl-k">*</span> <span class="pl-smi">PointCloudDecoder</span>;

    pcl<span class="pl-k">::</span>io<span class="pl-k">::</span>compression_Profiles_e compressionProfile <span class="pl-k">=</span> pcl<span class="pl-k">::</span>io<span class="pl-k">::</span><span class="pl-c1">LOW_RES_OFFLINE_COMPRESSION_WITH_COLOR</span>;

    <span class="pl-c">// instantiate point cloud compression for encoding and decoding</span>
    <span class="pl-smi">PointCloudEncoder</span> <span class="pl-k">=</span> <span class="pl-k">new</span> pcl::io::<span class="pl-k">OctreePointCloudCompression<pcl:</span>:<span class="pl-smi">PointXYZRGBA</span>> (compressionProfile, showStatistics);
    <span class="pl-smi">PointCloudDecoder</span> <span class="pl-k">=</span> <span class="pl-k">new</span> pcl::io::<span class="pl-k">OctreePointCloudCompression<pcl:</span>:<span class="pl-smi">PointXYZRGBA</span>> ();

    pcl<span class="pl-k">::</span><span class="pl-k">PointCloud<pcl:</span><span class="pl-k">:</span><span class="pl-smi">PointXYZRGBA</span><span class="pl-k">></span><span class="pl-k">::</span><span class="pl-smi">Ptr</span> cloud (<span class="pl-k">new</span> pcl::PointCloud<pcl::PointXYZRGBA>);
    pcl<span class="pl-k">::</span>io<span class="pl-k">::</span>loadPCDFile (<span class="pl-s"><span class="pl-pds">"</span>/home/yapbenzet/Documents/Untitled Folder/samp23-utm-ground.pcd<span class="pl-pds">"</span></span>, <span class="pl-k">*</span>cloud);

    pcl<span class="pl-k">::</span>visualization<span class="pl-k">::</span><span class="pl-smi">CloudViewer</span> viewer(<span class="pl-s"><span class="pl-pds">"</span>Cloud Viewer<span class="pl-pds">"</span></span>);

      std<span class="pl-k">::</span>stringstream compressedData;

      pcl<span class="pl-k">::</span><span class="pl-k">PointCloud<pcl:</span><span class="pl-k">:</span><span class="pl-smi">PointXYZRGBA</span><span class="pl-k">></span><span class="pl-k">::</span><span class="pl-smi">Ptr</span> cloudOut (<span class="pl-k">new</span> pcl::<span class="pl-k">PointCloud<pcl:</span>:<span class="pl-smi">PointXYZRGBA</span>> ());

<span class="pl-c">// datayı sıkıştırmak için kullanılıyor.</span>
      <span class="pl-smi">PointCloudEncoder</span><span class="pl-k">-</span><span class="pl-k">></span>encodePointCloud (cloud, compressedData);

      <span class="pl-smi">PointCloudDecoder</span><span class="pl-k">-</span><span class="pl-k">></span>decodePointCloud (compressedData, cloudOut);

<span class="pl-c">// Octree için aşağıdaki yorum satırlarını aktif edip yukarıdaki 2 satırı yorum satırı yapmalıyız.</span>

 <span class="pl-c">/*float resolution = 128.0f;</span>

<span class="pl-c"> 	 pcl::octree::OctreePointCloudSearch<pcl::PointXYZRGBA> octree (resolution);</span>

<span class="pl-c"> 	 octree.setInputCloud (cloud);</span>
<span class="pl-c"> 	 octree.addPointsFromInputCloud ();*/</span>

viewer<span class="pl-k">.</span>showCloud (cloud);

    viewer<span class="pl-k">.</span>runOnVisualizationThreadOnce (viewerOneOff);

    viewer<span class="pl-k">.</span>runOnVisualizationThread (viewerPsycho);
    <span class="pl-k">while</span> (<span class="pl-k">!</span>viewer<span class="pl-k">.</span>wasStopped ())
    {
    	user_data<span class="pl-k">++</span>;
    }
    <span class="pl-k">return</span> <span class="pl-c1">0</span>;
}

cmake ve make işlemlerini yapıyoruz.

cmake ..
make

Son olarak oluşturulan görünüm dosyasını çalıştırıyoruz ve aşağıdaki gibi bir çıktı elde ediyoruz.

./cloud_viewer
octree