orbslam2 localMapping流程图

flowchart TB

%% ========== 1. 入口 & 初始化检测 ==========

T0["Track() 入口"]

T1{{mState == NO_IMAGES_YET?}}

T2["mState ← NOT_INITIALIZED"]

%% ========== 2. 获取地图互斥锁 ==========

LOCK["unique_lock(mpMap->mMutexMapUpdate)"]

%% ========== 3. 尚未初始化 ==========

INIT_CHK{{mState == NOT_INITIALIZED?}}

STEREO_INIT["StereoInitialization() / MonocularInitialization()"]

DRAW_INIT["mpFrameDrawer->Update(this)"]

RET_NOT_OK{{初始化后 mState != OK?}}

RET_EARLY["return (等待下一帧)"]

%% ========== 4. 系统已初始化 ==========

MAIN["-- 进入正常跟踪流程 --"]

ONLY_TRACK{{mbOnlyTracking?}}

REPLACED["CheckReplacedInLastFrame()"]

MM_EMPTY{{mVelocity.empty()?}}

TRACK_MM["TrackWithMotionModel()"]

RELOC["Relocalization()"]

BOOL_OR["bOK = bOK_MM ∥ bOK_Reloc"]

SET_REF["若缺失, mpReferenceKF → mCurrentFrame.mpReferenceKF"]

%% ========== 5. 局部地图跟踪 ==========

LOCAL_TRACK_CHK{{可调用 TrackLocalMap?}}

LOCAL_TRACK["bOK = TrackLocalMap()"]

%% ========== 6. 跟踪结果判定 ==========

SET_STATE["mState = (bOK ? OK : LOST)"]

DRAW_FRAME["mpFrameDrawer->Update(this)"]

%% ========== 7. 跟踪成功后的更新 ==========

OK_CHK{{bOK?}}

UPDATE_VEL["mVelocity ← Tcw_now × (Tcw_last)^-1"]

SET_CAMPOSE["mpMapDrawer->SetCurrentCameraPose()"]

CLEAN_VO["清空仅 VO 匹配点"]

DEL_TEMP["删除 mlpTemporalPoints"]

NEEDKF{{NeedNewKeyFrame()?}}

NEWKF["CreateNewKeyFrame()"]

%% ========== 8. 跟踪失败后的处理 ==========

LOST_CHK{{mState == LOST ∧ Map KFs ≤ 5?}}

SYS_RESET["mpSystem->Reset(); return"]

%% ========== 9. 收尾:更新 mLastFrame 等 ==========

FILL_REFKF["若仍缺失 → mCurrentFrame.mpReferenceKF = mpReferenceKF"]

SAVE_LAST["mLastFrame = Frame(mCurrentFrame)"]

STORE_POSE["记录相对位姿 / 时间戳向量"]

%% ---------- 连线 ----------

T0 --> T1

T1 -- 是 --> T2 --> LOCK

T1 -- 否 --> LOCK

LOCK --> INIT_CHK

INIT_CHK -- 是 --> STEREO_INIT --> DRAW_INIT --> RET_NOT_OK

RET_NOT_OK -- 是 --> RET_EARLY

RET_NOT_OK -- 否 --> MAIN

INIT_CHK -- 否 --> MAIN

%% ---- 正常跟踪主干 ----

MAIN --> ONLY_TRACK

ONLY_TRACK -- 否 -->|LocalMapping 开启| \

REPLACED --> MM_EMPTY

ONLY_TRACK -- 是 -->|仅跟踪模式| MM_EMPTY

MM_EMPTY -- 否 --> TRACK_MM

MM_EMPTY -- 是 --> TRACK_MM

TRACK_MM --> RELOC

RELOC --> BOOL_OR

BOOL_OR --> SET_REF

SET_REF --> LOCAL_TRACK_CHK

LOCAL_TRACK_CHK -- 可调用 --> LOCAL_TRACK --> SET_STATE

LOCAL_TRACK_CHK -- 不可调用 --> SET_STATE

SET_STATE --> DRAW_FRAME --> OK_CHK

%% ---- 跟踪成功路径 ----

OK_CHK -- 是 --> UPDATE_VEL --> SET_CAMPOSE --> CLEAN_VO --> DEL_TEMP --> NEEDKF

NEEDKF -- 是 --> NEWKF --> LOST_CHK

NEEDKF -- 否 --> LOST_CHK

%% ---- 跟踪失败路径 ----

OK_CHK -- 否 --> LOST_CHK

LOST_CHK -- 是 --> SYS_RESET

LOST_CHK -- 否 --> FILL_REFKF --> SAVE_LAST --> STORE_POSE

相关推荐
fish-man3 天前
测试流程图展示问题
linux·服务器·流程图
zzywxc78713 天前
自动化测试框架是软件测试的核心基础设施,通过预设规则和脚本自动执行测试用例,显著提高测试效率和覆盖率。
运维·人工智能·自动化·prompt·测试用例·流程图
TextIn智能文档云平台13 天前
产品无法正确解析复杂表格和流程图,有什么替代方案或优化方法?
流程图
coder_lorraine13 天前
Drawnix:开源一体化白板工具,让你的创意无限流动!
开源·流程图
m0_5557629015 天前
项目1——单片机程序审查,控制系统流程图和时序图
单片机·mongodb·流程图
zzywxc78717 天前
AI在金融、医疗、教育、制造业等领域的落地案例
人工智能·机器学习·金融·prompt·流程图
趣学习17 天前
A043基于博途西门子1200PLC自动售货机系统仿真A043自动售货机+S71200+HMI+主电路图+外部接线图+流程图+IO分配表
毕业设计·流程图·课程设计·plc·西门子
kebeiovo19 天前
项目必备流程图,类图,E-R图实例速通
开发语言·r语言·流程图
晋人在秦 老K19 天前
入梦工具箱怎么检测硬件?3步完成CPU-Z跑分测试 硬件检测总出错?图吧工具箱免费功能实测 draw.io 部署指南:私有化流程图服务搭建教程
测试工具·流程图·工具·draw.io
zzywxc78720 天前
AI在金融、医疗、教育、制造业等领域的落地案例(含代码、流程图、Prompt示例与图表)
人工智能·spring·机器学习·金融·数据挖掘·prompt·流程图