CaptureFileCamera 是文件回放相机。当前仓库里,它只接受统一内录包:
frames.binframes.csvimu.csv
图像帧固定为 BGR8 raw 未压缩字节流,按 720x540 主口径回放到
CameraFrameSync,用于复现实机相机输入、调试同步、回归视觉流程。
它不模拟 Hik 相机触发延迟,也不从图像像素中读取额外信息。
runtime 参数由 BSP YAML 传入:
file_path:帧数据 bin 路径。imu_csv_path:IMU CSV 路径。frame_csv_path:帧索引 CSV 路径;当前必填。camera_name:相机名,也是原始 IMU 话题前缀。image_topic_name:图像话题名,默认camera_image。imu_topic_name:同步后 IMU 话题名,默认camera_imu。realtime:为true时按录制 timestamp 控制回放速度。loop:为true时播放到文件末尾后重新开始。max_frames:最大提交帧数,0表示不限制。
测试环境可以用环境变量覆盖部分参数:
CAPTURE_FILE_CAMERA_MAX_FRAMES:限制本次回放提交的图像帧数。CAPTURE_FILE_CAMERA_REALTIME=0:关闭实时限速。
统一内录包使用:
file_path指向*_frames.bin。frame_csv_path指向*_frames.csv。imu_csv_path指向*_imu.csv。
帧索引 CSV 列顺序为:
frame_index,camera_timestamp_us,offset_bytes,size_bytes[,codec]
offset_bytes 和 size_bytes 指向 bin 文件中的一帧图像。当前只允许:
codec=rawsize_bytes == CameraBase::image_bytes
模块用 camera_timestamp_us 和 IMU CSV 的 timestamp_us 对齐,只播放能找到同 timestamp
IMU 的图像帧。CSV 最后一行如果因为录制结束被截断,会被忽略;中间行解析失败会直接报错。
IMU CSV 列顺序为:
timestamp_us,qw,qx,qy,qz,gx,gy,gz,ax,ay,az
字段含义:
timestamp_us:传感器时间戳,单位微秒。qw,qx,qy,qz:姿态四元数,顺序为wxyz。gx,gy,gz:角速度,单位rad/s。ax,ay,az:线加速度,单位m/s^2。
CSV 可以包含空行、以 # 开头的注释行,以及一行表头。第一条有效数据之后,无法解析的
行会让模块停止初始化。
图像写入 CameraBase 图像缓冲区,并发布到 image_topic_name。
原始 IMU 按 camera_name 生成三个话题,Topic timestamp 使用 CSV 的 timestamp_us:
<camera_name>_gyro:Eigen::Matrix<float, 3, 1>。<camera_name>_accl:Eigen::Matrix<float, 3, 1>。<camera_name>_quat:LibXR::Quaternion<float>。
同步后的 imu_topic_name 由 CameraFrameSync 发布,CaptureFileCamera 只发布原始
IMU。
- 用统一
720x540 raw frame-bin内录包复现实机输入。 - 调试
CameraFrameSync的图像和 IMU 对齐。 - 在 CI 或本地回放固定数据,检查检测、跟踪、预览等模块是否还能稳定运行。