schema_version: 1

vehicle:
  vehicle_id: "outdoor_usable_20260808"
  body_frame:
    name: "base_link"
    # 车体约定：后轮轴中心在地面投影为原点附近参考；X 前 / Y 左 / Z 上
    # translation_m 的 Z 使用「离地高度」；后轮轴中心离地 294 mm
    axes: "X forward, Y left, Z up"
    unit: m
    reference_point: "rear_axle_center_xy__z_above_ground"
    rear_axle_height_above_ground_m: 0.294

installation:
  installation_id: "20260808_priority_windows"
  installed_at: "2026-08-08"
  notes: >
    HI13R4 + H32 DLogCapture. Body +X forward: LiDAR and IMU at positive X.
    CAD sheet may draw +X rearward; numbers below are body-frame.
    Z is height above ground = CAD height at axle + 0.294 m (axle AGL).
    LiDAR CAD dZ is 1637.499879 mm relative to the axle reference. Phase-center
    AGL adds rear-axle height 294 mm and the 63.5 mm phase-center offset.
    IMU axes: HI13R4 manual §2.4 RFU (X right, Y forward, Z up).
    LiDAR Cartesian in NPZ assumed body-aligned (X forward).

sensors:
  imu:
    model: "HI13R4"
    raw_frame:
      # HI13R4 用户手册 2.4：右-前-上 (RFU)
      axes: "X right, Y forward, Z up (RFU)"
      driver_axis_remapped: false
    mount_in_body:
      # X/Y：后轮轴中心 → IMU；Z：离地 = CAD 0.8925 + 0.294
      translation_m: [2.574126255, 0.0365, 1.1865]
      # body <- imu : p_body = R_body_imu * p_imu
      # R_body_imu = [[0,1,0],[-1,0,0],[0,0,1]]  (fwd=imu_y, left=-imu_x, up=imu_z)
      rotation_matrix_body_imu: [[0.0, 1.0, 0.0], [-1.0, 0.0, 0.0], [0.0, 0.0, 1.0]]
      rotation_quaternion_xyzw: null
      source: "CAD X/Y in body (+X forward); Z = CAD axle-height + 294mm AGL + HI13R4 RFU"

  lidar:
    model: "RSLidarH32"
    points_field: points
    raw_frame:
      axes: "X forward, Y left, Z up (Cartesian metres in NPZ points)"
      driver_axis_remapped: false
    mount_in_body:
      # X/Y：后轮轴中心 → 雷达
      # Z离地 = CAD dZ 1.637499879 + 后轮轴离地 0.294 + 相位中心偏移 0.0635
      translation_m: [2.522276859, 0.000020526, 1.994999879]
      rotation_matrix_body_lidar: [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]
      rotation_quaternion_xyzw: null
      source: "CAD X/Y in body (+X forward); Z AGL = CAD dZ 1.637499879 + axle AGL 0.294 + phase-center offset 0.0635; attitude = body"

  rtk:
    frame_definition: ""
    reference_point: ""
    existing_T_RTK_LIDAR_file: ""

time:
  imu_timestamp_source: "hi13_device_timestamp_ms_seconds"
  lidar_timestamp_source: "h32_msop_device_timestamp_seconds"
  lidar_frame_time_definition: "t_start/t_end in frames_index.csv; pipeline uses midpoint"
  host_bridge: "MSOP HostReceiveUtcTicks + IMU receive_utc_ticks"

# Derived prior for p_IMU = R_IMU_lidar * p_lidar + t_IMU_lidar
# t_body = t_lidar_body - t_imu_body
# t_IMU_lidar = R_IMU_body * t_body,  R_IMU_lidar = R_IMU_body * R_body_lidar
derived_T_IMU_lidar_prior:
  R_IMU_lidar: [[0.0, -1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0]]
  t_IMU_lidar_m: [0.036479474, -0.051849396, 0.808499879]
  t_lidar_from_imu_in_body_m: [-0.051849396, -0.036479474, 0.808499879]
  notes: >
    Rotation prior ~90 deg yaw (body/lidar X-fwd vs IMU Y-fwd).
    Relative Z = 1.994999879 - 1.1865 = 0.808499879 m.

initialization:
  translation_prior:
    enabled: true
    sigma_m: [0.05, 0.05, 0.05]
    t_IMU_lidar_m: [0.036479474, -0.051849396, 0.808499879]
  rotation_prior:
    enabled: true
    sigma_deg: 15.0
    R_IMU_lidar: [[0.0, -1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0]]
