private static void ImportLinkData(this UrdfLink urdfLink, Link link, Joint joint) { if (link.inertial == null && joint == null) { urdfLink.IsBaseLink = true; } urdfLink.gameObject.name = link.name; if (joint?.origin != null) { UrdfOrigin.ImportOriginData(urdfLink.transform, joint.origin); } if (link.inertial != null) { UrdfInertial.Create(urdfLink.gameObject, link.inertial); if (joint != null) { UrdfJoint.Create(urdfLink.gameObject, UrdfJoint.GetJointType(joint.type), joint); } } else if (joint != null) { UrdfJoint.Create(urdfLink.gameObject, UrdfJoint.GetJointType(joint.type), joint); } }
public static void Create(GameObject linkObject, Link.Inertial inertial = null) { UrdfInertial urdfInertial = linkObject.AddComponent <UrdfInertial>(); #if UNITY_2020_1_OR_NEWER ArticulationBody robotLink = urdfInertial.GetComponent <ArticulationBody>(); #else Rigidbody robotLink = urdfInertial.GetComponent <Rigidbody>(); #endif if (inertial != null) { robotLink.mass = ((float)inertial.mass > 0)?((float)inertial.mass):minMass; if (inertial.origin != null) { robotLink.centerOfMass = UrdfOrigin.GetPositionFromUrdf(inertial.origin); } else { robotLink.centerOfMass = Vector3.zero; } urdfInertial.ImportInertiaData(inertial); urdfInertial.useUrdfData = true; } urdfInertial.displayInertiaGizmo = false; }
private void ImportInertiaData(Link.Inertial inertial) { Vector3 eigenvalues; Vector3[] eigenvectors; Matrix3x3 rotationMatrix = ToMatrix3x3(inertial.inertia); rotationMatrix.DiagonalizeRealSymmetric(out eigenvalues, out eigenvectors); #if UNITY_2020_1_OR_NEWER ArticulationBody robotLink = GetComponent <ArticulationBody>(); #else Rigidbody robotLink = GetComponent <Rigidbody>(); #endif Vector3 inertiaEulerAngles; if (inertial.origin != null) { inertiaEulerAngles = UrdfOrigin.GetRotationFromUrdf(inertial.origin); } else { inertiaEulerAngles = new Vector3(0, 0, 0); } this.inertialAxisRotation.eulerAngles = inertiaEulerAngles; robotLink.inertiaTensor = ToUnityInertiaTensor(FixMinInertia(eigenvalues)); robotLink.inertiaTensorRotation = ToQuaternion(eigenvectors[0], eigenvectors[1], eigenvectors[2]).Ros2Unity() * this.inertialAxisRotation; this.centerOfMass = robotLink.centerOfMass; this.inertiaTensor = robotLink.inertiaTensor; this.inertiaTensorRotation = robotLink.inertiaTensorRotation; }
public static Link.Collision ExportCollisionData(this UrdfCollision urdfCollision) { UrdfGeometry.CheckForUrdfCompatibility(urdfCollision.transform, urdfCollision.geometryType); Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfCollision.geometryType, urdfCollision.transform, true); string collisionName = urdfCollision.name == "unnamed" ? null : urdfCollision.name; return(new Link.Collision(geometry, collisionName, UrdfOrigin.ExportOriginData(urdfCollision.transform))); }
public static Joint ExportDefaultJoint(Transform transform) { return(new Joint( transform.parent.name + "_" + transform.name + "_joint", JointTypes.Fixed.ToString().ToLower(), transform.parent.name, transform.name, UrdfOrigin.ExportOriginData(transform))); }
public static UrdfCollision Create(Transform parent, Link.Collision collision) { GameObject collisionObject = new GameObject("unnamed"); collisionObject.transform.SetParentAndAlign(parent); UrdfCollision urdfCollision = collisionObject.AddComponent <UrdfCollision>(); urdfCollision.geometryType = UrdfGeometry.GetGeometryType(collision.geometry); UrdfGeometryCollision.Create(collisionObject.transform, urdfCollision.geometryType, collision.geometry); UrdfOrigin.ImportOriginData(collisionObject.transform, collision.origin); return(urdfCollision); }
public static void Create(Transform parent, Link.Visual visual) { GameObject visualObject = new GameObject(visual.name ?? "unnamed"); visualObject.transform.SetParentAndAlign(parent); UrdfVisual urdfVisual = visualObject.AddComponent <UrdfVisual>(); urdfVisual.geometryType = UrdfGeometry.GetGeometryType(visual.geometry); UrdfGeometryVisual.Create(visualObject.transform, urdfVisual.geometryType, visual.geometry); UrdfMaterial.SetUrdfMaterial(visualObject, visual.material); UrdfOrigin.ImportOriginData(visualObject.transform, visual.origin); }
public static Link.Visual ExportVisualData(this UrdfVisual urdfVisual) { UrdfGeometry.CheckForUrdfCompatibility(urdfVisual.transform, urdfVisual.geometryType); Link.Geometry geometry = UrdfGeometry.ExportGeometryData(urdfVisual.geometryType, urdfVisual.transform); Link.Visual.Material material = null; if ((geometry.mesh != null)) { material = UrdfMaterial.ExportMaterialData(urdfVisual.GetComponentInChildren <MeshRenderer>().sharedMaterial); } string visualName = urdfVisual.name == "unnamed" ? null : urdfVisual.name; return(new Link.Visual(geometry, visualName, UrdfOrigin.ExportOriginData(urdfVisual.transform), material)); }
public Joint ExportJointData() { #if UNITY_2020_1_OR_NEWER unityJoint = GetComponent <UnityEngine.ArticulationBody>(); #else unityJoint = GetComponent <UnityEngine.Joint>(); #endif CheckForUrdfCompatibility(); //Data common to all joints Joint joint = new Joint( jointName, JointType.ToString().ToLower(), gameObject.transform.parent.name, gameObject.name, UrdfOrigin.ExportOriginData(transform)); joint.limit = ExportLimitData(); return(ExportSpecificJointData(joint)); }