欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ORB_SLAM2的SLAM.Shutdown()是如何结束所有进程和终止SLAM过程的?

程序员文章站 2024-03-26 12:54:29
...

ORB_SLAM2的SLAM.Shutdown()是如何结束所有进程和终止SLAM过程的?
源码解读

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"); // 设置可视化窗口上方的标题,详情见主图。

}

相关标签: ORB_SLAM2源码解读