EgoHalo Native Qt - NUSNiuMu/insight-capture-dashboard GitHub Wiki

EgoHalo 与 Native Qt

当前候选分支为 feat/egohalo-native,不是已合并的客户发布。完整说明见 EGOHALO_NATIVE.md。

2026-10-12 · 静止模型抖动的显示端平滑

提交:8be259e(feat/egohalo-native)。

  • 用户确认当前两个 Insight3 间距大致正确,随后放大视图发现静止抖动。20 秒采样原始 VIO/统一位姿存在亚毫米逐帧噪声,期间没有新增大幅重定位;A 另有约 6.5 mm 的缓慢地图修正,不能全部视为细碎噪声。
  • 只给实时模型显示添加位置与四元数自适应低通,低速 3 Hz、运动时提高截止频率,最多 30 Hz;没有固定死区、额外帧队列或渲染循环。超过 2 cm/5° 的瞬时跳变、输入间断、generation 变化和恢复显示直接采用新位姿,回放绕过过滤。原始位姿、轨迹、定位和录制不改。
  • 同一真实输入回放:A/B/头部逐帧位置 P95 0.340/0.260/0.295 mm → 0.170/0.134/0.159 mm,角度 P95 约减少一半。模拟 20 cm/s、90°/s 最大残差 2.24 mm/0.39°,通过符号反转、断点、回放及 Qt 源/显示分离检查,不作为光学时延或定位精度改善。
  • 新版实窗六路视频、三模型加载成功;某次显示间距 8.090 cm,原始输入 8.092 cm。诊断同时提供显示/源位姿;缓慢漂移仍会显示,不能靠平滑证明定位可靠。
  • 已构建、部署默认唯一 Qt,关闭诊断;后端和地图未重启。完整记录,采样、测试、诊断及旧二进制在 ~/workspaces/insight_capture_tests/native_jitter_20261012/。

2026-10-12 · 六路建图竞争优化与定位确认修复

提交:3e7f139、6cc38d8(feat/egohalo-native)。

  • 两个 Insight3 接近重叠时,独立全局位姿中心间距约 1.7 cm,原始 VIO 14 秒仅毫米级变化;A 记录 28 次大幅重定位、B 为 0。当前地图仅 8 个确认点,不能套用此前 827 点验收结果。证据指向 A 地图修正不稳定,没有用模型偏移掩盖问题。
  • 候选默认两两不超过 5 cm/3°,5 次中至少 3 次支持且含当前观测;重复替代解阻止确认,修正保留完整同一候选 SE(3)。PnP 门限不降低。几何通过但修正不一致时显示定位确认中,无新地图观测时显示 VIO 外推;后端连接和设备离线分别显示。
  • 去畸变限制 OpenCV 内部并行、解码后先选帧再转换,并用 typed byte array 避免 ROS 逐字节校验。四路争抢时消息构造约 200–263 ms → 1.7–2.9 ms;真实 ROS CDR 和像素完全一致。14 秒各双目输出 70 帧、四路队列/参考重置均为 0,恢复发布 5 Hz。新增每秒 rig 管线计数。
  • SuperPoint 使用最多 8 项图像内容缓存,变化像素/阈值重新计算,不缓存地图 XYZ 或定位修正;真实 TensorRT 重复请求输出一致。Qt 只在展示状态变化时通知,静态原始指标变化不会触发整组重绘。
  • 51 项相关 Python 检查、Qt 真 HTTP/状态/轨迹/模型检查、60 个 AU 的硬件选帧像素对照及六路真实窗口通过。最终 60 秒 Ego sink 29.84–30.02 FPS,Insight3 A/B 28.77/28.41 FPS,A/B 大幅重定位均为 0;不是曝光到屏幕延迟。CPU/GPU 中位仍约 83%/93%,不声称整机负载已显著下降。
  • Ego 地图保留;新版 Qt、去畸变及 TensorRT worker 已部署,最终一个默认 Qt 窗口、逐帧诊断关闭。后测相机中心间距约 19.3 cm,期间 A 实物视角也变动,尚未与实物测距对照,定位精度和长期漂移仍待验收。稳定标签保持不变。
  • 完整性能记录、定位修正说明;证据归档于 ~/workspaces/insight_capture_tests/native_perf_20261012/。

2026-10-12 · 收紧视频列并扩大 Native 3D 视图

提交:80c5553(feat/egohalo-native)。

  • 固定 2∶1 分栏造成竖屏视频两侧留白。现按源图像比例和可用高度计算视频列宽度,取消左右视频内边距,完整等比例显示,把多余宽度交给 3D。
  • 真实 2560×1440 全屏:视频区约 1245 px、3D 1274 px;六路的水平空余均小于 1 px,仅有布局取整。窗口缩放后视频区约 685 px、3D 875 px,六路继续渲染、三个模型加载成功,无 QML 绑定循环或递归布局错误。
  • 隔离目录 Qt 构建通过,日常 .native-build/insight-native 已更新,默认 ./native_dashboard/run.sh 保留唯一窗口并关闭诊断;采集和建图服务未重启。网页构建通过,dist 无变化。缺少视频尺寸的回放保留原分栏宽度。
  • 截图、窗口诊断和更新前二进制归档于 ~/workspaces/insight_capture_tests/native_layout_20261012/。

2026-10-12 · Ego 四路建图、Insight3 匹配与模型坐标修复

提交:7235d43(feat/egohalo-native)。完整说明。

  • Ego 四路只各解码一次,形成前置、左重叠、右重叠三组独立去畸变双目;四个物理相机都提供定位参考,地图与 BA 使用各组内外参及投影矩阵。标定版本不一致停止新观测,完整新标定使旧地图、参考和修正失效。
  • Insight3 独立探索参考视角并保持成功视角积累一致性;在匹配前过滤低置信度对应,地图成熟后继续图像参考帧匹配,失败再走全局描述子。保留原 PnP、覆盖和 3/5 多帧门限,区分真正地图匹配与仅 VIO 外推。
  • 用户完成现场运动后生成确认地图,最后观察为 827 点。Qt 原先仍显示三套独立原始 VIO,已接入统一地图位姿;用户确认 B 相对头部位置正确。没有用模型偏移补偿坐标错误,也没有修改设备固件。
  • 127 项回归及 5 组 ROS/配置启动检查通过。最终 30 秒状态采样按源图像时间戳去重:A 29/29、B 30/30 通过;内点 13–16 / 16–20,重投影误差 0.617–1.368 / 1.112–1.942 px。独立 6 秒三路全局位姿各收到 180 条消息,同一地图坐标。
  • 日常默认 Qt 保留,一套服务栈运行。native-qt-stable-2026-10-10 标签未变。测试、标定、真实匹配输入、配置备份和截图归档于 ~/workspaces/insight_capture_tests/egohalo_mapping_20261012/。绝对精度、模型安装外参测量、完整运动范围和长期漂移仍待专门验收。

做了什么、为什么

  • 新增 jetson-nx-egohalo profile,Insight3 A/B 加 EgoHalo;运行时只保留一套后端、建图定位服务和一个 Native Qt 窗口,入口仍为 ./native_dashboard/run.sh。旧 Insight9 profile 仅作可选模板,不同时启动。
  • EgoHalo 四路原始 H.264 直接转发和硬件解码,保存原始分辨率;实时显示经 VIC 转为独立缓冲。修复跨域 Python 拷贝/调度和时间戳缺口误判参考帧丢失导致的延迟。
  • 界面约三分之二显示视频、三分之一显示轨迹;Insight3 左列两路,EgoHalo 四宫格。
  • Ego domain 0 原样转发到现有 domain 20;Insight3 直接接入。双目前置图像按设备标定去畸变供建图,原始录制不去畸变。
  • 六路录制与同步回放、三个设备位姿、建图前置状态接入;多路 H.264 的 LeRobot/UMI 导出尚未适配。

如何验证

95 项回归检查通过。真实跨域 241 条图像、784 条 VIO 的 CDR 哈希一致;1541 个录制帧核对 H.264 参考关系。约 12 秒六路样本实际在 Qt 回放到结尾,三个模型显示。样本有 3 次源间断、180 个同步选帧重复,质量结果为警告,不能当作无丢帧验收。

单套配置、六路预览和建图同时运行的 25 秒采样:Ego 四路 29.0–29.6 FPS,主机源域接收同一编码帧至 Qt 显示 sink 入口 P95 82.2–86.9 ms,最大 167.2 ms;硬件解码 P95 20.5–22.2 ms。Insight3 约 25 FPS。三路轨迹约 27 Hz;Ego 位姿从源域主机接收至 Qt 应用模型变换 P95 94.7 ms。

上述时延不含相机曝光、设备内部编码、主机订阅前的 USB 传输和显示屏扫描;尚未完成光学源到屏幕延迟验收。

2026-10-10 部署记录与当时待验收

2026-10-10 日常目录已切至上述分支和 jetson-nx-egohalo,Native 二进制已更新;临时验证容器停止。现场当前预览使用原始 VIO,不能据三个模型可见声称坐标系已经对齐;模板使用统一定位输出,待现场运动建图和精度验收后启用。

迁回日常目录期间,内核在 15:59:56 记录 EgoHalo USB 断开,随后没有重新枚举;源域和目标域短时计数均无 Ego 图像/VIO。最终六路部署复核需重连设备,以上性能数字来自断开前的实测。

修复前迁回日常目录后,仅两台 Insight3 在线时抽测,实际显示约 11 FPS、解码约 5–7 ms,位姿接收也有秒级间断;不能将此前六路结果作为最终环境已达标的结论。去除后端 DISPLAY 的对照未改善,已恢复原启动环境;独立 domain 20 ROS 探针在 6 秒内仅收到 A/B 图像 64/72 帧、VIO 228/196 条,最大到达间隔约 1.99/2.09 秒,证明间断也存在于 Dashboard 之外的接收路径;后续已定位并修复失效 Ego DDS 地址导致的发送停顿,见下节。

原外置录制盘当前不可用,后端沿用 NVMe 回退目录,保留外盘来源检测。切换前 live config 和旧 Native 二进制已备份至本机测试目录。

待验收:现场运动建图、头部与双手统一定位精度及恢复、长时间六路无丢帧录制、光学源到屏幕延迟。没有修改设备固件或设备配置。

2026-10-10 · Ego 离线时 Insight3 帧率恢复

提交 723ed28。Ego 拔掉后,旧 DDS participant 仍保留 169.254.10.2,抓包看到 Insight3 A 对该失效地址的重复 ARP 查询;两种 DDS 接收器都复现约 2 秒间断,主机 UDP 缓冲丢包没有增长。刷新唯一 ROS 服务栈后恢复。

新增本地域 Fast DDS 网卡排除规则和 Ego 桥接的 USB 在线生命周期,避免离线 Ego 地址继续进入本地域 DDS 通告。仅候选 profile 启用,用户显式 DDS XML/RMW 配置优先。相机 API 按两秒墙钟统计帧率,把停顿也计入。

108 项回归通过;独立 ROS 域真实验证桥接上线、离线停止和重新上线恢复。部署后约 90 秒实际 Qt 显示 A/B 为 29.86/29.92 FPS,输入中位 30.0、最低 29.5 FPS;观察窗口最大 sink 帧间隔 87.4/90.9 ms,超过 100 ms 的间隔为零。解码 P95 5.6/6.4 ms。诊断缓存中窗口开始前的启动帧另计。以上是显示入口与接收指标,光学端到端验收仍待进行。

恢复默认 ./native_dashboard/run.sh,逐帧诊断关闭,保留唯一服务栈。用户已确认 Ego 暂时拔下;实物重新接入后的六路复核按用户安排后续进行。

2026-10-10 · 本机 Qt 优化版

优化前已推送“稳定版本地 Qt”标签 native-qt-stable-2026-10-10,固定于 723ed28;优化提交 53c03bd 已安装到日常启动路径。入口仍为 ./native_dashboard/run.sh,仅一个 Qt 窗口、一套后端。

本机经 /ws/native 直接消费原始 Insight3 灰度图与 Ego H.264;远程继续 WebRTC。录制先入队,不新增 DDS 图像订阅。任务统计异步/缓存、轨迹按变化和可见性更新、夹爪缓存节点,离线设备停止媒体连接。保留显示轨迹最多 4096 点,超限抽稀保留起止点;完整录制不抽稀。

116 项回归、Qt 几何/模型专项、六路保存样本实窗与回放操作、模拟离线恢复通过。真实 Insight3 两路 90 秒输出 29.99/30.00 FPS,本机预览收到帧至 sink 入口 P95 8.92/8.33 ms、无大于 100 ms 帧间隔;姿态约 30 Hz、最大间隔 53.95 ms。Qt 旧 WebRTC 对照通过;无头 Chromium 缺 H.264,网页仅验证 JPEG/API/WS 共存。上述指标不含设备处理、USB/DDS 接收前、屏幕扫描,不能当作光学端到端延迟。

Ego 仍暂时拔下,真实六路重连性能、运动统一定位及长期完整录制待后续。详见 性能与诊断说明。

2026-10-12 · Insight3 静止约束、运动解除与计算预算

提交:50e7ef0(feat/egohalo-native)。

  • 长采样区分了原始 VIO 缓慢漂移与地图修正变化;显示平滑不能消除定位层的误差。已定位的 Insight3 只有图像固定参考、原生 STATIC 状态、VIO 小运动和最近已收敛地图确认同时成立,才保持进入时世界位姿;没有写死间距,原始 VIO/图像录制保留,Ego 不约束。
  • 检测运动、输入失效、时间戳间断/复位即解除,重新进入要求新的地图确认;开启权威 Cube Marker 修正的相机禁用,另有 CLI 对照开关。静止时继续检查图像证据并跳过重复 SuperGlue/PnP,Qt 黄色“静止约束”明确区分当前地图匹配。
  • 61 项 Python 功能/回归、实际 ROS 消息回调中的运动解除与时间轴复位、Qt C++ 状态/模型检查通过。两分钟全静止采样 A/B 均 120/120 active、无解除,估计间距约 10.259 cm 保持不变;同期 60 秒 GPU/CPU 中位约 68%/83%,不同时间旧基线不是严格性能对照或光学时延验收。
  • 180 秒现场两台实际移动:原始与统一位姿均更新,两台约束解除后重新进入,未新增大幅重定位;最后 60 秒间距范围约 56.063–56.264 cm(约 2 mm 变化),仍有保守解除。不同重启首次匹配曾得到约 11.18 cm,静止稳定不能代替首次匹配精度,实物测距与长期运动定位仍待验收。
  • 最终定位服务与默认唯一 Qt 已部署,六路视频和三模型实际加载,持续诊断关闭。完整脚本/数据/构建/截图存于 ~/workspaces/insight_capture_tests/static_localization_20261012/;定位说明、性能记录。稳定 Qt 标签保持不变。