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这个选项,就放弃了,有兴趣可以参考
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