编译运行ORB-SLAM 2并跑通自己的数据(二)

最近在做SLAM相关的项目,由于使用的ubuntu for ROS虚拟机无法使用摄像头的缘故,因此没有使用实时的摄像头建模,而是先拍摄视频,转化成图片数据后,再用SLAM进行建模。

运行环境:ubuntu 14.04 for ROS-indigo

首先是ORB-SLAM2的安装与编译:

可参考:编译运行ORB-SLAM 2并跑通自己的数据(一)

其次是准备数据:

(1)、拍摄视频并转化为图片:

# coding:utf-8
import os
import cv2


def getName(num):
    if num <10:
        strRes = '0000' + str(num)
    elif num <100:
        strRes = '000' + str(num)
    elif num <1000:
        strRes = '00' + str(num)
    elif num < 10000:
        strRes = '0' + str(num)
    return strRes


cap = cv2.VideoCapture('test2.mp4')
# 获得码率及尺寸
fps = cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 读帧
success, frame = cap.read()
idx = 1
while cap.isOpened:
    cv2.imwrite('rgb/' + getName(idx) + '.png', frame)
    success, frame = cap.read()  # 获取下一帧
    idx = idx + 1
    cv2.imshow('frame', frame)
    cv2.waitKey(100)

(2)、准备索引目录文件:

import os

def getName(num):
    if num <10:
        strRes = '0000' + str(num)
    elif num <100:
        strRes = '000' + str(num)
    elif num <1000:
        strRes = '00' + str(num)
    elif num < 10000:
        strRes = '0' + str(num)
    return strRes

file_object = open('rgb.txt','w')
Ostr = ''
num = len(os.listdir('rgb'))
for i in range(1,num+1):
    name = getName(i)
    Ostr = Ostr + name + ' rgb/' + name + '.png\n'
file_object.writelines(Ostr)
file_object.close()

(3)、生成自己的参数配置文件Settings.yaml。复制TUM1.yaml,并修改参数即可。

编译运行ORB-SLAM 2并跑通自己的数据(二)_第1张图片

编译运行ORB-SLAM 2并跑通自己的数据(二)_第2张图片

4、将rgb图片数据和索引文件rgb.txt放到src目录下新建的一个目录下:

编译运行ORB-SLAM 2并跑通自己的数据(二)_第3张图片

5、cd到ORB-SLAM2所在的目录并运行如下命令即可:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/Settings.yaml /home/exbot/catkin_ws/src/data

运行结果由于需要放到论文里,暂时不方便给出。

 

 

 

你可能感兴趣的:(SLAM)