(在做高博的“一起做RGB-D_SLAM”的一些问题,作为自己笔记总结,以督促自己完成并理解)
在qt下创建slam项目-hello slam:
需要在slam目录下准备好三个文件:
1、CMakeLists.txt;
2、src/CMakeLists.txt;
3、src/hello.cpp;
详细:
1、主目录下的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED( VERSION 2.8.1 ) #注意这里的CMake版本
PROJECT(slam) #工程名字
#SET(CMAKE_CXX_COMPILER "g++") #设定编译器
SET( CMAKE_BUILD_TYPE Debug ) #编译类型
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #将执行二进制文件输出到bin文件夹中
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #生成的库输出到lib文件夹中
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include ) #头文件放在include文件夹中
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src ) #增加子文件,也就是进入源码文件夹中继续构建
2、src/CMakeLists.txt
(这个是参考另一个博客来的)
CMAKE_MINIMUM_REQUIRED( VERSION 2.8.1 ) #版本号,与上一个对应的
PROJECT( slam ) #工程名
set(CMAKE_CXX_FLAGS "-std=c++11 ")
add_executable(hello hello.cpp) #生成可执行文件1
高博的教程里面是(就一行)(不是太明白,就跟高博保持一致,就用的这个)
# 增加一个可执行的二进制
ADD_EXECUTABLE( main main.cpp )
以及后面两个cpp文件时:
# 增加一个可执行的二进制
ADD_EXECUTABLE( main main.cpp )
# 增加PCL库的依赖
FIND_PACKAGE( PCL REQUIRED )
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4") # use this in Ubuntu 16.04
# 增加opencv的依赖
FIND_PACKAGE( OpenCV REQUIRED )
# 添加头文件和库文件
ADD_DEFINITIONS( ${PCL_DEFINITIONS} )
INCLUDE_DIRECTORIES( ${PCL_INCLUDE_DIRS} )
LINK_LIBRARIES( ${PCL_LIBRARY_DIRS} )
ADD_EXECUTABLE( generate_pointcloud generatePointCloud.cpp )
TARGET_LINK_LIBRARIES( generate_pointcloud ${OpenCV_LIBS}
${PCL_LIBRARIES} )
3、src/hello.cpp
#include <iostream>
int main(int argc, char** argv)
{
std::cout<<"hello slam"<<std::endl;
return 0;
}
然后就是把这个slam包导入qt了:打开qt -> open project -> 选择该项目的src/CMakeLists.txt,就ok了。
添加新的cpp文件
先在src/CMakeLists.txt下添加“生成可执行文件”
add_executable(generatePointCloud generatePointCloud.cpp) #生成可执行文件2
再在qt里面,右上角,选File -> new file or project -> c++ ->c++ source file 输入name:” generatePointCloud.cpp “
一个路径问题
是我的第2个从图像到点云遇到的问题
(后面采用高博的src/CMakeLists.txt原文件,没这个问题,可以不用看)
如果在编译时,出现找不到pcl路径,一般是改为直接路径,但这里问题在于,改完后发现,该路径里包含的其他文件路径也不对,但都是pcl 库的。
所以在 按照《CMake Practice》中第六章的设置,采用INCLUDE_DIRECTORIES命令去寻找共享库的路径,src/CMakeLists.txt如下:
include_directories(/usr/include/pcl-1.7)
就可以啦
(有时候寻找库文件搜索,需要先进入一定路径下才行,一般在usr/include/下)