{
  "schema": "aiinfra_jetson_multi_camera_validation_v1",
  "generated_at": "2026-08-22",
  "last_verified": "2026-08-22",
  "scope": "Jetson 多相機從感測器、CSI/GMSL、Argus/V4L2、ROS 2 到 rosbag2/儲存的版本化驗收結構；不是硬體相容清單或本站 benchmark。",
  "rules": [
    "先通過每支相機的單路原生擷取，再一次只增加一支相機與一個資料層。",
    "空白、null、NOT_TESTED 與 unavailable 都不是零掉幀或通過。",
    "NVIDIA 文件的最大連接數只描述指定拓撲，不是任意解析度、FPS、載板、驅動與版本的吞吐保證。",
    "GitHub issue 與論壇案例只作風險訊號，不外推為所有 Jetson 或 rosbag2 版本的效能上限。",
    "通過門檻、測試時長、允許遺失與故障後處置必須在測試前由專案依任務風險定義。"
  ],
  "layers": [
    {
      "id": "sensor-serdes-carrier",
      "name": "感測器／SerDes／載板",
      "freeze": ["Jetson 模組與載板", "相機與 sensor mode", "CSI lane 或 USB topology", "virtual channel", "serializer/deserializer", "device tree、driver 與供電"],
      "measure": ["預期與實收 frame", "sensor/CSI/SerDes 錯誤", "時間戳間隔", "斷線與回復", "溫度與供電"],
      "not_proven_by": "官方最大相機連接數或單支相機短時間出畫面"
    },
    {
      "id": "native-capture",
      "name": "Argus／V4L2 原生擷取",
      "freeze": ["JetPack/L4T", "API 與 pipeline", "pixel format", "sensor mode", "buffer 路徑"],
      "measure": ["實收 frame", "最長停頓", "daemon/kernel log", "CPU/GPU/EMC", "記憶體與溫度"],
      "not_proven_by": "加入 ROS 2 後的畫面或平均 FPS"
    },
    {
      "id": "ros2-dds",
      "name": "ROS 2／DDS",
      "freeze": ["ROS 2 distro", "RMW", "reliability/durability/history/depth", "executor", "composition 與 subscriber 清單"],
      "measure": ["publish/receive 計數", "topic rate/bandwidth", "message age", "queue/backpressure", "系統 trace"],
      "not_proven_by": "只把 QoS 改成 reliable 或只看 ros2 topic hz"
    },
    {
      "id": "rosbag2-storage",
      "name": "rosbag2／儲存",
      "freeze": ["rosbag2 版本", "storage plugin", "cache", "compression", "bag split", "檔案系統與儲存裝置"],
      "measure": ["transport loss", "recorder loss", "bag metadata", "bytes written", "切檔事件", "replay 完整性"],
      "not_proven_by": "SSD 單次循序跑分或沒有 rosbag2 lost event"
    },
    {
      "id": "system-soak-recovery",
      "name": "整機熱穩態與回復",
      "freeze": ["完整服務組合", "功耗模式", "散熱", "營運週期", "告警與回復版本"],
      "measure": ["長時間計數", "熱降頻", "相機斷線", "服務重啟", "磁碟壓力", "故障後回復時間"],
      "not_proven_by": "一分鐘 Demo 或只在冷機測試"
    }
  ],
  "required_test_fields": [
    "test_id",
    "recorded_at",
    "layer",
    "jetson_module",
    "carrier_board",
    "jetpack_l4t",
    "camera_count",
    "camera_model",
    "interface",
    "sensor_mode",
    "pixel_format",
    "target_fps",
    "driver_or_api",
    "test_duration_minutes",
    "expected_frames_or_messages",
    "observed_frames_or_messages",
    "result",
    "notes"
  ],
  "source_urls": [
    "https://docs.nvidia.com/jetson/archives/r36.4.4/DeveloperGuide/SD/CameraDevelopment/CameraSoftwareDevelopmentSolution.html",
    "https://docs.nvidia.com/jetson/archives/r36.4.3/DeveloperGuide/SD/CameraDevelopment/JetsonVirtualChannelWithGmslCameraFramework.html",
    "https://docs.nvidia.com/jetson/archives/r36.4.4/ReleaseNotes/Jetson_Linux_Release_Notes_r36.4.4.pdf",
    "https://docs.ros.org/en/humble/Concepts/Intermediate/About-Quality-of-Service-Settings.html",
    "https://github.com/ros2/rosbag2/blob/rolling/README.md",
    "https://docs.ros.org/en/rolling/p/rosbag2_interfaces/msg/MessagesLostEventTopicStat.html"
  ]
}
