ORB-SLAM3 Pinhole.cpp相关代码理解与分析
2021SC@SDUSC
前言
一、Pinhole相机模型
Pinhole相机模型类是集成于GeometricCamera类,所以一些成员变量也直接继承
成员变量包括:mvParameters就是存放成像模型参数的vector。mnId用于指定当前对象的ID,mnType则是用于说明成像模型的类型。
Pinhole.h文件中的构造函数中主要就是设置了相机参数vector的长度、ID以及成像类型。
Pinhole类中重载了>>运算符,可以方便传入相机的参数。
以下是一些核心函数:
cv::Mat Pinhole::SkewSymmetricMatrix(const cv::Mat &v)
//将传入的相机参数转换成相机内参矩阵
Eigen::Vector2d Pinhole::project(const Eigen::Vector3d &v3D)
cv::Mat Pinhole::projectMat(const cv::Point3f &p3D)
//上面两个函数针对不同输入数据进行了重载
cv::Point3f Pinhole::unproject(const cv::Point2f &p2D)
cv::Mat Pinhole::unprojectMat(const cv::Point2f &p2D)
//将2D转化为3D的函数
二、相机模型建立
在ORB-SLAM3系统中,通过Tracking的构造函数加载相机模型参数。除了加载相机模型参数,也加载了ORB参数和IMU参数。对应编写了ParseCamParamFile()、ParseORBParamFile()、ParseIMUParamFile()函数。
对于PinHole模型,分别从配置文件中读取相机的内参(fx,fy,cx,cy)以及畸变参数(k1,k2,p1,p2,k3),对于所有的内参,构造了临时vector变量vCamCalib用于存放。对于所有的畸变参数,都赋给了Tracking的Mat成员变量mDistCoef。在加载完所有参数以后,我们利用传入的内参新建一个Pinhole相机模型对象并将其赋给Tracking的成员变量mpCamera,再将其添加到地图集mpAtlas中。