本文件记录最初基线版本。后续 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%。无纹理输入不生成深度。
测试使用独立端口 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/,不计入上述通过结果。