ORB_SLAM2安装编译测试ubuntu16.04
程序员文章站
2022-06-11 15:36:48
...
源码:
https://github.com/raulmur/ORB_SLAM2
本人ubuntu16.04系统
1.pre
C++11.
Pangolin
https://github.com/stevenlovegrove/Pangolin
之前教程:https://blog.csdn.net/qq_45539458/article/details/106411290
OpenCV
at leat 2.4.3. Tested with OpenCV 2.4.11 and OpenCV 3.2.
查看版本
pkg-config opencv --modversion
Eigen3 at least 3.1.0.
查看版本
vim /usr/local/include/eigen3/Eigen/src/Core/util
or
vim /usr/include/eigen3/Eigen/src/Core/util/Macros.h
sudo apt-get install libeigen3-dev
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
3.2.92
g20,DBoW2
查看版本
locate g2o
ros have g20,DBoW2
ros(optional)
可选
教程:
https://blog.csdn.net/qq_45539458/article/details/106456408
2.安装编译
cd ORB_SLAM2
chmod +x build.sh
vim build.sh
//delete -j
./build.sh
3.测试
14讲作业
在CMakeLists.txt 末尾加入
#生成调用 myvideo.mp4 可执行文件
add_executable(myvideo myvideo.cpp)
target_link_libraries(myvideo ${PROJECT_NAME})
#生成调用摄像头可执行文件
add_executable(myslam myslam.cpp)
target_link_libraries(myslam ${PROJECT_NAME})
将 myslam.cpp、myvideo.cpp、myslam.yaml、myvideo.mp4 放在
ORB_SLAM2/目录下。
myslam.yaml and myvideo.yaml :
%YAML:1.0
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 500.0
Camera.fy: 500.0
Camera.cx: 320.0
Camera.cy: 180.0
Camera.k1: 0
Camera.k2: 0
Camera.p1: 0
Camera.p2: 0
Camera.k3: 0
# Camera frames per second
Camera.fps: 30.0
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 0
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 2000
# ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2
# ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8
# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7
#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize: 2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500
myslam.cpp:
#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 = "./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;
}
myvideo.cpp:
#include <opencv2/opencv.hpp>
// ORB-SLAM的系统接口
#include "System.h"
#include <string>
#include <chrono> // for time stamp
#include <iostream>
using namespace std;
// 参数文件与字典文件
// 如果你系统上的路径不同,请修改它
string parameterFile = "./myvideo.yaml";
string vocFile = "./Vocabulary/ORBvoc.txt";
// 视频文件
string videoFile = "./myvideo.mp4";
int main(int argc, char **argv) {
// 声明 ORB-SLAM2 系统
ORB_SLAM2::System SLAM(vocFile, parameterFile, ORB_SLAM2::System::MONOCULAR, true);
// 获取视频图像
cv::VideoCapture cap(videoFile); // change to 1 if you want to use USB camera.
// 记录系统时间
auto start = chrono::system_clock::now();
while (1) {
cv::Mat frame;
cap >> frame; // 读取相机数据
if ( frame.data == nullptr )
break;
// rescale because image is too large
cv::Mat frame_resized;
cv::resize(frame, frame_resized, cv::Size(640,360));
auto now = chrono::system_clock::now();
auto timestamp = chrono::duration_cast<chrono::milliseconds>(now - start);
SLAM.TrackMonocular(frame_resized, double(timestamp.count())/1000.0);
cv::waitKey(30);
}
SLAM.Shutdown();
return 0;
}
mkdir abuild
cd abuild
cmake ../
make
将 ~/ORB_SLAM2/Examples/Monocular 里 生 成 的
myslam 复制到~/ORB_SLAM2
./myslam
./myslam
上一篇: 一次性压缩Sqlserver2005中所有库日志的存储过程
下一篇: 友好时间显示函数
推荐阅读
-
Ubuntu 16系统中GCC 9.2编译器安装方法及C++17标准测试示例
-
ubuntu16.04编译安装opencv3.4.6
-
[环境配置]Ubuntu16.04下编译安装gcc6.3.0
-
ubuntu16.04 安装交叉编译工具aarch64-linux-gnu-gcc/g++
-
ubuntu16.04 cuda8.0源码编译安装mxnet
-
Ubuntu16.04 FFMPEG 编译与安装
-
Ubuntu下实时Linux内核的编译安装(PREEMPT_RT)以及测试
-
编译一个抢占式内核 安装 cyclictest 测试内核实时性(ubuntu / centos)
-
天猫精灵连接蓝牙摸索2-TG7100B安装好LINUX编译环境后如何下载程序及测试效果
-
ubuntu16.04 安装交叉编译工具aarch64-linux-gnu-gcc/g++