zoukankan      html  css  js  c++  java
  • Ubuntu 16.04 install CloudCompare

    One single command should work [1]

    snap install cloudcompare
    

    But error occurs:

    error: cannot perform the following tasks:
    - Download snap "cloudcompare" (200) from channel "stable" (Get https://api.snapcraft.io/api/v1/snaps/download/SMYgr36XCuPZDbMnuOu5x4eFvcHALPyL_200.snap: dial tcp: lookup api.snapcraft.io on 127.0.1.1:53: read udp 127.0.0.1:55699->127.0.1.1:53: i/o timeout)
    

    Solved by adding sudo

    sudo snap install cloudcompare
    

    Open cloudcompare in a terminal [2]

    cloudcompare.ccViewer

    or cloudcompare.CloudCompare

    Error occurs:

    QXcbConnection: Could not connect to display :0
    Aborted (core dumped)
    

    Solved by answer [3]

    sudo snap install meshlab

    Error occurred while loading pcd file

    [Load] Can't guess file format: unhandled file extension'pcd'

    Sovled by answer [4]

    The stable version of CC can not open pcd file.

    Switch it to edge version by

    sudo snap refresh --edge cloudcompare

    NOTE: Edge verstion dosen't stable when saving .pcd files

    There is a 90° rotation between along axis x between the original point cloud and output cloud.

    Update: a solution found [5]


    So I gived up the edge version. Build and install CC from source [2]

    git clone --recursive https://github.com/cloudcompare/trunk.git
    cd trunk
    mkdir build
    cd build
    cmake ..
    make -j4
    sudo make install
    

    Launch CC ./qCC/CloudCompare

    PCD file to text file

    In this pcd2txt.cpp file (Thanks for Gordon), .pcd file can be converted to .txt file or reversally (that means .txt file can be converted to .pcd file too).

    #include <string>
    #include <iostream>
    #include <fstream>
    
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/point_cloud.h>
    
    #include <Eigen/Geometry>
    #include <Eigen/Core>
    
    void pcd2txt(pcl::PointCloud<pcl::PointXYZI>::Ptr pcdPtr)
    {
        /*------------------ output pointcloud xyz as txt ----------------*/
        /*----------------------------------------------------------------*/
        std::ofstream xyz_txt("/home/gordon/feelEnvironment/data/segByCloudCompare/raw_pointcloud/pointcloud_xyz.txt", std::ios::out); 
        for(int i = 0; i < pcdPtr->points.size(); i++)
        {
            xyz_txt << std::fixed << std::setprecision(6) << pcdPtr->points[i].x << ' ' << pcdPtr->points[i].y << ' ' << pcdPtr->points[i].z << std::endl;
        }
        xyz_txt.close();
    }
    
    
    void txt2pcd(pcl::PointCloud<pcl::PointXYZ>::Ptr pcdPtr){
        std::ifstream fin("/home/gordon/feelEnvironment/data/segByCloudCompare/ganjian.txt", std::ios::in);
        int row;
        fin >> row;
        std::cout << "row size = " << row << std::endl;
        
        double temp;
        pcl::PointXYZ point;
        for(int i = 0; i < row; i++){
            fin >> temp;
            point.x = temp;
            
            fin >> temp;
            point.y = temp;
            
            fin >> temp;
            point.z = temp;
            
            pcdPtr->points.push_back(point);
        }
        
        if(row == pcdPtr->size())
            std::cout << "Success!" << std::endl;
        
    }
    
    int main (int argc, char** argv)
    {
    //     pcd to txt
        pcl::PCDReader reader;
        pcl::PointCloud<pcl::PointXYZI>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZI>);
        
        std::string fileLocation = "/home/gordon/feelEnvironment/data/segByCloudCompare/raw_pointcloud/1574588098460847.pcd";
        reader.read(fileLocation,*cloud);
        
        std::cout << "ori_pointcloud size = "<< cloud->points.size() << std::endl;
        std::cout << "width = " << cloud->width << "; height = " << cloud->height << std::endl;
        std::cout << "sensor origin : " << cloud->sensor_origin_ << std::endl;
        std::cout << "sensor orientation : " << cloud->sensor_orientation_.coeffs() << std::endl;
        
        pcd2txt(cloud);
    
    
        // txt to pcd
        // pcl::PCDWriter writer;
        
        // pcl::PointCloud<pcl::PointXYZ>::Ptr segCloud(new pcl::PointCloud<pcl::PointXYZ>);
        // txt2pcd(segCloud);
        // segCloud->width = segCloud->size();
        // segCloud->height = 1;
        
        // writer.write("/home/gordon/feelEnvironment/data/segByCloudCompare/xyz.pcd", *segCloud);
        
    
        return 0;
    }
    

    The CMakeLists.txt looks like this

    cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
    
    project(pcd2txt)
    
    find_package(PCL 1.5 REQUIRED)
    
    include_directories(${PCL_INCLUDE_DIRS})
    link_directories(${PCL_LIBRARY_DIRS})
    add_definitions(${PCL_DEFINITIONS})
    
    add_executable(pcd2txt pcd2txt.cpp)
    target_link_libraries (pcd2txt ${PCL_LIBRARIES})
    

    NOTE: When saving .txt make sure to check number of points (seperate line)

    References:

    [1] CloudCompare - Open Source project
    [2] Ubuntu18.04 cloudcompare安装 - 写东西仪式感极强(其实拖延症晚期晚期)的大龄小白
    [3] ubuntu - QxcbConnection error - CloudCompare won't launch - Stack Overflow
    [4] Still cannot open PCD files on Linux · Issue #536 · CloudCompare/CloudCompare · GitHub
    [5 经过CloudCompare保存的点云视点改变导致的问题_旅行在明天之前昨天之后的博客-CSDN博客

  • 相关阅读:
    vue开发(一)安装
    Ubuntu18.04安装mysql
    使用.NET Framework开发IIS 7.0模块和处理程序拦截请求实现跳转
    Mysql 清空数据后,释放硬盘文件
    依赖注入
    ubuntu 上开发.netcore
    使用python获取微医数据
    Mysql查询某字段重复值并删除重复值
    使用pyinstaller 打包python程序
    堆(heap)和栈(stack)、内存泄漏(memory leak)和内存溢出
  • 原文地址:https://www.cnblogs.com/linweilin/p/11434056.html
Copyright © 2011-2022 走看看