在 SG2002 的 Cortex-A53 上运行双目惯性 VIO。实时图像由 tide_cam 在进程内采集:两路 OV9281 默认 640×400、硬件同步约 20 Hz;SC7U22 IMU 以 200 Hz 提供中断时间戳。相机时间戳取 VI 到达时间,图像保持原始方向。程序默认通过原生 ROS 2 DDS 发布位姿,也支持现场录制和离线回放。
原生 DDS 构建支持可选的左右 JPEG 图像发布:SCHUR_JPEG_QUALITY=80 开启,默认关闭。
由应用工作线程调用 tide_cam 直接编码 VI 原始缓冲,再发布两个 CompressedImage topic;
第一版不限制发送频率,慢消费者会拖慢采集。接口、topic 和时间戳约定见 CAMERA.md。
在 SDK 根目录运行:
JOBS=4 scripts/schurvins/build.sh默认生成 install/soc_sg2002_tidesense_arm64_sd/schurvins-gcc11-native-dds-a53.tar。将包复制到设备并解压到 /mnt/data。build_all 也会构建并预装此版本。
七项 SCHUR_OPT_* 优化开关默认开启;需要逐项关闭时在构建前显式设置环境变量,并检查产物的 BUILD-INFO。
构建时可用 SCHUR_ROS_BACKEND=native-dds|micro-ros|none 选择通信后端;默认是原生 DDS。三种后端使用独立构建目录。源码版本和依赖由 sources.lock 固定,构建入口会准备所需的 OpenCV、yaml-cpp、glog 等静态依赖。原生 DDS 的部署方式见 native_dds/README.md。
随包的 schurvins.yaml 仅适用于对应设备。换板后需使用该板的相机内参、双目及相机与 IMU 外参、IMU 内参和时间偏移。TideConfigurator 可生成并应用标定结果;参数说明见 CALIBRATION.md。
先停止其他相机和 IMU 采集程序。在设备上运行:
cd /mnt/data/schurvins-gcc11-native-dds
SCHUR_PREDICTION=0 ./run.sh --vio schurvins.yaml auto /mnt/data/poses.csv 0auto 查找 SC7U22 IIO 设备,最后的 0 表示持续运行;按 Ctrl-C 正常停止并释放 FSIN、相机和 IIO。poses.csv 保存视觉校正位姿。启动时保持设备静止,并让双目看到有纹理的场景。曝光上限从设备 camera.conf 读取,详情见 tide_cam。
原生 DDS 默认发布 /tidesense/pose 和 /tidesense/tracking,电脑端 ROS 2 可直接订阅,无需 Agent。若要关闭发布,设置 SCHUR_ROS=0。固定 peer 的可选配置见 native_dds/README.md。
如需使用旧版 micro-ROS 后端,可显式构建 SCHUR_ROS_BACKEND=micro-ros,先在电脑上启动 Agent:
source scripts/calibration/ros2-env.sh
ros2 run micro_ros_agent micro_ros_agent udp4 -p 8888随后在设备上指定电脑的 USB 网卡地址:
SCHUR_MICRO_ROS=1 SCHUR_MICRO_ROS_AGENT=192.168.123.2 \
./run.sh --vio schurvins.yaml auto /mnt/data/poses.csv 0/tidesense/pose 是 geometry_msgs/msg/PoseStamped,表示 IMU/body 到 odom 的位姿;/tidesense/tracking 是 std_msgs/msg/Bool。两个话题使用 best effort QoS。SCHUR_PREDICTION=0 时视觉校正约 20 Hz;设置为 1 可按 IMU 采样率发布预测位姿。通信和时间戳语义见 MICRO-ROS.md。
要保存实时 VIO 消费的输入,可在 --vio 命令末尾加 --record NEW_DIR。录制目录必须尚未存在;正常结束后可运行:
SCHUR_MICRO_ROS=0 ./run.sh --replay /mnt/data/vio-record /mnt/data/replay-poses.csv只需录制数据集而不运行 VIO 时,使用 独立录制器。录制文件和回放条件见 RECORDING.md。
程序也接受已配对图像与 IMU 的 CSV 输入:
./run.sh calibration.yaml stereo.csv imu.csv poses.csvstereo.csv 行格式为 timestamp_ns,left_image,right_image;imu.csv 为 timestamp_ns,gx,gy,gz,ax,ay,az,单位依次为 rad/s 与 m/s²。时间戳必须属于同一时钟域、严格递增,IMU 覆盖完整相机区间。输入数据应匹配传入的标定和 raw_si IMU 模型。
相机、IMU 的硬件和接口细节分别见 CAMERA.md、IMU.md。性能实验与结果保存在 bench/ 和 tests/,不作为默认运行参数。