Skip to content

Latest commit

 

History

History
77 lines (59 loc) · 4.6 KB

VALIDATION.md

File metadata and controls

77 lines (59 loc) · 4.6 KB

深度模式验证记录

本文件记录最初基线版本。后续 all64 与缓存取图的验证见 OPTIMIZATION.md。这些板端结果早于 tide_cam 迁移, 不能作为当前采集路径的实测结果;当前默认请求频率为 20 Hz。

日期:2026-10-23。设备:SG2002 / A53,192.168.123.99。 工具链:SDK GCC 11.3.1,OpenCV 3.4.20 单线程 NEON,既有 Humble micro-ROS 静态库。 应用为全静态 ELF,无 PT_INTERP / DT_NEEDED。没有更换内核或 USB gadget 配置。 随包标定来自 scripts/schurvins/tidesense.yaml,为当前板卡 radtan 标定。

几何与数值

主机 OpenCV 4.5.4 和板端 OpenCV 3.4.20 均通过 depth_test:

  • 已知视差对应 1000 / 2000 mm;无效、负视差、目标坐标越界和量程溢出均置 0。
  • 检查匹配目标坐标上的有效 mask,而非把两张 mask 按同一像素直接相交。
  • 当前标定基线约 49.77 mm,正视差参考为物理右相机。
  • 倒装右相机的合成随机纹理平面,在 320×200 和 640×400 均恢复预期深度, 中央有效区域的深度中位数误差小于测试阈值 5%。无纹理输入不生成深度。

micro-ROS 传输

测试使用独立端口 18891、ROS domain 24;主机 Agent 与 Cyclone DDS 订阅器。 test_depth_ros.cpp 产生逐帧变化的 16 位像素模式,包含 0 和 65535。 receive.py --test-pattern 对每一帧的所有像素进行精确比较,并检查 Image/CameraInfo 的尺寸、编码、字节序、内参、frame_id 和相同采集时间戳。

测试 接收配对数 结果
320×200,10 Hz 输入,运行中停止 Agent 3 秒并重启 160 两次连接,断线前后都收到图,逐像素一致
640×400,10 Hz 输入 116 约 9.58 Hz 接收,逐像素一致

128000 / 512000 字节的深度载荷均通过可靠 XRCE 分片传输。 重连测试的全区间接收速率包含断线空窗,不作为稳态帧率。 首轮联调发现 ROS C 基础类型 Sequence 分配不会清零;显式初始化 CameraInfo D 后, 以上传输和真实相机测试全部通过。

可复测:在板端运行构建目录中的 depth_ros_test 320 200(设置 Agent 环境变量), 电脑端运行 receive.py --seconds 25 --test-pattern --output NEW_DIR。 该测试程序不会访问相机,未放入运行包的 bin 目录。

实时相机

两颗 OV9281 原始 640×400 / 标称 20 Hz,共用 FSIN;实际采集约 20.39 Hz。 深度计算不含 VIO,不启用 StereoBM 实验优化补丁。

模式 板端处理帧数 平均计算时间 电脑端接收数 实测接收速率
320×200 / D32,请求 10 Hz 200 32.39 ms 199 10.01 Hz
640×400 / D64,请求 4 Hz 60 371.25 ms 43 2.69 Hz

接收器在固定时间窗口内结束,640 模式板端运行时间超过窗口,所以接收数小于处理数。 板端两次分别成功发布 200 / 60 帧,ROS 待发送缓冲均无覆盖。 全分辨率计算慢于采集,LiveCamera 覆盖旧的待处理帧,内存队列容量保持为 1。 这些是本次实际输入上的结果,不等同于旧离线实验的吞吐量。

本次实机图像几乎只有噪声,看不到可匹配场景细节。 抓取原图后确认左右都是类似情况, ISP 日志显示增益已很高。因此深度有效覆盖率很低:320 模式中位数 0, 640 模式中位数约 0.042%。本次验证了实时数据链路,没有验证真实场景测距精度; 不能把这些噪声上的稀疏匹配当成有效测距。需要在照明和纹理合适的现场另测。 系统时钟当时为 1970 年,未修改板端时间;ROS 时间仍与采集时间保持固定偏移。 实际多传感器系统应先校准板端系统时间。

构建集成

SDK test_install_apps.py 全部 9 项通过,覆盖应用安装及构建顺序; 新增包参与应用完整性检查,build_all 和整卡镜像使用同一安装清单。 深度 README、启动脚本和接收器一同打包。主机 Python 语法和 shell 语法检查通过。 非法 Agent 地址、D31、NaN 帧率均在启动硬件前明确失败。 Agent 不在线时持续计算,SIGTERM 正常退出;退出后 FSIN=0、IMU=200 Hz。 运行中第二个相机消费者被所有权锁拒绝,没有中断已有深度进程。

原始产物位于 install/tidesense-depth-validation-final/: 每项的板端/Agent/接收器日志、16 位 PNG、camera.json、received.json、summary.json, 以及原始双目 PGM / raw-stereo.png。初次失败调试产物单独保留在 install/tidesense-depth-validation/,不计入上述通过结果。