[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
- Part-1: Install and Configure Qt5 on Ubuntu 16.04
- Part-2: Install and Configure VTK 8.1.0 from source with Qt5 on Ubuntu 16.04
- Part-3: Install and Configure PCL 1.8.1 with vtk qt support on Ubuntu 16.04 from source
- Part-4: Install and Configure PCL 1.8.1 with vtk qt support on windows 10 from source
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
- Post author: kezunlin
- Post link: https://kezunlin.me/post/137aa5fc/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
相关推荐
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common