在安装小觅相机的时候因为ROS与opencv版本不兼容的原因导致各种莫名其妙的错误。

安装方式

按照相机技术手册,SDK在linux下共有三种安装方式,ppa安装,源码编译安装,ROS安装。注意不要用ppa安装,用ppa安装会导致ROS无法安装。

源码安装

多版本opencv共存

在源码安装时注意opencv要安装在/usr/local下,否则就要设置环境变量。注意一点,为了实现opencv多版本共存,我们最好在/usr/local下创建不同文件夹存储不同版本opencv。

cd opencv-2.4.13
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2.4.13 ..
make -j$(nproc) // nproc是读取CPU的核心数量 
sudo make install

然后按照同样方法安装opecv3. 按照技术支持的说法,最好安装opencv3.4.1.
在我们下次需要调用不同版本的opencv时只需要在cmake中添加

set(OpenCV_DIR /usr/local/opencv2.4.13/share/OpenCV)
find_package(OpenCV 2.4 REQUIRED)
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/opencv2.4.13/include)
link_directories(${OpenCV_LIBRARY_DIRS} /usr/local/opencv2.4.13/lib))

SDK源码安装

在准备好opencv后我们按照技术手册进行SDK源码安装即可。在安装opencv时手册里写如果需要安装ROS(不支持4.0+),可以不用安装OpenCV/PCL, 以防兼容性问题。可是谁的电脑里还不带俩opencv呢。。总不能为了用个相机开个新虚拟机。。下面开始说下如何解决兼容问题。

ROS与OpenCV兼容问题

按照手册中ROS Wrapper安装步骤,在make ros时遇到如下问题

CMake Warning at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:33 (find_package):
  Could not find a package configuration file provided by
  "image_transport" with any of the following names:
 
    image_transportConfig.cmake
    image_transport-config.cmake

应该是package缺少依赖项,ros中$rosdep可安装pakage所缺的所有依赖项。用法如下:

$rosdep package_name

在安装好所有依赖项后又遇到了个诡异的问题

CMake Error at /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake:110 (message):
  Project 'cv_bridge' specifies '/usr/include/opencv' as an include dir, which is not found.  It does neither exist as an absolute directory nor in
  '${{prefix}}//usr/include/opencv'.

这里使用到的是ros melodic,由于当我们需要用到OpenCV时,通常都需要运用cv_bridge或者image_pipeline包来转换传输图片,而这两个包又是依赖于OpenCV 2.4.8来编译的。

所以,要解决这个问题,方法就是把cv_bridge和image_pipeline下载到本地的工作空间,并重新编译。但是因为他们基于OpenCV 2可以直接编译成功,所以在OpenCV 3下则需要相应做一些改动。 解决办法:

下载:https://github.com/ros-perception/vision_opencv 中的vision_opencv至ROS/src下。注意clone前branch一定要选择:melodic(我的ROS是melodic版本,找到自己对应的branch即可)。否则,branch与自己的ROS版本不对应时会产生如下问题

CMake Error at /usr/share/cmake-3.10/Modules/FindBoost.cmake:1947 (message):
Unable to find the requested Boost libraries.

Boost version: 1.65.1

Boost include path: /usr/include

Could not find the following Boost libraries:

      boost_python37
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.
Call Stack (most recent call first):
vision_opencv/cv_bridge/CMakeLists.txt:11 (find_package)

这些问题都解决后执行

cd <sdk> # <sdk> 是指sdk路径
make ros

即可编译成功