欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Caffe + ROS + OpenCV + Qt creator

程序员文章站 2022-07-14 22:09:17
...

最近开始学习caffe的使用,断断续续的终于算是把相关的环境配置的合乎自己的心意了。期间遇到了很多问题,现在来总结一下希望能帮到大家。由于我并没有系统的学习过Cmake这种管理工程的方式,很多的名词来源于自己看各种博客和教程,免不了有很多基本的错误,请大家见谅。

基本介绍

Caffe:一个开源的深度学习的框架,利用它我们可以很方便的设计,训练,使用自己或他人的模型。 
ROS:机器人操作系统,在ROS框架下可以同时运行多个节点,并且各个节点之间能够互相通信。 
OpenCV:开源的计算机视觉库。 
Qt creator:我把它当成一个集成开发环境在使用。 
我是需要在ROS框架下编写程序,程序中会调用caffe和opencv这两个库,同时ubuntu下我习惯使用的IDE是qt creator。

实现方法

建立工作空间

ros使用的catkin_make命令本质和cmake命令是相同的,能用catkin_make编译的ros包也能用cmake编译。所以整个组织结构按ros的习惯进行:

  • 建立工作空间
  • 创建相应的功能包

编辑cmakelist.txt:

  1. 添加OpenCV库:
set(OpenCV_DIR /usr/share/OpenCV)
find_package(catkin REQUIRED
OpenCV
)
  • 1
  • 2
  • 3
  • 4

这里,应该是我在安装OpenCV和ROS的时候把它们关联起来了,这样执行catkin_make的时候ROS是在自己的路径下找的。同样的方法是无法找到caffe相应的头文件,库文件的。 
2. 添加caffe

 set(Caffe_DIR /home/gph/Desktop/caffe_cmake/caffe-master)
 find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
  • 1
  • 2
  • 3

整个cmakelist.txt如下:

cmake_minimum_required(VERSION 2.8.3)
project(usecaffe)

set(Caffe_DIR /home/gph/Desktop/caffe_cmake/caffe-master)
set(OpenCV_DIR /usr/share/OpenCV)

find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})

find_package(catkin REQUIRED
OpenCV
)

catkin_package(
)

include_directories(include 
    ${catkin_INCLUDE_DIRS}
    ${Caffe_INCLUDE_DIRS}
)

set(CPP_SOURCES src/usecaffe.cpp)

add_executable(usecaffe ${CPP_SOURCES})

target_link_libraries(usecaffe
    ${catkin_LIBRARIES}
    ${Caffe_LIBRARIES}
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

注意:添加caffe的语句一定要在添加OpenCV的语句之前。也就是说,find_package(Caffe)要在find_package(catkin REQUIRED)之前,否则虽然能够编译,但是qt打开时仍然显示找不到caffe的头文件。

利用QT打开:

为了使qt能找到ros相关命令,应该再能够使用ros相关命令的终端里打开qt。我的是直接打开终端,输入qtcreator &即可;之后选择open project打开编辑过的CMakelist.txt,选择相应的路径保存qt生成的文件;再run cmake,之后点击finish即可。 
Caffe + ROS + OpenCV + Qt creator

可以看到,caffe的头文件,opencv的头文件都找到了,同时也能使用caffe的命名空间caffe是不是很方便呢!