ubuntu16.04安装vtk8.2.0,opencv4.0.0+opencv_contrib-4.0.0,PCL及roskinect(一)

注:仅红色为编译通过的过程。

最终确定版本:ubuntu16.04+vtk7.1.1,opencv3.4.0+opencv_contrib-3.4.0,PCL1.8.1

参考:

VT安装参考链接:

https://blog.csdn.net/dell5200/article/details/81142951

opencv多版本安装与配置参考链接:

https://blog.csdn.net/llfjcmx/article/details/81238766

https://blog.csdn.net/zhangjunhit/article/details/85156760

pcl源码安装参考链接:

https://blog.csdn.net/sinat_28752257/article/details/79169647

rosKinect安装参考链接:(见下一节)

 


 

    在安装opencv及opencv contrib扩展库时,总是因为VTK无法make成功,于是把pcl、vtk等都删掉,按照vtk、opencv、pcl、ros等顺序再次配置slam工作环境。报错如下:

ubuntu16.04安装vtk8.2.0,opencv4.0.0+opencv_contrib-4.0.0,PCL及roskinect(一)_第1张图片

提示vtk相关的问题:invalid use of incomplete type 'class vtkTexture'等等的内容。。。完全不懂为什么!!!

   多次调试无果,决定来次安装大换血。(小白对安装编译等原理不是很懂,只是硬碰硬的去尝试,请众大神多指教讲解原因)

尝试输入了如下指令(慎用,否则roskinect需要重新装)

sudo apt-get autoremove vtk

之后VTK才再次安装成功。

一、VTK安装

版本:VTK8.2.0

在 http://www.vtk.org/download/ 下载了VTK-8.2.0库,解压到了根目录下(VTK-8.2.0);

1. 安装ccmake 和 VTK 的依赖项:

sudo apt-get install cmake-curses-gui
sudo apt-get install freeglut3-dev

2. 配置VTK :

cd VTK-8.2.0

mkdir build

cd build

ccmake .

此时会弹出窗口,

# 按照VTK tutorial要求,每设置完一项均按'c'进行一次configuration,直到所有项目设置完,
 
BUILD_SHARED_LIBS = ON   
 
BUILD_TESTING = ON    # 默认OFF,如果打开的话,编译时会由于下载测试数据所用url过旧而报错,建议OFF
 
CMAKE_BUILD_TYPE = Release    # 默认Debug运行会较慢
 
CMAKE_INSTALL_PREFIX = /usr/local    # 这里用默认就行,或者改到想要安装的位置
 
# 以下为高级设置,需先在命令行按't'才可见
VTK_FORBID_DOWNLOADS = ON    # 默认OFF,建议打开,否则编译会报错,理由同BUILD_TESTING
 
# 此时应已经出现'g' generating 的按键选项,按 'g' 即完成配置.

保存配置,退出,然后:

sudo make -j8

sudo make install

这样顺利安装好了vtk。在没卸载vtk的时候,再次安装总是提出错误,最后选择了卸载重装(也有可能与上面高级配置的选择有关)。

二、opencv及opencv_contrib安装

然后重新安装opencv,之前安装了opencv3.4.0(不包括扩展库contrib),尝试后依然是原来的错误。(若多次尝试后仍不行,则计划更换VTK版本);

pkg-config --modversion opencv

通过该指令查看当前安装的opencv版本,我这里是3.4.0;

现在想尝试安装多opencv版本(opencv3.4.0、opencv4.1.0,因为怀疑是VTK版本与opencv版本不匹配的问题,但暂时不想删掉原来的版本)。


opencv源码下载地址:https://opencv.org/releases/

opencv contrib源码下载地址:https://github.com/opencv/opencv_contrib/releases


下载好了opencv4.1.0及对应的opencv_contrib-4.1.0,分别解压,将opencv源码放到根目录下的opencv4.1文件夹,讲解压后的opencv_contrib-4.1.0放到opencv4.1文件目录下。

opencv依赖库在之前就已安装过:

sudo apt-get install build-essential libvtk5-dev  
 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev  
 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev  
 
sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev
 
sudo apt-get install pkg-config


安装好依赖库后,准备安装opencv4.1.0:

cd opencv4.1

mkdir build

cd build

sudo cmake -D WITH_VTK=ON -D VTK_DIR=/home/angel/VTK-8.2.0/build -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.1  ENABLE_CXX11=YES OPENCV_EXTRA_MODULES_PATH=/home/angel/opencv/opencv_contrib-4.1.0/modules/ ..

因为我们还安装了opencv-contrib,所以还有一个OPENCV_EXTRA_MODULES_PATH 这个变量名,后面要跟上你自己的路径名,记得修改一下。

并且根据小六老师的指导,在这里也加入了VTK  build 路径的指定:VTK_DIR= /XXX/VTK/build -D

(这部分也可以采用cmake-gui的方式,参考链接  https://blog.csdn.net/zhuhan_june/article/details/79830048  ,这里不再讲述。)

显示

configuring done

generating done

开始重要的一步尝试:

sudo make -j8

漫长的等待,期待成功,每次运行到41%左右的时候简直会慌的一批,期望不要再失败,阿弥陀佛。。。



编译成功!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

此时必须来雪饼!此时必须来棉花糖!此时必须来酸奶!此时必须要夹肉!!!!!!!!!



接下来:

sudo make install

至此,opencv4.1及opencv_contrib安装结束。但是在/usr/local/opencv4.1下仅有bin、include、lib与share文件夹,未找到pkgconfig文件目录。在cmake时,未指定生成pkgconfig文件————重装!!!!

奇怪的是,之前用cmake指令可以编译opencv_contrib(未报错),此次想要通过cmake-gui的方式,规定安装到的目录CMAKE_INSTALL_PREFIX(/usr/local/opencv4.1)、CMAKE_BUILD_TYPE 值为RELEASE、OPENCV_ENABLE_NONFREE 选中(SURF 专利问题)、勾选OPENCV_GENERATE_PKGCONFIG。点击Generate生成配置文件,OPENCV_EXTRA_MODULES_PATH处为/home/angel/opencv4.1/opencv_contrib-4.1.0/modules,再次点击Generate生成配置文件,始终报错(该问题在opencv3.4.0里就不存在,但opencv3.4.0与我目前安装的vtk8.2.0似乎不能兼容)。


大概真的是五行缺电脑,棉花糖吃早了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


 

更换opencv及contrib库版本为4.0.0,将cmake-gui的以上参数改为对应的4.0.0版本及路径,cmake过程没有出错。

新建好目录/usr/local/opencv4.0 ;
将opencv4.0与opencv_contrib-4.0.0压缩包解压,在/home/angel/opencv4.0内放置解压后的opencv4.0.0的文件,并讲解压后的文件夹opencv_contrib-4.0,0放入该文件夹(/home/angel/opencv4.0),在/home/angel/opencv4.0文件夹内新建build文件夹 。

//此次仍采取cmake-gui的方式 :

选择源文件/home/angel/opencv4.0 、/home/angel/opencv4.0/build ;
规定安装到的目录CMAKE_INSTALL_PREFIX(/usr/local/opencv4.0)、CMAKE_BUILD_TYPE 值为RELEASE、OPENCV_ENABLE_NONFREE 选中(SURF 专利问题)、勾选OPENCV_GENERATE_PKGCONFIG、勾选BUILD_opencv_world。其他不做修改,点击Generate生成配置文件;
在OPENCV_EXTRA_MODULES_PATH处设置为/home/angel/opencv4.1/opencv_contrib-4.1.0/modules,再次点击Generate生成配置文件 ;
显示configuring done;generatingdone.
//至此cmake成功。

cd ~
cd opencv4.0
cd build
sudo make -j8
sudo make install

//需等待较长的时间。

至此,opencv4.0.0与opencv_contrib-4.0.0安装完毕。检查/usr/local/opencv4.0内的文件,pkgconfig、xfeatures2d、nonfree.hpp等目前需要的文件都是齐全的。

将之前安装的opencv4.1.0等相关文件清除掉。

现在电脑上装了两个版本的opencv(3.4.0不带扩展库与4.0.0带扩展库contrib),需要做一些配置。

配置opencv环境变量
1、安装成功后还需要设置opencv的环境变量。打开文件:
 

sudo gedit /etc/ld.so.conf.d/opencv.conf

2、将以下内容添加到最后:

/usr/local/opencv4/lib

3、接下来配置动态库

sudo ldconfig

4、更改环境变量

sudo gedit /etc/bash.bashrc

在文件后添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv4.0/lib/pkgconfig 
export PKG_CONFIG_PATH=/usr/local/opencv4.0/lib

保存之后,source一下(不进行source也可以,重新开一个终端):

source  /etc/bash.bashrc

查看opencv的版本没有变化:

pkg-config --modversion opencv

默认版本依然是3.4.0,没有什么变化,但应该没有影响。

下面尝试代码,看头文件能否找到。

当需要使用opencv4.0.0时,在工程文件下的CMakeLists.txt中加入下面几行:

set(OpenCV_DIR /usr/local/opencv4.0/share/OpenCV4)#使用opencv3.4.0时该句去掉
find_package(OpenCV 4.0 REQUIRED)  #默认是find_package(OpenCV REQUIRED)
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} 
"/usr/local/opencv4.0/include/opencv4"  )#使用opencv3.4.0时该句去掉

用该方法即可实现opencv版本的切换使用,并可使用nonfree等头文件,进行SURF/SIFT的使用。

可以愉快的继续处理视觉里程计代码了。



因为卸载了PCL、ros等,现在开始重新配置安装。

三、PCL源码安装

按照书上的指令,这种ppa安装方式并不适合Ubuntu16.04的系统,需采用源码安装。

之前下下载好了PCL:源码在https://github.com/PointCloudLibrary/pcl.git网页下载,然后解压到Home目录
再按照http://pointclouds.org/documentation/tutorials/compiling_pcl_posix.php上步骤操作,
如下:

位置是/home/angel/pcl

yilaikucankao:

 https://blog.csdn.net/lilywri823/article/details/86583269

则:

cd pcl
mkdir build
cd build
cmake ..
make -j4
sudo make -j4 install

至此安装完成,可以用第五讲拼接点云代码测试,也可以用网络上的这段代码测试:

//pcl_test.cpp
#include 
#include 
#include 
#include 
#include 
#include 

 
 
int main(int argc, char **argv)
{
    std::cout << "Test PCL !!!" << std::endl;
    
    pcl::PointCloud::Ptr point_cloud_ptr (new pcl::PointCloud);
    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(r) << 16 |
		static_cast(g) << 8 | static_cast(b));
	point.rgb = *reinterpret_cast(&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_text)

FIND_PACKAGE( PCL REQUIRED COMPOMENT common io visualization)

INCLUDE_DIRECTORIES(${PCL_INCLUDE_DIRS})


LINK_DIRECTORIES(${PCL_LIBRARY_DIRS})
LINK_DIRECTORIES(/usr/local/include/pcl-1.9/)
#INCLUDE_DIRECTORIES( "/home/angel/pcl/"  "/home/angel/pcl/")



ADD_DEFINITIONS(${PCL_DEFINITIONS})
 
ADD_EXECUTABLE(pcl_test pcl_text.cpp)
 
TARGET_LINK_LIBRARIES(pcl_test ${PCL_LIBRARIES})
 
INSTALL(TARGETS pcl_test RUNTIME DESTINATION bin)

若成功,则PCL编译成功。



四、ROS编译安装

目前主要用到Realsense 所需的ros wrapper 与lego-loam代码所需的ros环境。相关内容见下一篇内容。

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

你可能感兴趣的:(学习,SLAM)