{
  "sources": [
    {
      "name": "single_hinge_no_root",
      "source": "single_hinge_no_root",
      "pattern": "/World/Robot/*",
      "has_articulation_root_api": false,
      "usd_joint_prim_count": 1,
      "import_ms": 22.30550005333498,
      "warnings": [
        "No articulation was found but 1 joints were parsed: [/World/Robot/Hinge]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
      ],
      "builder": {
        "body_count": 2,
        "joint_count": 1,
        "articulation_count": 0,
        "joint_labels": [
          "/World/Robot/Hinge"
        ],
        "body_labels": [
          "/World/Robot/Base",
          "/World/Robot/Link"
        ],
        "joint_parent": [
          0
        ],
        "joint_child": [
          1
        ],
        "joint_articulation": [
          -1
        ],
        "joint_coord_count": 1,
        "joint_dof_count": 1
      },
      "tree_inference": {
        "tree_joint_ids": [
          0
        ],
        "tree_joint_labels": [
          "/World/Robot/Hinge"
        ],
        "loop_joint_ids": [],
        "loop_joint_labels": []
      },
      "normal_finalize": "ValueError: Found 1 joint(s) not belonging to any articulation. Call add_articulation() for all joints. Orphan joints: ['/World/Robot/Hinge']",
      "skip_validation_model": {
        "body_count": 2,
        "joint_count": 1,
        "articulation_count": 0,
        "joint_articulation": [
          -1
        ],
        "joint_coord_count": 1,
        "joint_dof_count": 1
      },
      "joint_view_probe": {
        "pattern": "/World/Robot/*",
        "joint_ids": [
          0
        ],
        "joint_labels": [
          "/World/Robot/Hinge"
        ],
        "coord_ids": [
          0
        ],
        "dof_ids": [
          0
        ],
        "coord_count": 1,
        "dof_count": 1
      },
      "invented_articulation_probe": {
        "warnings": [
          "No articulation was found but 1 joints were parsed: [/World/Robot/Hinge]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
        ],
        "error": null,
        "model": {
          "articulation_count": 1,
          "articulation_label": [
            "/invented/no_root"
          ],
          "joint_articulation": [
            0
          ],
          "articulation_start": [
            0,
            1
          ],
          "articulation_end": [
            1
          ]
        },
        "view_default": {
          "joint_labels": [
            "/World/Robot/Hinge"
          ],
          "joint_count": 1
        },
        "view_loop": {
          "joint_labels": [
            "/World/Robot/Hinge"
          ],
          "joint_count": 1
        }
      }
    },
    {
      "name": "ordered_fourbar_no_root",
      "source": "ordered_fourbar_no_root",
      "pattern": "/World/Robot/*",
      "has_articulation_root_api": false,
      "usd_joint_prim_count": 5,
      "import_ms": 11.114599998109043,
      "warnings": [
        "No articulation was found but 5 joints were parsed: [/World/Robot/WorldToGround, /World/Robot/GroundToCrank, /World/Robot/CrankToCoupler, /World/Robot/CouplerToRocker, /World/Robot/RockerToGround]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
      ],
      "builder": {
        "body_count": 4,
        "joint_count": 5,
        "articulation_count": 0,
        "joint_labels": [
          "/World/Robot/WorldToGround",
          "/World/Robot/GroundToCrank",
          "/World/Robot/CrankToCoupler",
          "/World/Robot/CouplerToRocker",
          "/World/Robot/RockerToGround"
        ],
        "body_labels": [
          "/World/Robot/Ground",
          "/World/Robot/Crank",
          "/World/Robot/Coupler",
          "/World/Robot/Rocker"
        ],
        "joint_parent": [
          -1,
          0,
          1,
          2,
          3
        ],
        "joint_child": [
          0,
          1,
          2,
          3,
          0
        ],
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 4,
        "joint_dof_count": 4
      },
      "tree_inference": {
        "tree_joint_ids": [
          0,
          1,
          2,
          3
        ],
        "tree_joint_labels": [
          "/World/Robot/WorldToGround",
          "/World/Robot/GroundToCrank",
          "/World/Robot/CrankToCoupler",
          "/World/Robot/CouplerToRocker"
        ],
        "loop_joint_ids": [
          4
        ],
        "loop_joint_labels": [
          "/World/Robot/RockerToGround"
        ]
      },
      "normal_finalize": "ValueError: Found 5 joint(s) not belonging to any articulation. Call add_articulation() for all joints. Orphan joints: ['/World/Robot/WorldToGround', '/World/Robot/GroundToCrank', '/World/Robot/CrankToCoupler', '/World/Robot/CouplerToRocker', '/World/Robot/RockerToGround']",
      "skip_validation_model": {
        "body_count": 4,
        "joint_count": 5,
        "articulation_count": 0,
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 4,
        "joint_dof_count": 4
      },
      "joint_view_probe": {
        "pattern": "/World/Robot/*",
        "joint_ids": [
          0,
          1,
          2,
          3,
          4
        ],
        "joint_labels": [
          "/World/Robot/WorldToGround",
          "/World/Robot/GroundToCrank",
          "/World/Robot/CrankToCoupler",
          "/World/Robot/CouplerToRocker",
          "/World/Robot/RockerToGround"
        ],
        "coord_ids": [
          0,
          1,
          2,
          3
        ],
        "dof_ids": [
          0,
          1,
          2,
          3
        ],
        "coord_count": 4,
        "dof_count": 4
      },
      "invented_articulation_probe": {
        "warnings": [
          "No articulation was found but 5 joints were parsed: [/World/Robot/WorldToGround, /World/Robot/GroundToCrank, /World/Robot/CrankToCoupler, /World/Robot/CouplerToRocker, /World/Robot/RockerToGround]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
        ],
        "error": null,
        "model": {
          "articulation_count": 1,
          "articulation_label": [
            "/invented/no_root"
          ],
          "joint_articulation": [
            0,
            0,
            0,
            0,
            -1
          ],
          "articulation_start": [
            0,
            5
          ],
          "articulation_end": [
            4
          ]
        },
        "view_default": {
          "joint_labels": [
            "/World/Robot/WorldToGround",
            "/World/Robot/GroundToCrank",
            "/World/Robot/CrankToCoupler",
            "/World/Robot/CouplerToRocker"
          ],
          "joint_count": 4
        },
        "view_loop": {
          "joint_labels": [
            "/World/Robot/WorldToGround",
            "/World/Robot/GroundToCrank",
            "/World/Robot/CrankToCoupler",
            "/World/Robot/CouplerToRocker",
            "/World/Robot/RockerToGround"
          ],
          "joint_count": 5
        }
      }
    },
    {
      "name": "boxes_fourbar",
      "source": "C:\\Users\\eric-\\source\\repos\\newton\\newton\\examples\\assets\\boxes_fourbar.usda",
      "pattern": "/*",
      "has_articulation_root_api": false,
      "usd_joint_prim_count": 4,
      "import_ms": 25.684399995952845,
      "warnings": [
        "No articulation was found but 4 joints were parsed: [/boxes_fourbar/Joints/joint_1, /boxes_fourbar/Joints/joint_2, /boxes_fourbar/Joints/joint_3, /boxes_fourbar/Joints/joint_4]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
      ],
      "builder": {
        "body_count": 4,
        "joint_count": 4,
        "articulation_count": 0,
        "joint_labels": [
          "/boxes_fourbar/Joints/joint_1",
          "/boxes_fourbar/Joints/joint_2",
          "/boxes_fourbar/Joints/joint_3",
          "/boxes_fourbar/Joints/joint_4"
        ],
        "body_labels": [
          "/boxes_fourbar/RigidBodies/body_1",
          "/boxes_fourbar/RigidBodies/body_2",
          "/boxes_fourbar/RigidBodies/body_3",
          "/boxes_fourbar/RigidBodies/body_4"
        ],
        "joint_parent": [
          0,
          1,
          2,
          3
        ],
        "joint_child": [
          1,
          2,
          3,
          0
        ],
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 4,
        "joint_dof_count": 4
      },
      "tree_inference": {
        "tree_joint_ids": [
          0,
          1,
          2
        ],
        "tree_joint_labels": [
          "/boxes_fourbar/Joints/joint_1",
          "/boxes_fourbar/Joints/joint_2",
          "/boxes_fourbar/Joints/joint_3"
        ],
        "loop_joint_ids": [
          3
        ],
        "loop_joint_labels": [
          "/boxes_fourbar/Joints/joint_4"
        ]
      },
      "normal_finalize": "ValueError: Found 4 joint(s) not belonging to any articulation. Call add_articulation() for all joints. Orphan joints: ['/boxes_fourbar/Joints/joint_1', '/boxes_fourbar/Joints/joint_2', '/boxes_fourbar/Joints/joint_3', '/boxes_fourbar/Joints/joint_4']",
      "skip_validation_model": {
        "body_count": 4,
        "joint_count": 4,
        "articulation_count": 0,
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 4,
        "joint_dof_count": 4
      },
      "joint_view_probe": {
        "pattern": "/*",
        "joint_ids": [
          0,
          1,
          2,
          3
        ],
        "joint_labels": [
          "/boxes_fourbar/Joints/joint_1",
          "/boxes_fourbar/Joints/joint_2",
          "/boxes_fourbar/Joints/joint_3",
          "/boxes_fourbar/Joints/joint_4"
        ],
        "coord_ids": [
          0,
          1,
          2,
          3
        ],
        "dof_ids": [
          0,
          1,
          2,
          3
        ],
        "coord_count": 4,
        "dof_count": 4
      },
      "invented_articulation_probe": {
        "warnings": [
          "No articulation was found but 4 joints were parsed: [/boxes_fourbar/Joints/joint_1, /boxes_fourbar/Joints/joint_2, /boxes_fourbar/Joints/joint_3, /boxes_fourbar/Joints/joint_4]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
        ],
        "error": null,
        "model": {
          "articulation_count": 1,
          "articulation_label": [
            "/invented/no_root"
          ],
          "joint_articulation": [
            0,
            0,
            0,
            -1
          ],
          "articulation_start": [
            0,
            4
          ],
          "articulation_end": [
            3
          ]
        },
        "view_default": {
          "joint_labels": [
            "/boxes_fourbar/Joints/joint_1",
            "/boxes_fourbar/Joints/joint_2",
            "/boxes_fourbar/Joints/joint_3"
          ],
          "joint_count": 3
        },
        "view_loop": {
          "joint_labels": [
            "/boxes_fourbar/Joints/joint_1",
            "/boxes_fourbar/Joints/joint_2",
            "/boxes_fourbar/Joints/joint_3",
            "/boxes_fourbar/Joints/joint_4"
          ],
          "joint_count": 4
        }
      }
    },
    {
      "name": "fourbar_pole_no_articulation",
      "source": "C:\\Users\\eric-\\source\\repos\\newton\\newton\\examples\\assets\\Fourbar_pole\\fourbar_pole_no_articulation.usda",
      "pattern": "/fourbar_pole/*",
      "has_articulation_root_api": false,
      "usd_joint_prim_count": 6,
      "import_ms": 31.157299992628396,
      "warnings": [
        "No articulation was found but 6 joints were parsed: [/fourbar_pole/root_joint, /fourbar_pole/ground_to_crank, /fourbar_pole/crank_to_coupler, /fourbar_pole/coupler_to_rocker, /fourbar_pole/rocker_to_ground, /fourbar_pole/coupler_to_pole]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
      ],
      "builder": {
        "body_count": 5,
        "joint_count": 6,
        "articulation_count": 0,
        "joint_labels": [
          "/fourbar_pole/root_joint",
          "/fourbar_pole/ground_to_crank",
          "/fourbar_pole/crank_to_coupler",
          "/fourbar_pole/coupler_to_rocker",
          "/fourbar_pole/rocker_to_ground",
          "/fourbar_pole/coupler_to_pole"
        ],
        "body_labels": [
          "/fourbar_pole/ground_link",
          "/fourbar_pole/crank",
          "/fourbar_pole/coupler",
          "/fourbar_pole/coupler/pole",
          "/fourbar_pole/rocker"
        ],
        "joint_parent": [
          -1,
          0,
          1,
          2,
          4,
          2
        ],
        "joint_child": [
          0,
          1,
          2,
          4,
          0,
          3
        ],
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 5,
        "joint_dof_count": 5
      },
      "tree_inference": {
        "tree_joint_ids": [
          0,
          1,
          2,
          3,
          5
        ],
        "tree_joint_labels": [
          "/fourbar_pole/root_joint",
          "/fourbar_pole/ground_to_crank",
          "/fourbar_pole/crank_to_coupler",
          "/fourbar_pole/coupler_to_rocker",
          "/fourbar_pole/coupler_to_pole"
        ],
        "loop_joint_ids": [
          4
        ],
        "loop_joint_labels": [
          "/fourbar_pole/rocker_to_ground"
        ]
      },
      "normal_finalize": "ValueError: Found 6 joint(s) not belonging to any articulation. Call add_articulation() for all joints. Orphan joints: ['/fourbar_pole/root_joint', '/fourbar_pole/ground_to_crank', '/fourbar_pole/crank_to_coupler', '/fourbar_pole/coupler_to_rocker', '/fourbar_pole/rocker_to_ground']...",
      "skip_validation_model": {
        "body_count": 5,
        "joint_count": 6,
        "articulation_count": 0,
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 5,
        "joint_dof_count": 5
      },
      "joint_view_probe": {
        "pattern": "/fourbar_pole/*",
        "joint_ids": [
          0,
          1,
          2,
          3,
          4,
          5
        ],
        "joint_labels": [
          "/fourbar_pole/root_joint",
          "/fourbar_pole/ground_to_crank",
          "/fourbar_pole/crank_to_coupler",
          "/fourbar_pole/coupler_to_rocker",
          "/fourbar_pole/rocker_to_ground",
          "/fourbar_pole/coupler_to_pole"
        ],
        "coord_ids": [
          0,
          1,
          2,
          3,
          4
        ],
        "dof_ids": [
          0,
          1,
          2,
          3,
          4
        ],
        "coord_count": 5,
        "dof_count": 5
      },
      "invented_articulation_probe": {
        "warnings": [
          "No articulation was found but 6 joints were parsed: [/fourbar_pole/root_joint, /fourbar_pole/ground_to_crank, /fourbar_pole/crank_to_coupler, /fourbar_pole/coupler_to_rocker, /fourbar_pole/rocker_to_ground, /fourbar_pole/coupler_to_pole]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
        ],
        "error": "ValueError: Joints must be contiguous. Got indices [0, 1, 2, 3, 5], but there is a gap between 3 and 5. Create all joints for an articulation before creating joints for another articulation.",
        "model": null,
        "view_default": null,
        "view_loop": null
      }
    },
    {
      "name": "fourbar_pole_floating_no_articulation",
      "source": "C:\\Users\\eric-\\source\\repos\\newton\\newton\\examples\\assets\\Fourbar_pole\\fourbar_pole_floating_no_articulation.usda",
      "pattern": "/fourbar_pole/*",
      "has_articulation_root_api": false,
      "usd_joint_prim_count": 5,
      "import_ms": 28.01869995892048,
      "warnings": [
        "No articulation was found but 5 joints were parsed: [/fourbar_pole/ground_to_crank, /fourbar_pole/crank_to_coupler, /fourbar_pole/coupler_to_rocker, /fourbar_pole/rocker_to_ground, /fourbar_pole/coupler_to_pole]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
      ],
      "builder": {
        "body_count": 5,
        "joint_count": 5,
        "articulation_count": 0,
        "joint_labels": [
          "/fourbar_pole/ground_to_crank",
          "/fourbar_pole/crank_to_coupler",
          "/fourbar_pole/coupler_to_rocker",
          "/fourbar_pole/rocker_to_ground",
          "/fourbar_pole/coupler_to_pole"
        ],
        "body_labels": [
          "/fourbar_pole/ground_link",
          "/fourbar_pole/crank",
          "/fourbar_pole/coupler",
          "/fourbar_pole/coupler/pole",
          "/fourbar_pole/rocker"
        ],
        "joint_parent": [
          0,
          1,
          2,
          4,
          2
        ],
        "joint_child": [
          1,
          2,
          4,
          0,
          3
        ],
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 5,
        "joint_dof_count": 5
      },
      "tree_inference": {
        "tree_joint_ids": [
          0,
          1,
          2,
          4
        ],
        "tree_joint_labels": [
          "/fourbar_pole/ground_to_crank",
          "/fourbar_pole/crank_to_coupler",
          "/fourbar_pole/coupler_to_rocker",
          "/fourbar_pole/coupler_to_pole"
        ],
        "loop_joint_ids": [
          3
        ],
        "loop_joint_labels": [
          "/fourbar_pole/rocker_to_ground"
        ]
      },
      "normal_finalize": "ValueError: Found 5 joint(s) not belonging to any articulation. Call add_articulation() for all joints. Orphan joints: ['/fourbar_pole/ground_to_crank', '/fourbar_pole/crank_to_coupler', '/fourbar_pole/coupler_to_rocker', '/fourbar_pole/rocker_to_ground', '/fourbar_pole/coupler_to_pole']",
      "skip_validation_model": {
        "body_count": 5,
        "joint_count": 5,
        "articulation_count": 0,
        "joint_articulation": [
          -1,
          -1,
          -1,
          -1,
          -1
        ],
        "joint_coord_count": 5,
        "joint_dof_count": 5
      },
      "joint_view_probe": {
        "pattern": "/fourbar_pole/*",
        "joint_ids": [
          0,
          1,
          2,
          3,
          4
        ],
        "joint_labels": [
          "/fourbar_pole/ground_to_crank",
          "/fourbar_pole/crank_to_coupler",
          "/fourbar_pole/coupler_to_rocker",
          "/fourbar_pole/rocker_to_ground",
          "/fourbar_pole/coupler_to_pole"
        ],
        "coord_ids": [
          0,
          1,
          2,
          3,
          4
        ],
        "dof_ids": [
          0,
          1,
          2,
          3,
          4
        ],
        "coord_count": 5,
        "dof_count": 5
      },
      "invented_articulation_probe": {
        "warnings": [
          "No articulation was found but 5 joints were parsed: [/fourbar_pole/ground_to_crank, /fourbar_pole/crank_to_coupler, /fourbar_pole/coupler_to_rocker, /fourbar_pole/rocker_to_ground, /fourbar_pole/coupler_to_pole]. Make sure your USD asset includes an articulation root prim with the PhysicsArticulationRootAPI.\nIf you want to proceed with these orphan joints, make sure to call ModelBuilder.finalize(skip_validation_joints=True) to avoid raising a ValueError. Note that not all solvers will support such a configuration."
        ],
        "error": "ValueError: Joints must be contiguous. Got indices [0, 1, 2, 4], but there is a gap between 2 and 4. Create all joints for an articulation before creating joints for another articulation.",
        "model": null,
        "view_default": null,
        "view_loop": null
      }
    }
  ]
}