Skip to content

Commit d987071

Browse files
Bug fix in setting transform of meshes during URDF Import (#15)
* Changing the orientation of the meshes by applying transform * Update the function call to CorrectAxis * Changing names of the variables for consistency
1 parent 20a19f4 commit d987071

File tree

3 files changed

+28
-15
lines changed

3 files changed

+28
-15
lines changed

Editor/CustomEditors/UrdfRobotEditor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public override void OnInspectorGUI()
4545
GUILayout.Space(5);
4646
EditorGUILayout.PropertyField(axisType, new GUIContent("Axis Type"));
4747
serializedObject.ApplyModifiedProperties();
48-
UrdfRobotExtensions.CorrectAxis(urdfRobot.gameObject, urdfRobot.choosenAxis);
48+
UrdfRobotExtensions.CorrectAxis(urdfRobot.gameObject);
4949
GUILayout.Label("Helper Scripts", EditorStyles.boldLabel);
5050
DisplaySettingsToggle(new GUIContent("Controller Script"), urdfRobot.AddController);
5151
DisplaySettingsToggle(new GUIContent("Forward Kinematics Script"), urdfRobot.AddFkRobot);

Editor/NeedsRuntimeConversion/Extensions/UrdfRobotExtensions.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,34 +63,36 @@ public static void Create(string filename, ImportSettings settings)
6363
Undo.RegisterCreatedObjectUndo(robotGameObject, "Create " + robotGameObject.name);
6464
Selection.activeObject = robotGameObject;
6565

66-
CorrectAxis(robotGameObject, settings.choosenAxis);
66+
CorrectAxis(robotGameObject);
6767
CreateCollisionExceptions(robot, robotGameObject);
6868
}
6969

70-
public static void CorrectAxis(GameObject robot, ImportSettings.axisType axis = ImportSettings.axisType.yAxis)
70+
public static void CorrectAxis(GameObject robot)
7171
{
72-
UrdfVisual[] visualMeshList = robot.GetComponentsInChildren<UrdfVisual>();
73-
UrdfCollision[] collisionMeshList = robot.GetComponentsInChildren<UrdfCollision>();
7472
UrdfRobot robotScript = robot.GetComponent<UrdfRobot>();
73+
if (robotScript.CheckOrientation())
74+
return;
75+
Quaternion correctYtoZ = Quaternion.Euler(-90, 0, 90);
76+
Quaternion correctZtoY = Quaternion.Inverse((correctYtoZ));
77+
Quaternion correction = new Quaternion();
7578

76-
robotScript.choosenAxis = axis;
77-
Quaternion correctZtoY = Quaternion.Euler(-90, 0, 90);
78-
Quaternion correction = Quaternion.identity;
79-
80-
if (axis == ImportSettings.axisType.zAxis)
79+
if (robotScript.choosenAxis == ImportSettings.axisType.zAxis)
80+
correction = correctYtoZ;
81+
else
8182
correction = correctZtoY;
8283

83-
84+
UrdfVisual[] visualMeshList = robot.GetComponentsInChildren<UrdfVisual>();
85+
UrdfCollision[] collisionMeshList = robot.GetComponentsInChildren<UrdfCollision>();
8486
foreach (UrdfVisual visual in visualMeshList)
8587
{
86-
visual.transform.localRotation = correction;
88+
visual.transform.localRotation = visual.transform.localRotation * correction;
8789
}
8890

8991
foreach (UrdfCollision collision in collisionMeshList)
9092
{
91-
collision.transform.localRotation = correction;
93+
collision.transform.localRotation = collision.transform.localRotation * correction;
9294
}
93-
95+
robotScript.SetOrientation();
9496
}
9597

9698
private static void CreateCollisionExceptions(Robot robot, GameObject robotGameObject)

Runtime/UrdfComponents/UrdfRobot.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ public enum GeometryTypes { Box, Cylinder, Sphere, Mesh }
99
public class UrdfRobot : MonoBehaviour
1010
{
1111
public string FilePath;
12-
public ImportSettings.axisType choosenAxis;
12+
public ImportSettings.axisType choosenAxis ;
13+
private ImportSettings.axisType currentOrientation = ImportSettings.axisType.yAxis;
1314
public List<CollisionIgnore> collisionExceptions;
1415
#region Configure Robot
1516

@@ -49,6 +50,16 @@ public void ChangeToCorrectedSpace(bool rosSpace)
4950
this.transform.Rotate(0, 180, 0);
5051
}
5152

53+
public bool CheckOrientation()
54+
{
55+
return currentOrientation == choosenAxis;
56+
}
57+
58+
public void SetOrientation()
59+
{
60+
currentOrientation = choosenAxis;
61+
}
62+
5263
public void AddController(bool controller)
5364
{
5465
if (controller && this.gameObject.GetComponent< RosSharp.Control.Controller>() == null)

0 commit comments

Comments
 (0)