【学习SLAM】ORB_SLAM2 双目测试(2)

本文详细介绍了ORB_SLAM2双目系统的参数配置,包括相机标定、双目参数详解、ORB参数设置等。重点讨论了`Camera.bf`(基线乘以焦距)在不同标定文件中的转换,并提供了如何计算有效深度的公式。此外,还提到了`ThDepth`(深度阈值)的设定及其影响,以及如何调整相机的图像大小和帧率。文章还包含了如何从opencv标定文件中获取相关参数并应用于ORB_SLAM2的配置文件中。
摘要由CSDN通过智能技术生成

双目参数文件详解 (万能P2/Pr)  1 Camera.fx /fy.cx,cy ;2 Camera.bf ; 3 P2(4)/1000 ; 4 ThDepth=50/20

a. Camera.bf中的b指基线baseline(单位:米),
f是焦距fx(x轴和y轴差距不大),bf=b*f=T(1)*Camera.fx=P2(4)/1000,
和ThDepth一起决定了深度点的范围:
bf * ThDepth / fx
即大致为b * ThDepth。
基线在双目视觉中出现的比较多,
如ORB-SLAM中的双目示例中的EuRoC.yaml中的bf为47.9,ThDepth为35,fx为435.2,
则有效深度为bf * ThDepth / fx = 47.9*35/435.3=3.85米;
KITTI.yaml中的bf为387.57,ThDepth为40,fx为721.54,
则有效深度为387.57*40/721.54=21.5米。
这里的xtion的IR基线(其实也可以不这么叫)bf为40,
ThDepth为50,fx为558.34,则有效深度为3.58米(官方为3.5米)。

 

Camera.bf这个参数是个大坑,其为相机的基线×相机的焦距
orbslam的参数文件中单位是m
而opencv标定文件中的单位是mm

# stereo baseline times fx
Camera.bf: 78.9108236

-1.6275078772819168e+03* 4.8485678458503560e+02 -7.8911e+05

intrinsics.yml
M1: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 4.8485678458503560e+02, 0., 3.1984271341779277e+02, 0.,
       4.7849342106773673e+02, 2.4258677342694295e+02, 0., 0., 1. ]
————————————————

extrinsics.yml
T: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [ -1.6275078772819168e+03, -2.3257053592704903e+01,
       2.8278971161131913e+01 ]
————————————————
LEFT.P:=P1:

RIGHT.P:=P2:

RIGHT.P: !!opencv-matrix
   rows: 3
   cols: 4
   dt: d
   data: [ 3.9018919929094244e+02, 0., 3.3265590286254883e+02,-6.3519667606988060e+05, 0., 3.9018919929094244e+02, 2.3086411857604980e+02, 0., 0., 0., 1., 0. ]
__________  ,-6.3519667606988060e+05=T[1]*P2[1]=-1.6275078772819168e+03*3.9018919929094244e+02 = -6.3504e+05

------是EROC基线吧---------------

T: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [ -1.6275078772819168e+03, -2.3257053592704903e+01,
       2.8278971161131913e+01 ]
————————————————

# Close/Far threshold. Baseline times.
ThDepth: 50

 

双目相机标定和orbslam2双目参数详解

一,对标orb_slam2 的双目摄像机标定程序(广角、平角都可)
经实测,opencv sample里面自带的双目标定程序(stereo_clib.cpp),对平角相机效果较好,如果你是平角相机跳过本段,直接查看ORBSLAM2的双目配置参数,而stereo_clib.cpp对广角相机效果奇差。
故十里桃园综合了很多帖子,再根据经验给出下述双目代码(基于opencv342测试 opencv3 vs各版本下载地址: 链接: https://pan.baidu.com/s/1f5oAFqs-u15vkD5LNTcxtw 提取码: 2qj9),另用vs19跑程序时有无相应现象,应为vs19bug,在linux下实测可行:
这里要强调的是,双目切勿左右搞反,可对照opencv给出的左右图像来确定自己是否搞反。
再说明一点:请保证图像序号的连续,还要保证图像序列中没有找不到角点的图像。程序会有提示没有成功找到角点的图像序号,删除,重新对图像编号。保证图像序号的连续。图像序号从 1 开始 ,代码中的frameNumber 设置为 你图像序号最大值 +1,如十里桃园一共用58图像序列,则设为59.

先自行标定左右相机的单目畸变参数,填入下面代码中的初始化参数,楼主用的kalibr标定的单目,opencv也可以标定,这个自己解决。
说明一点,单目预标定没必要标的很精确,差不多就成,当然标的精确更好,畸变参数4,5个都可以,单目的所有预标定参数将在下面的代码中进行迭代优化。

修改你的棋盘信息 纵横角点数 还有每个格子的大小 单位mm
广角双目标定代码如下:

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"  
#include "opencv2/calib3d/calib3d.hpp"  
#include "opencv2/highgui/highgui.hpp"  
#include <vector>  
#include <string>  
#include <algorithm>  
#include <iostream>  
#include <iterator>  
#include <stdio.h>  
#include <stdlib.h>  
#include <ctype.h>   
#include <opencv2/opencv.hpp>  
#include "cv.h"  
#include <cv.hpp>  
using namespace std;
using namespace cv;                                        
const int imageWidth = 640;                             
const int imageHeight = 480;
const int boardWidth = 11;                               
//横向的角点数目  
const int boardHeight = 8;                              
//纵向的角点数据  
const int boardCorner = boardWidth * boardHeight;      
//总的角点数据  
                            
//相机标定时需要采用的图像帧数  
const int squareSize = 49.27;                              
//标定板黑白格子的大小单位mm  

const int frameNumber = 59;
//图像命名 从1 ~ 58(59-1=58)
string folder_ = "./data/";
string format_R = "R";
string format_L = "L";
//例如: R1.jpg   L58.jpg 置于工程目录的 data文件夹下,
const Size boardSi

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值