RTAB-Map

Stars

面向机器人感知与自主导航的实时外观建图系统,融合视觉、RGB-D、双目与 LiDAR 数据,覆盖回环检测、图优化、定位和三维建图,并提供 C++ 核心、Qt 桌面工具及 ROS / ROS 2 集成。

Visual · LiDAR SLAMLoop Closure · Graph OptimizationC++ · Qt · ROS / ROS 2
DESKTOP SLAM · GUI RESOURCE LIFECYCLE

没有任务,就不应该留下进度窗口

一个对话框何时创建,决定错误返回之后是否还会残留孤立的 UI 资源。

REQUEST · DETECT MORE LOOP CLOSURES
INTRA-SESSIONOFF
INTER-SESSIONOFF
SELECTED NODES0
NO EXECUTABLE WORK
BEFORE · ALLOCATE THEN VALIDATE
rtabmap-databaseViewerCancel
SHOW DIALOGWARNINGRETURN
1 ORPHANED WINDOW
AFTER · VALIDATE THEN ALLOCATE
OPTIONS VALID?NO
warningRETURN · 0 DIALOGS
YESsame 7 linesRUN
无效请求

三个检测入口同时不可用

`DatabaseViewer::detectMoreLoopClosures()` 在验证检测选项之前就创建并显示 `ProgressDialog`。当 intra-session 与 inter-session 都关闭、同时又没有选择图节点时,函数弹出配置警告后直接返回,但已经可见的进度窗口没有任何任务可以推进或完成,因而成为无法正常收尾的孤立对话框。

顺序错误

先显示窗口,再发现任务不能开始

进度窗口不是输入表单,而是“有效任务已经开始”的运行期资源;它的生命周期必须由同一条工作路径负责取消、推进和关闭。若请求连前置条件都不满足,就不存在可报告的进度。与其在每个错误出口补清理逻辑,不如让校验闸门支配资源创建,从控制流上保证失败发生时对话框尚不存在。

前置闸门

校验支配资源创建与生命周期

将原有七行 `ProgressDialog` 构造与配置代码原样移动到无效选项检查之后:错误配置现在只显示警告并返回,创建的对话框数量为零;合法配置仍沿用相同父对象、`WA_DeleteOnClose`、取消按钮、宽度与显示行为,回环检测本身没有改变。

行为边界

错误路径归零,正常路径完全不变

单文件 `+7/-7` 的控制流修复关闭了自 2025 年 3 月存在的 #1462,由维护者 Mathieu Labbé 确认并合入 `master`。GitHub 的 28 项检查全部结束,其中 Linux、macOS、Windows、ROS、Docker 与 Coverage 等 26 项成功,2 项按条件跳过;无效请求不再遗留窗口,正常检测路径保持原有行为。

RTAB-Map DatabaseViewer 在无效回环检测配置下遗留进度对话框的原始问题截图
原始问题截图中,intra-session 与 inter-session 均未启用,检测任务无法开始;但空白进度窗口已经显示在 DatabaseViewer 上方,既没有进度可推进,也无法沿正常完成路径关闭。修复把这类无效请求挡在窗口创建之前。