1414using ZO . Sensors ;
1515using ZO . ROS . Unity ;
1616using ZO . ROS . Publisher ;
17+ using ZO . Math ;
1718
1819namespace ZO . Document {
1920
@@ -135,7 +136,7 @@ public void Deserialize(ZOSimDocumentRoot documentRoot, JObject json) {
135136 Matrix4x4 matrix4X4 = new Matrix4x4 ( c0 , c1 , c2 , c3 ) ;
136137 matrix4X4 = matrix4X4 . transpose ; // go from fusion360 row major to Unity column major
137138 rotation = ZO . Math . ZOMatrix4x4Util . GetRotation ( matrix4X4 ) ;
138- translation = ZO . Math . ZOMatrix4x4Util . GetTranslation ( matrix4X4 ) ;
139+ translation = ZO . Math . ZOMatrix4x4Util . Position ( matrix4X4 ) ;
139140 scale = ZO . Math . ZOMatrix4x4Util . GetScale ( matrix4X4 ) ;
140141 }
141142
@@ -1016,35 +1017,36 @@ private static void DeserializeGeometricPrimitive(GameObject go, JObject primiti
10161017
10171018 public XElement XML { get ; }
10181019
1019- protected void BuildURDFVisuals ( Transform trans , XElement link , XElement joint ) {
1020+ protected void BuildURDFVisuals ( Transform visualTransform , XElement link , XElement joint ) {
10201021 // build 3d primitive if exists
1021- MeshFilter meshFilter = trans . GetComponent < MeshFilter > ( ) ;
1022+ MeshFilter meshFilter = visualTransform . GetComponent < MeshFilter > ( ) ;
10221023 if ( meshFilter ) {
10231024
1024- MeshRenderer meshRenderer = trans . GetComponent < MeshRenderer > ( ) ;
1025+ MeshRenderer meshRenderer = visualTransform . GetComponent < MeshRenderer > ( ) ;
10251026 Collider collider = null ;
10261027 XElement visual = new XElement ( "visual" ) ;
1028+ visual . SetAttributeValue ( "name" , visualTransform . name ) ;
10271029 XElement geometry = new XElement ( "geometry" ) ;
10281030
10291031 if ( meshFilter . sharedMesh . name . Contains ( "Cube" ) ) {
10301032 XElement box = new XElement ( "box" ) ;
10311033
1032- Vector3 boxSize = trans . localScale . Unity2RosScale ( ) ;
1034+ Vector3 boxSize = visualTransform . localScale . Unity2RosScale ( ) ;
10331035 box . SetAttributeValue ( "size" , boxSize . ToXMLString ( ) ) ;
10341036 geometry . Add ( box ) ;
10351037
1036- collider = trans . GetComponent < BoxCollider > ( ) ;
1038+ collider = visualTransform . GetComponent < BoxCollider > ( ) ;
10371039 if ( collider ) {
10381040 //TODO: add box collider
10391041 }
10401042 }
10411043 if ( meshFilter . sharedMesh . name . Contains ( "Sphere" ) ) {
10421044 XElement sphere = new XElement ( "sphere" ) ;
1043- float radius = trans . localScale . x / 2.0f ;
1045+ float radius = visualTransform . localScale . x / 2.0f ;
10441046 sphere . SetAttributeValue ( "radius" , radius ) ;
10451047 geometry . Add ( sphere ) ;
10461048
1047- collider = trans . GetComponent < SphereCollider > ( ) ;
1049+ collider = visualTransform . GetComponent < SphereCollider > ( ) ;
10481050 if ( collider ) {
10491051 //TODO: add box collider
10501052 }
@@ -1061,14 +1063,14 @@ protected void BuildURDFVisuals(Transform trans, XElement link, XElement joint)
10611063 // }
10621064 if ( meshFilter . sharedMesh . name . Contains ( "Cylinder" ) ) {
10631065 XElement cylinder = new XElement ( "cylinder" ) ;
1064- float radius = trans . localScale . x / 2.0f ;
1065- float height = trans . localScale . y * 2.0f ;
1066+ float radius = visualTransform . localScale . x / 2.0f ;
1067+ float height = visualTransform . localScale . y * 2.0f ;
10661068 cylinder . SetAttributeValue ( "radius" , radius ) ;
10671069 cylinder . SetAttributeValue ( "length" , height ) ;
10681070
10691071 geometry . Add ( cylinder ) ;
10701072
1071- collider = trans . GetComponent < MeshCollider > ( ) ;
1073+ collider = visualTransform . GetComponent < MeshCollider > ( ) ;
10721074 if ( collider ) {
10731075 //TODO: add box collider
10741076 }
@@ -1077,10 +1079,10 @@ protected void BuildURDFVisuals(Transform trans, XElement link, XElement joint)
10771079
10781080 if ( geometry . HasElements ) {
10791081 // build origin
1080- Vector3 xyz = trans . localPosition . Unity2Ros ( ) ;
1081- Vector3 rpy = new Vector3 ( - trans . localEulerAngles . z * Mathf . Deg2Rad ,
1082- trans . localEulerAngles . x * Mathf . Deg2Rad ,
1083- - trans . localEulerAngles . y * Mathf . Deg2Rad ) ;
1082+ Vector3 xyz = visualTransform . localPosition . Unity2Ros ( ) ;
1083+ Vector3 rpy = new Vector3 ( - visualTransform . localEulerAngles . z * Mathf . Deg2Rad ,
1084+ visualTransform . localEulerAngles . x * Mathf . Deg2Rad ,
1085+ - visualTransform . localEulerAngles . y * Mathf . Deg2Rad ) ;
10841086 // Vector3 xyz = jointTransform.position.Unity2Ros();
10851087 // Vector3 rpy = new Vector3(-transform.eulerAngles.z * Mathf.Deg2Rad,
10861088 // transform.eulerAngles.x * Mathf.Deg2Rad,
@@ -1089,6 +1091,7 @@ protected void BuildURDFVisuals(Transform trans, XElement link, XElement joint)
10891091 XElement origin = new XElement ( "origin" ) ;
10901092 origin . SetAttributeValue ( "xyz" , xyz . ToXMLString ( ) ) ;
10911093 origin . SetAttributeValue ( "rpy" , rpy . ToXMLString ( ) ) ;
1094+
10921095 visual . Add ( origin ) ;
10931096
10941097 visual . Add ( geometry ) ;
@@ -1157,14 +1160,16 @@ public void BuildURDFJoints(ZOSimDocumentRoot documentRoot, XElement robot, ZOSi
11571160 joint . SetAttributeValue ( "type" , "fixed" ) ; //HACK hardwired!
11581161 // build origin
11591162 Transform jointTransform = this . transform ;
1160- Vector3 xyz = jointTransform . localPosition . Unity2Ros ( ) ;
1161- Vector3 rpy = new Vector3 ( - jointTransform . localEulerAngles . z * Mathf . Deg2Rad ,
1162- jointTransform . localEulerAngles . x * Mathf . Deg2Rad ,
1163- - jointTransform . localEulerAngles . y * Mathf . Deg2Rad ) ;
1164- // Vector3 xyz = jointTransform.position.Unity2Ros();
1165- // Vector3 rpy = new Vector3(-transform.eulerAngles.z * Mathf.Deg2Rad,
1166- // transform.eulerAngles.x * Mathf.Deg2Rad,
1167- // -transform.eulerAngles.y * Mathf.Deg2Rad);
1163+ // Vector3 xyz = jointTransform.localPosition.Unity2Ros();
1164+ // Vector3 rpy = new Vector3(-jointTransform.localEulerAngles.z * Mathf.Deg2Rad,
1165+ // jointTransform.localEulerAngles.x * Mathf.Deg2Rad,
1166+ // -jointTransform.localEulerAngles.y * Mathf.Deg2Rad);
1167+
1168+ // remember everything is relative to parent.
1169+ // TODO: THOUGH MAYBE IT IS RELATIVE TO PARENT JOINT WHICH MAY NOT BE THE SAME!!!
1170+ Matrix4x4 jointMatrix = this . transform . WorldTranslationRotationMatrix ( ) * parent . transform . WorldTranslationRotationMatrix ( ) . inverse ;
1171+ Vector3 xyz = jointMatrix . Position ( ) . Unity2Ros ( ) ;
1172+ Vector3 rpy = jointMatrix . rotation . Unity2RosRollPitchYaw ( ) ;
11681173
11691174 XElement origin = new XElement ( "origin" ) ;
11701175 origin . SetAttributeValue ( "xyz" , xyz . ToXMLString ( ) ) ;
0 commit comments