![ad6f24e4d8c4bd09730e6bc4efcf40e7.png](https://i-blog.csdnimg.cn/blog_migrate/79d4e56d1fe62ddc6085ef1b69dc03e9.jpeg)
运行截图如下
![b7f023ca052bad5d25e18e08f319f1a4.png](https://i-blog.csdnimg.cn/blog_migrate/8a34e19512fc4595c85d23c012b4b8ef.jpeg)
![b50c0ca426e12b4c46a53b3509d91887.png](https://i-blog.csdnimg.cn/blog_migrate/adb3ba3bca8d2ab1eb4dd68db4e3e49b.jpeg)
目录文件夹如下
![1275a3c9be293b5bd039b3070d682e70.png](https://i-blog.csdnimg.cn/blog_migrate/252b8dcf0f7dc9067848bb10f8912914.png)
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
set(OpenCV_DIR "/home/robin/program/opencv-3.4.3/build")
PROJECT(MYSLAM)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
FIND_PACKAGE(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(
"/home/robin/proj/slam/ORB_SLAM2/Thirdparty/DBoW2/DBoW2"
"/home/robin/proj/slam/ORB_SLAM2"
"/usr/include/eigen3"
"/home/robin/proj/slam/ORB_SLAM2/include"
)
MESSAGE(STATUS "Linking OPENCV Libn" ${OpenCV_LIBS})
ADD_EXECUTABLE(myslam myslam.cpp)
TARGET_LINK_LIBRARIES(myslam
${OpenCV_LIBS}
-lGL -lGLEW
/usr/local/lib/libpangolin.so
/home/robin/proj/slam/ORB_SLAM2/lib/libORB_SLAM2.so
/home/robin/proj/slam/ORB_SLAM2/Thirdparty/DBoW2/lib/libDBoW2.so
/home/robin/proj/slam/ORB_SLAM2/Thirdparty/g2o/lib/libg2o.so
/home/robin/.conda/envs/cv2/lib/libpcre.so.1
)
// 该文件将打开你电脑的摄像头,并将图像传递给ORB-SLAM2进行定位
// 需要opencv
#include <opencv2/opencv.hpp>
// ORB-SLAM的系统接口
#include "System.h"
#include <string>
#include <chrono> // for time stamp
#include <iostream>
using namespace std;
// 参数文件与字典文件
// 如果你系统上的路径不同,请修改它
string parameterFile = "./myslam.yaml";
string vocFile = "/home/robin/proj/slam/ORB_SLAM2/Vocabulary/ORBvoc.txt";
int main(int argc, char **argv) {
// 声明 ORB-SLAM2 系统
ORB_SLAM2::System SLAM(vocFile, parameterFile, ORB_SLAM2::System::MONOCULAR, true);
// 获取相机图像代码
cv::VideoCapture cap(0); // change to 1 if you want to use USB camera.
// 分辨率设为640x480
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
// 记录系统时间
auto start = chrono::system_clock::now();
while (1) {
cv::Mat frame;
cap >> frame; // 读取相机数据
auto now = chrono::system_clock::now();
auto timestamp = chrono::duration_cast<chrono::milliseconds>(now - start);
SLAM.TrackMonocular(frame, double(timestamp.count())/1000.0);
}
return 0;
}