[Part 3] 在Ubuntu 16.04源码编译PCL 1.8.1支持VTK和QT

本文首发于个人博客https://kezunlin.me/post/137aa5fc/,欢迎阅读!

Part-3: Install and Configure PCL 1.8.1 with vtk qt support on Ubuntu 16.04 from source

Series

Guide

  • qt: 5.7.0
  • qmake: 3.0
  • qtcreator: 3.5.1
  • vtk: 8.1.0 (source)
  • pcl :1.8.1 (source)

Setup Prerequisites

 sudo apt-get update
 sudo apt-get install git build-essential linux-libc-dev
 sudo apt-get install cmake cmake-gui
 sudo apt-get install libusb-dev libudev-dev
 sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 

 sudo apt-get install libpcap-dev
 sudo apt-get install libflann1.8 libflann-dev
 sudo apt-get install libeigen3-dev
 sudo apt-get install libopenni2-dev
 sudo apt-get install libqhull7 libqhull-dev 

 sudo apt-get install freeglut3-dev pkg-config
 sudo apt-get install libxmu-dev libxi-dev
 sudo apt-get install mono-complete
 sudo apt-get install openjdk-8-jdk openjdk-8-jre

dropped

 sudo apt-get install qt-sdk
 sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
 sudo apt-get install vtk6 libvtk6-dev libvtk6-qt-dev
 

Notice for vtk version.

metslib

for cmake error:

no metslib found.

fix by

wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
tar xzvf metslib-0.5.3.tgz
cd metslib-0.5.3
./configure
make
sudo make install

glxinfo

install

sudo apt-get install mesa-utils
glxinfo 

possible error

X Error of failed request:  BadRequest (invalid request code or no such operation)
Major opcode of failed request:  154 (GLX)
Minor opcode of failed request:  34 ()
Serial number of failed request:  34
Current serial number in output stream:  33

fix,make sure NVIDIA drivers are installed successfully and no conflict.

check display OpenGL info

$ glxinfo | grep OpenGL

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 1060/PCIe/SSE2
OpenGL core profile version string: 4.5.0 NVIDIA 384.90
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.5.0 NVIDIA 384.90
OpenGL shading language version string: 4.50 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 384.90
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

It means we use OpenGL version 4.5.0 for NVIDIA display.

Or by nvidia-settings, NVIDIA X Server Settings--> X Screen 0 --> OpenGL/GLX Information.

compile

wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.8.1.tar.gz

 cd pcl
 mkdir build
 cd build
 cmake-gui ..
 

with options

 QT_USE_FILE /home/kezunlin/program/pcl-1.8.1/build/use-qt5.cmake

 VTK_DIR  /usr/local/lib/cmake/vtk-8.1

 CMAKE_BUILD_TYPE       Release
 CMAKE_CONFIGURATION_TYPES Release
 CMAKE_INSTALL_PREFIX  /usr/local

 PCL_SHARED_LIBS       ON
 PCL_QT_VERSION        5
 PCL_ENABLE_SSE        ON

 Build_visualization ON
 Build_apps ON
 Build_examples OFF # error may occur

Using CPU native flags for SSE optimization: -march=native

make and install

 # it may take several minutes, wait ...
 make -j8
 sudo make -j8 install

cmake install to /usr/local/bin, /usr/local/lib/, /usr/local/include/pcl-1.8
PCL_DIR will be /usr/local/share/pcl-1.8

error for example

/home/kezunlin/program/pcl-1.8.1/examples/segmentation/example_cpc_segmentation.cpp:493:17: error: ‘class vtkUnsignedCharArray’ has no member named ‘InsertNextTupleValue’
         colors->InsertNextTupleValue (color);

so cmake with options

Build_examples OFF

Test pcl_viewer

test pcl_viewer

/usr/local/bin/pcl_viewer ~/program/pcl-1.8.1/test/car6.pcd

Success.

Tips: screen snapshot by gnome-screenshot -a.

Cloud Viewer

cloud_viewer.cpp

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>

int user_data;

void
viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
    viewer.setBackgroundColor (1.0, 0.5, 1.0);
    pcl::PointXYZ o;
    o.x = 1.0;
    o.y = 0;
    o.z = 0;
    viewer.addSphere (o, 0.25, "sphere", 0);
    std::cout << "i only run once" << std::endl;

}

void
viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape ("text", 0);
    viewer.addText (ss.str(), 200, 300, "text", 0);

    //FIXME: possible race condition here:
    user_data++;
}

int
main ()
{
    // car6 x y z
    // colored_cloud x y z rbga
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
    pcl::io::loadPCDFile ("colored_cloud.pcd", *cloud);

    pcl::visualization::CloudViewer viewer("Cloud Viewer");

    //blocks until the cloud is actually rendered
    viewer.showCloud(cloud);

    //use the following functions to get access to the underlying more advanced/powerful
    //PCLVisualizer

    //This will only get called once
    viewer.runOnVisualizationThreadOnce (viewerOneOff);

    //This will get called once per visualization iteration
    viewer.runOnVisualizationThread (viewerPsycho);
    while (!viewer.wasStopped ())
    {
    //you can also do cool processing here
    //FIXME: Note that this is running in a separate thread from viewerPsycho
    //and you should guard against race conditions yourself...
    user_data++;
    }
    return 0;
}

/*
http://pointclouds.org/documentation/tutorials/cloud_viewer.php
http://pointclouds.org/documentation/tutorials/pcl_visualizer.php
http://docs.pointclouds.org/1.7.0/structpcl_1_1_point_x_y_z_r_g_b.html
*/

CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(cloud_viewer)

# set bin folder
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

find_package(PCL 1.8.1 REQUIRED)

#message( [***] ${PCL_INCLUDE_DIRS})
#message( [***] ${PCL_LIBRARY_DIRS})
#message( [***] ${PCL_DEFINITIONS})
#message( [***] ${PCL_LIBRARIES})

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})

compile

mkdir build
cd build
cmake ..
make

run demo

bin folder

$ tree bin/

bin/
├── cloud_viewer
└── colored_cloud.pcd

0 directories, 2 files

run demo

./cloud_viewer

Code Example

Pcd write

see Part-4: Install and Configure PCL 1.8.1 with vtk qt support on windows 10 from source

Reference

for windows

History

  • 20180105: created.
  • 20180227: rewrite pcl compile part.

Copyright

原文地址:https://www.cnblogs.com/kezunlin/p/11835236.html

时间: 2024-08-09 02:06:31

[Part 3] 在Ubuntu 16.04源码编译PCL 1.8.1支持VTK和QT的相关文章

ubuntu 16.04源码编译和配置caffe详细教程 | Install and Configure Caffe on ubuntu 16.04

本文首发于个人博客https://kezunlin.me/post/b90033a9/,欢迎阅读! Install and Configure Caffe on ubuntu 16.04 Series Part 1: Install and Configure Caffe on windows 10 Part 2: Install and Configure Caffe on ubuntu 16.04 Guide requirements: NVIDIA driver 396.54 CUDA 8

Ubuntu 16.04 源码编译安装PHP7

一.下载PHP7的最新版源码 php7.0.9  下载地址 http://php.net/get/php-7.0.9.tar.gz/from/a/mirror 二.解压 tar -zxf /tmp/php-7.0.9.tar.gz 三.安装相关依赖库 sudo apt-get update sudo apt-get install libxml2-dev #安装gcc sudo apt-get install build-essential sudo apt-get install openss

[环境配置]Ubuntu 16.04 源码编译安装OpenCV-3.2.0+OpenCV_contrib-3.2.0及产生的问题

1.OpenCV-3.2.0+OpenCV_contrib-3.2.0编译安装过程 1)下载官方要求的依赖包 GCC 4.4.x or later CMake 2.6 or higher Git GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI pkg-config Python 2.6 or later and Numpy 1.5 or later with developer packages (pytho

ubuntu 14.04 源码编译postgresql

环境 ubuntu 14.04 桌面版 postgresql 源码下载链接,本教程是使用postgresql 9.3.4 进行编译的 http://www.postgresql.org/ftp/source/ 首先我们需要给ubuntu 安装几个包,因为 postgresql 编译时依赖 install libreadline > apt-get install libreadline6 libreadline6-dev install zlib > apt-get install zlib1

[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程

本文转载自:[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历.先上图,Ubuntu上编译完后成功运行模拟器,如图: 2 编译环境 UbuntuKylin 16.04 LTS Android 6.0_r1 Open JDK 7 3 准备工作 (1) 下载android 6.0源码.

工程问题--ubuntu 14.04/16.04源码安装catvehicle

ubuntu 14.04/16.04源码安装catvehicle 系统环境: 1. Ubuntu 14.04 + ROS Indigo 或者 Ubuntu 16.04 + ROS kinetic(主要) 2. Gazebo模型已经下载完成. 未下载的可以参考:https://blog.csdn.net/qq_40213457/article/details/81021562 中的方法2. 安装步骤: 1. 建立工作空间: 1 cd ~ 2 mkdir -p catvehicle_ws/src 3

工程问题--ubuntu16.04源码编译RGBD_SLAM V2

(失败)ubuntu16.04源码编译RGBD_SLAM V2 这几天一直在Ubuntu16.04上安装RGBD_SLAM V2, 但遇到两个比较主要的问题.查过很多方案,都没能解决. 留下这份记录,算是对这几天的总结 一. ubuntu16.04安装RGBD_SLAM V2的教程 这类教程有很多.但是我还是贴一个教程的链接. 请先将教程全部看完再安装(因为g2o是有特定版本要求的) ubuntu 16.04 安装 RGBD_SLAM V2教程飞机票: https://blog.csdn.net

Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 (转)

1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历.先上图,Ubuntu上编译完后成功运行模拟器,如图: 2 编译环境 UbuntuKylin 16.04 LTS Android 6.0_r1 Open JDK 7 3 准备工作 (1) 下载Android 6.0源码. Androdi 6.0源码下载地址: http://pan.baidu.com/s/1o6N86a2 感谢下面这位博主上传

在Ubuntu中从源码编译TensorFlow

这里展示从源码编译得TensorFlow的过程. 原版教程在github上https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md#installing-from-sources 首先是安装构建工具Bazel(http://www.bazel.io/docs/install.html#install-on-ubuntu) Install on Ubuntu Insta