{
  "_meta": {
    "robot": "Yaskawa AR2010 (Motoman)",
    "controller": "A-03 (로봇2)",
    "updated": "2026-06-17",
    "sources": {
      "calibration_offset": "A-03 컨트롤러 라벨 직독 — 2026-06-17 사용자 제공 (로봇2)",
      "kinematics": "RoboDK 모델 직독 — E:/도진팩토리/VAULT/robots/YASKAWA/Yaskawa-Motoman-AR2010.robot",
      "robodk_api": "JointPoses() + SolveFK() + JointLimits() 직접 출력"
    }
  },

  "calibration_offset": {
    "_source": "A-03 컨트롤러 라벨 직독 — 사용자 제공",
    "S":    211,
    "L": -86494,
    "U":  71055,
    "R":   2663,
    "B":  -4583,
    "T": -29978
  },

  "robodk_joint_poses": {
    "_note": "RoboDK JointPoses() 직독. 홈(q=0) 기준 각 관절 원점 위치+회전축. 단위 mm.",
    "S": { "origin_mm": [0,    0,   0  ], "rot_axis_world": [0, 0, 1] },
    "L": { "origin_mm": [150,  0,   0  ], "rot_axis_world": [0, 1, 0] },
    "U": { "origin_mm": [150,  0,   760], "rot_axis_world": [0, 1, 0] },
    "R": { "origin_mm": [1232, 0,   960], "rot_axis_world": [1, 0, 0] },
    "B": { "origin_mm": [1232, 0,   960], "rot_axis_world": [0, 1, 0] },
    "T": { "origin_mm": [1332, 0,   960], "rot_axis_world": [1, 0, 0] }
  },

  "robodk_fk_home": {
    "_note": "RoboDK SolveFK([0,0,0,0,0,0]) 직독",
    "TCP_mm": [1332.0, 0.0, 960.0],
    "TCP_rpy_deg": [0.0, 90.0, -180.0]
  },

  "robodk_axis_plus1deg": {
    "_note": "RoboDK SolveFK로 각 축 +1도 회전 시 TCP 이동량 (mm). 홈 기준 차분.",
    "S": { "dX": -0.2029, "dY": +23.2466, "dZ":  0.0000 },
    "L": { "dX": +16.5743,"dY":   0.0000, "dZ": -20.7750 },
    "U": { "dX": -3.6705, "dY":   0.0000, "dZ": +20.5983 },
    "R": { "dX":  0.0000, "dY":   0.0000, "dZ":  0.0000  },
    "B": { "dX": -0.0152, "dY":   0.0000, "dZ": +1.7452  },
    "T": { "dX":  0.0000, "dY":   0.0000, "dZ":  0.0000  }
  },

  "robodk_joint_limits_deg": {
    "_note": "RoboDK JointLimits() 직독",
    "S": { "min": -180.0, "max":  180.0 },
    "L": { "min": -105.0, "max":  155.0 },
    "U": { "min":  -86.0, "max":  160.0 },
    "R": { "min": -150.0, "max":  150.0 },
    "B": { "min": -135.0, "max":   90.0 },
    "T": { "min": -210.0, "max":  210.0 }
  },

  "link_lengths_mm": {
    "_source": "RoboDK JointPoses() 역산 + ALL.PRM RC1G 교차확인",
    "d1_base_height":  505,
    "a2_s_to_l":       150,
    "a3_upper_arm":    760,
    "d4_forearm":     1082,
    "a4_u_offset":     200,
    "d6_flange":       100
  },

  "pulses_per_deg": {
    "_method": "soft_limit_pulse / mechanical_range — ALL.PRM S1CXG 확인 필요",
    "S": 1420.3,
    "L": 2024.5,
    "U": 1135.8,
    "R": 1022.9,
    "B":  980.2,
    "T":  517.3
  },

  "tcp_offset_mm": {
    "_note": "VERIFIED_LOCK.md 확정값 — RoboDK FK 4점 교차검증 0.002mm (2026-07-02 교체, 구 TOOL.CND 값은 오류)",
    "X": -136.826,
    "Y":    8.192,
    "Z":  506.982
  }
}
