ORB-SLAM2玩耍笔记
人工智能吧
全部回复
仅看楼主
level 12
Pallashadow 楼主
ORB-SLAM2
https://github.com/raulmur/ORB_SLAM2
是一个西班牙帅哥弄的
Raul Mur-Artal
2016年05月18日 13点05分 1
level 12
Pallashadow 楼主
由于我对ROS太熟悉了,所以直接用了ROS Examples
需要ubuntu系统,需要先安装ROS,推荐jade
选一个好点的摄像头,我选了个120度广角的,分辨率弄成640×480
摄像头需要标定,需要在A4纸上打印黑白棋盘格,然后获取摄像头的各种参数
参考opencv教程http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
2016年05月18日 13点05分 2
看这个贴之前你需要熟悉Robotic operating system基本概念,并了解ORB特征,并了解机器视觉基本概念如光学呈像模型,摄像头标定(意味着需要线性代数基础),还需要熟悉monoslam基本原理(意味着要了解卡尔曼滤波和图优化),并且需要懂python或c++语言
2016年05月18日 13点05分
其实只照着做的话,只需要熟悉Linux,ROS和CMake就够了,其他的不用懂
2016年05月18日 13点05分
注意是GNU license,然而估计国内不会管这个
2016年05月18日 14点05分
level 12
Pallashadow 楼主
import cv2
import numpy as np
nWidthOfROI = 90
a = np.zeros((630,891))
for i in range(a.shape[0]):
for j in range(a.shape[1]):
if (i/nWidthOfROI + j/nWidthOfROI)%2:
a[i,j] = 255;
cv2.imshow("test",a)
cv2.imwrite("cal_board.jpg",a)
cv2.waitKey(0)
2016年05月18日 13点05分 3
A4纸上画格子的脚本
2016年05月18日 13点05分
python
2016年05月18日 13点05分
level 12
Pallashadow 楼主
对着一个标定纸各种角度各种拍,且遍历覆盖图像上的每个xy坐标
附送摄像头拍照脚本
import cv2
import os
camera = cv2.VideoCapture(0)
j=0
cv2.namedWindow("asdf",flags=cv2.WINDOW_NORMAL)
cv2.resizeWindow("asdf",1280,800)
while True:
j+=1
(grabbed, frame0) = camera.read()
fname = "./data/left"+str(j)+".jpg"
if os.path.isfile(fname):
j+=1
fname = "./data/left"+str(j)+".jpg"
cv2.imwrite(fname,frame0)
cv2.imshow("asdf", frame0)
key = cv2.waitKey(500) & 0xFF
for i in range(5):
camera.grab()
2016年05月18日 13点05分 4
别忘了关摄像头,容易出莫名其妙的问题
2016年05月18日 13点05分
最好找严格平面没有变形的标定板,这种并不靠谱
2016年05月18日 14点05分
按理说并不能用广角摄像头,因为lens distortion太严重,我猜的
2016年05月18日 14点05分
level 12
Pallashadow 楼主
用这个教程里的代码测量照相机的camera matrix和5个distorsion 系数,保存到一个yaml文件里,格式参考ORB_SLAM2里example里面,monoslam里面的yaml文件
2016年05月18日 13点05分 5
level 12
Pallashadow 楼主
将ORB_SLAM2的ROS package添加到ROS路径:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS
新开一个terminal 开一个roscore:
roscore
运行
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt 加你的yaml文件
2016年05月18日 13点05分 6
level 12
Pallashadow 楼主
据说能跑出这种效果
https://www.youtube.com/watch?v=8DISRmsO2YQ
2016年05月18日 13点05分 8
2016年05月18日 13点05分
level 12
Pallashadow 楼主
我现在的感受是侧向移动时超级准,但是正向移动时弱爆了
2016年05月18日 14点05分 9
什么叫侧向移动?什么叫正向移动?
2016年08月24日 07点08分
我跑ORBSLAM2的时候老是丢失,不知道是不是没有标定的缘故
2016年08月24日 07点08分
level 5
这个做什么用的
2016年06月17日 22点06分 12
level 13
路过
      失败的越多,得到的就越多。
   --来自助手版贴吧客户端
2016年06月18日 18点06分 13
level 12
mark
开始搬砖
2016年07月24日 12点07分 16
level 12
今天做的改进:由于该项目在提取特征,存储点云,以及插入关键帧时都不记录点云的颜色信息,画点云时只有两种颜色,在相机视角范围内的为红色,其它的为黑色,这样很不利于观察,看不大懂画的是什么结构,是房间的哪里。
可以通过修改MapPoint类,增加公开的成员变量,来记录特征点的颜色信息,并在插入关键帧后,在AddMapPoint前给MapPoint实例的颜色变量赋值,并在Frame类中添加一个vector来存储某一帧中所有特征点的颜色信息,需要在KeyFrame类中做类似工作。实例化Frame时要给他彩色图,因此要阻止实例化前转为彩色的操作,等到真正提取ORB特征时再灰度化。
显示是在MapViewer类中,调用opengl绘制点云,只需要在for循环里不断设置每个点的颜色就好了。这样点云看起来更像真实场景。
由于特征点往往是角点,很容易混进背景的颜色,所以效果没有想象中好,模糊后效果稍有改进,opengl背景设为黑色,颜色看起来饱和度更高。
2016年08月03日 15点08分 18
特征点的位置需要去扭曲前的,因为这才是图片上的坐标,读取出来的颜色才会错,去扭曲后的是理想成像平面上的坐标。
2016年08月03日 15点08分
@ieBugH 才不会错
2016年08月03日 15点08分
纠正。在tracking类中实例化Frame类需要保持彩色图,这样我们才能在Frame类中得到特征点的颜色,因此必须阻止tracking类中将彩色图转为灰度图的操作,留到Frame类中提取ORB特征时在转灰度图。
2016年08月04日 00点08分
请问单目的tum例子里如何把点云保存?
2017年12月17日 13点12分
1 2 尾页