{
  "description": "Original synthetic 2D point sets from the ICP algorithm lesson at dustinturner.ai. Stored targets were generated once by rotating each source 20 degrees counterclockwise and translating by (0.6, -0.2) m. They are read as data, not regenerated by the solver.",
  "units": {
    "coordinates": "meters",
    "theta": "radians"
  },
  "datasets": {
    "asymmetric": {
      "source": [
        [
          -1.3,
          -0.8
        ],
        [
          -0.6,
          -0.8
        ],
        [
          0.1,
          -0.8
        ],
        [
          0.9,
          -0.8
        ],
        [
          1.2,
          -0.2
        ],
        [
          1.2,
          0.6
        ],
        [
          0.5,
          1.1
        ],
        [
          -0.4,
          0.7
        ],
        [
          -0.9,
          0.1
        ],
        [
          0.1,
          0.2
        ]
      ],
      "target": [
        [
          -0.34798429236114614,
          -1.3963802829520962
        ],
        [
          0.30980054218898995,
          -1.156966182624128
        ],
        [
          0.9675853767391258,
          -0.91755208229616
        ],
        [
          1.7193394733678526,
          -0.643935967635625
        ],
        [
          1.7960351736082236,
          0.022485647833620725
        ],
        [
          1.5224190589476887,
          0.7742397444623474
        ],
        [
          0.6936241527347186,
          1.004671954527334
        ],
        [
          -0.015291148642331498,
          0.32097677721986834
        ],
        [
          -0.2799253730398845,
          -0.413848866914511
        ],
        [
          0.625565233413457,
          0.022140538489748562
        ]
      ]
    },
    "symmetric": {
      "source": [
        [
          -1.2,
          -0.6
        ],
        [
          0,
          -0.6
        ],
        [
          1.2,
          -0.6
        ],
        [
          1.2,
          0
        ],
        [
          1.2,
          0.6
        ],
        [
          0,
          0.6
        ],
        [
          -1.2,
          0.6
        ],
        [
          -1.2,
          0
        ]
      ],
      "target": [
        [
          -0.32241905894768885,
          -1.1742397444623474
        ],
        [
          0.8052120859954012,
          -0.763815572471545
        ],
        [
          1.932843230938491,
          -0.3533914004807426
        ],
        [
          1.7276311449430901,
          0.21042417199080243
        ],
        [
          1.5224190589476887,
          0.7742397444623474
        ],
        [
          0.3947879140045988,
          0.363815572471545
        ],
        [
          -0.7328432309384912,
          -0.04660859951925744
        ],
        [
          -0.52763114494309,
          -0.6104241719908025
        ]
      ]
    }
  },
  "cases": {
    "nearby": {
      "dataset": "asymmetric",
      "initial": {
        "x": 0,
        "y": 0,
        "theta": 0
      }
    },
    "bad-start": {
      "dataset": "asymmetric",
      "initial": {
        "x": 0,
        "y": 0,
        "theta": 2.6179938779914944
      }
    },
    "symmetric": {
      "dataset": "symmetric",
      "initial": {
        "x": 0.6,
        "y": -0.2,
        "theta": -2.792526803190927
      }
    }
  },
  "evaluation": {
    "description": "Reference used only for reporting and sanity checks. It is not an input to run_icp or fit_rigid_2d. Array ordering records the generating pairs, but ICP matches solely by nearest geometry.",
    "reference_transform": {
      "x": 0.6,
      "y": -0.2,
      "theta": 0.3490658503988659
    }
  }
}
