版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16481211/article/details/83542794
RGBD跟踪方法中可以获得的数据为彩图,深度图,时间戳。
step1
在ORBSLAM2中运行模式有两种,一种是仅进行跟踪,一种是局部建图和跟踪模式。
step2
接着会检查系统是否复位。
{
unique_lock<mutex> lock(mMutexReset); //使用mMutexReset锁
if(mbReset)
{
mpTracker->Reset();
mbReset = false;
}
}
这里用到了std::unique_lock为锁管理模板类。
std::unique_lock对象以独占所有权的方式(unique owership)管理mutex对象的上锁和解锁操作,即在unique_lock对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而unique_lock的生命周期结束之后,它所管理的锁对象会被解锁。
我们可以看到这段代码被包含在了花括号内,说明所管理的锁对象只在这个生命周期内有效。
step3
根据当前获得的图像计算相机的变换矩阵T,追踪线程基础
cv::Mat Tcw = mpTracker->GrabImageRGBD(im,depthmap,timestamp);
step4
把当前追踪的状态赋值给mTrackingState
把当前帧的地图点的指针赋值给system的地图点当中。
把当前帧的追踪线程中的关键点的指针赋值给system的关键点当中。
step5
最后返回Tcw。