ubuntu16.04 配置qt5.9+VTK5.10+pcl1.7 (orbslam_semantic_nav_ros依赖库1)

0.前言

vtk 5是qtMRwangmaomao/semantic_slam_nav_ros要求版本。重装ubuntu16.04、下谷歌、换源(阿里)之后第一件事就是装vtk 。之前试过sudo apt install libvtk5-dev ,当时可以,但后来装pcl出现了问题,回头发现vtk5不见了…可能是装pcl解决依赖项时的一些操作把vtk5弄没了,最后甚至又重装系统。

1.卸载自带的qt(慎重)

参考
https://blog.csdn.net/weixin_40512640/article/details/89791886

	sudo apt-get autoremove --purge libqt* 

2.安装依赖1

sudo apt-get update
sudo apt-get install libboost-all-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui 
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev 
sudo apt-get install libqhull* libgtest-dev 
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libxt-dev
sudo apt-get install freeglut3-dev pkg-config 
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 
sudo apt-get install mono-complete
//x11
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
//OpenGL
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
//安装OpenNI、OpenNI2
sudo apt-get install libopenni-dev   
sudo apt-get install libopenni2-dev  

huoze

sudo apt-get install libboost-all-dev libeigen3-dev libflann1.8 libflann-dev git build-essential linux-libc-dev cmake cmake-gui  libusb-1.0-0-dev libusb-dev libudev-dev  libqhull* libgtest-dev  libgl1-mesa-dev libxt-dev freeglut3-dev pkg-config  libxmu-dev libxi-dev  mpi-default-dev openmpi-bin openmpi-common mono-complete libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev build-essential libgl1-mesa-dev libglu1-mesa-dev libopenni-dev    libopenni2-dev  

3.安装依赖2——qt5

据说qt要选择安装qt5.5版本,qt5.6版本以后,qt将QWebKit模块改成了QWebEngine,在VTK库和PCL库编译的时候都要用到这个模块。
但是…真的找不到5.0-5.5版本,迫不得已,下了qt/5.9/5.9.4,就是
http://download.qt.io/archive/qt/5.9/5.9.4/里的qt-opensource-linux-x64-5.9.4.run
下载步骤:
将该文件变成可执行文件:chmod +x ./qt-opensource-linux-x64-5.9.4.run
安装命令:sudo ./qt-opensource-linux-x64-5.9.4.run
然后就是图形界面的安装了,参考https://blog.csdn.net/fei_6/article/details/75283619
这里第一项,我是全选了(保险一点...)
这里第一项,我是全选了(保险一点…)

其他有兴趣可参考ubuntu16.04下qt4和qt5同时安装的切换,本文没用到。

4.cmake编译vtk

下载源码,我找的gihub。这里提醒大家,ubantu里下的慢的话可以去win10下(可以freedown软件下,或者翻出去也容易些),再拷到ubuntu里
https://github.com/Kitware/VTK/releases/tag/v5.10.1。之前找了些用cmake-gui编译的方法,但可能是因为我qt不是5.5,没有VTK_GROUP_Qt这个选项,就放弃了,有兴趣可以参考

我是这么用的:大家改改中间路径就行了,参考https://blog.csdn.net/hongbin_xu/article/details/78822169?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

mkdir build
cd build
//重点来了,关联qt5  QT版本是4,如果是QT4就改成4 
//好像直接cmake ..就可
cmake -DVTK_QT_VERSION:STRING=5   -DQT_QMAKE_EXECUTABLE:PATH=/opt/Qt5.9.4/5.9.4/gcc_64/bin/qmake     -DVTK_Group_Qt:BOOL=ON      	  -DCMAKE_PREFIX_PATH:PATH=/opt/Qt5.9.4/5.9.4/gcc_64/lib/cmake    -DBUILD_SHARED_LIBS:BOOL=ON  ~/slam/VTK-5.10.1/build
make
sudo make install

但是我make时,出错了。:error: ‘GLintptr’ has not been declared
于是再找资料,找到了这篇https://blog.csdn.net/arackethis/article/details/42248615
里面说sudo gedit /usr/local/include/GL/glxext.h
在打开的文件第479行,添加如下2句:
typedef ptrdiff_t GLsizeiptr;
typedef ptrdiff_t GLintptr;
保存,关闭。

于是我:(第二次时这步没了)

sudo find / -name GL//find GL
cd /opt/Qt5.9.4/5.9.4/Src/qtwebengine/src/3rdparty/chromium/third_party/mesa/src/include/GL
sudo gedit glxext.h//在打开的文件第479行,添加

再编译报错,再次

sudo find / -name GL//这次出现了新东西
cd /usr/include/GL
sudo gedit glxext.h//在打开的文件第479行,添加

make,成功。
sudo make install

4.cmake编译pcl1.7

下载https://github.com/PointCloudLibrary/pcl/tree/pcl-1.7.2

mkdir build
cd build
//直接cmake ..就可
cmake -DVTK_QT_VERSION:STRING=5  -DQT_QMAKE_EXECUTABLE:PATH=/opt/Qt5.9.4/5.9.4/gcc_64/bin/qmake           -DVTK_Group_Qt:BOOL=ON  -DCMAKE_PREFIX_PATH:PATH=/opt/Qt5.9.4/5.9.4/gcc_64/lib/cmake     -DBUILD_SHARED_LIBS:BOOL=ON  ~/slam/pcl-pcl-1.7.2/build
make
// sudo make -j4
sudo make install

5.测试pcl1.7

参考https://blog.csdn.net/lilywri823/article/details/86583269
pcl_test.cpp:

#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>
 
 
int main(int argc, char **argv) {
    std::cout << "Test PCL !!!" << std::endl;
    
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
    uint8_t r(255), g(15), b(15);
    for (float z(-1.0); z <= 1.0; z += 0.05)
    {
      for (float angle(0.0); angle <= 360.0; angle += 5.0)
      {
	pcl::PointXYZRGB point;
	point.x = 0.5 * cosf (pcl::deg2rad(angle));
	point.y = sinf (pcl::deg2rad(angle));
	point.z = z;
	uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
		static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
	point.rgb = *reinterpret_cast<float*>(&rgb);
	point_cloud_ptr->points.push_back (point);
      }
      if (z < 0.0)
      {
	r -= 12;
	g += 12;
      }
      else
      {
	g -= 12;
	b += 12;
      }
    }
    point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    point_cloud_ptr->height = 1;
    
    pcl::visualization::CloudViewer viewer ("test");
    viewer.showCloud(point_cloud_ptr);
    while (!viewer.wasStopped()){ };
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)
project(pcl_test)

find_package(PCL 1.2 REQUIRED)

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

add_executable(pcl_test pcl_test.cpp)

target_link_libraries (pcl_test ${PCL_LIBRARIES})

install(TARGETS pcl_test RUNTIME DESTINATION bin)

放在一个文件夹后

cmake .
make
./pcl_test

csdn资源

pcl
https://download.csdn.net/download/qq_45539458/12471092

VTK5.10
https://download.csdn.net/download/qq_45539458/12471117

qt5.9
https://download.csdn.net/download/qq_45539458/12556044


版权声明:本文为qq_45539458原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。