# 真实采集会话接入

这个目录放真实车间侧采集/ingest 的接入脚手架。它不直接绑定具体相机、雷达、
底盘或控制器 SDK，只固定一件事：真实采集程序在采到文件后，把文件路径登记到
`dataset_index.yaml`，并在会话结束时生成 `site_data_input.yaml`。

最小使用示例：

```bash
python3 src/site_deployment/workshop_sensor_ingest_real/site_session_capture.py \
  --site-profile src/deployment/profiles/site_template.yaml \
  --session-dir /data/agv_calib/site_a/session_001 \
  --site-id site_a \
  --vehicle-id agv_001 \
  --file external.external_observation_files=external/external_observations.csv \
  --file chassis.chassis_motion_data_files=chassis/chassis_motion.csv \
  --file control.control_evaluation_data_files=control/control_eval.csv \
  --file sensor.image_sample_files=sensor/front_camera/images.yaml \
  --file sensor.target_detection_files=sensor/front_camera/charuco_detections.json \
  --finalize
```

执行后会生成：

- `dataset_index.yaml`
- `site_data_input.yaml`

校验 `dataset_index.yaml`：

```bash
python3 src/deployment/tools/validate_dataset_index.py \
  /data/agv_calib/site_a/session_001/dataset_index.yaml \
  --tasks external,chassis,control,sensor_intrinsic
```

现场 launch 使用 `site_data_input.yaml`：

```bash
ros2 launch win_ubuntu_bridge minimal_workshop_demo.launch.py \
  use_gateway:=true \
  data_input_params_file:=/data/agv_calib/site_a/session_001/site_data_input.yaml
```

使用现有 Isaac smoke 验证四个算法服务的数据输入注入：

```bash
./run_isaac_real_sim_test.sh \
  --headless \
  --local-calibration-services \
  --data-input-params-file /data/agv_calib/site_a/session_001/site_data_input.yaml \
  --tasks external,chassis,control,sensor_intrinsic
```

更快的本地回归命令：

```bash
./run_local_data_input_smoke.sh \
  --data-input-params-file /data/agv_calib/site_a/session_001/site_data_input.yaml
```

真实采集程序后续只需要在对应设备数据落盘后调用本脚本，或者直接复用本脚本里的
索引写入逻辑。具体标定算法不需要知道采集程序如何连接设备，只读取算法模板里的
`data_input.*` 文件引用。
