{
  "id": "type-h31",
  "revision": "b140be2149b4c4646ff005e054fd23b7589f1b6e1e740f2da929bbb14e0e23ab",
  "regions": [
    {
      "id": "robot",
      "label": "Robot",
      "parent": null
    }
  ],
  "nodes": [
    {
      "id": "camera",
      "label": "Robot camera clock",
      "kind": "N09",
      "region": "robot",
      "ports": [
        {
          "id": "clock",
          "profile": "P15",
          "contract": "SensorClockMappingWithUncertaintyV1",
          "polarity": "Neutral"
        },
        {
          "id": "sample",
          "profile": "P01",
          "contract": "CameraObservationWithClockV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "imu",
      "label": "Robot IMU clock",
      "kind": "N09",
      "region": "robot",
      "ports": [
        {
          "id": "clock",
          "profile": "P15",
          "contract": "SensorClockMappingWithUncertaintyV1",
          "polarity": "Neutral"
        },
        {
          "id": "sample",
          "profile": "P01",
          "contract": "ImuObservationWithClockV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "calibrate",
      "label": "Clock calibration",
      "kind": "N01",
      "region": "robot",
      "ports": [
        {
          "id": "mapping",
          "profile": "P15",
          "contract": "SensorClockMappingWithUncertaintyV1",
          "polarity": "Neutral"
        },
        {
          "id": "evidence",
          "profile": "P24",
          "contract": "ClockCalibrationEvidenceV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "fusion",
      "label": "Localization fusion",
      "kind": "N01",
      "region": "robot",
      "ports": [
        {
          "id": "camera",
          "profile": "P01",
          "contract": "CameraObservationWithClockV1",
          "polarity": "Require"
        },
        {
          "id": "imu",
          "profile": "P01",
          "contract": "ImuObservationWithClockV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "evidence",
      "label": "Calibration evidence",
      "kind": "N37",
      "region": "robot",
      "ports": [
        {
          "id": "record",
          "profile": "P24",
          "contract": "ClockCalibrationEvidenceV1",
          "polarity": "Require"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "alignment",
      "kind": "H31",
      "incidences": [
        {
          "node": "camera",
          "port": "clock",
          "role": "clock",
          "ordinal": 0
        },
        {
          "node": "imu",
          "port": "clock",
          "role": "clock",
          "ordinal": 1
        },
        {
          "node": "calibrate",
          "port": "mapping",
          "role": "calibration",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "camera",
      "kind": "H02",
      "incidences": [
        {
          "node": "camera",
          "port": "sample",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "fusion",
          "port": "camera",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "imu",
      "kind": "H02",
      "incidences": [
        {
          "node": "imu",
          "port": "sample",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "fusion",
          "port": "imu",
          "role": "target",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "evidence",
      "kind": "H27",
      "incidences": [
        {
          "node": "calibrate",
          "port": "evidence",
          "role": "source",
          "ordinal": 0
        },
        {
          "node": "evidence",
          "port": "record",
          "role": "target",
          "ordinal": 0
        }
      ]
    }
  ]
}
