ORB_SLAM2的SLAM.Shutdown()是如何结束所有进程和终止SLAM过程的?
程序员文章站
2024-03-26 12:54:29
...
源码解读
SLAM.Shutdown(); // 这是RGDB数据Examples里面声明的SLAM对象的Shutdown()函数;
void System::Shutdown() // 看一下函数的具体实现
{
mpLocalMapper->RequestFinish(); // 对局部建图线程发送终止请求
mpLoopCloser->RequestFinish(); // 对回环检测线程发送终止请求
if(mpViewer) // 如果开启了可视化窗口
{
mpViewer->RequestFinish(); // 向可视化窗口发送终止请求
while(!mpViewer->isFinished()) // 判断视化窗口是否关闭,如果没有关闭就睡眠等待5000个时间单位
usleep(5000);
}
// Wait until all thread have effectively stopped
// mpLoopCloser->isRunningGBA() 在后端回环纠正的时候调用,查看当前是否已经有一个全局优化的线程在进行
while(!mpLocalMapper->isFinished() || !mpLoopCloser->isFinished() || mpLoopCloser->isRunningGBA())
{
usleep(5000); // 如果正在运行就睡眠等待5000个时间单位
}
if(mpViewer)
pangolin::BindToContext("ORB-SLAM2: Map Viewer"); // 设置可视化窗口上方的标题,详情见主图。
}