urdf-loader-babylonjs 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -213,6 +213,16 @@ constructor( scene : Scene )
213
213
 
214
214
  Constructor. Scene is the Babylon.js scene that nodes will be created in.
215
215
 
216
+ ### .onMeshLoaded
217
+
218
+ ```js
219
+ onMeshLoaded : ( (mesh : AbstractMesh, originalMaterial : Material | null) => void ) | null
220
+ ```
221
+
222
+ Optional hook fired once per mesh produced by the default mesh loader, right after the mesh has been created and its source material assigned (`StandardMaterial` named `stl-material` for STL imports; the glTF loader's material for `.glb`/`.gltf` imports). The consumer receives the mesh and the source material so it can extract a base color and swap `mesh.material` in place — for example, to replace every mesh with a shared or per-link `StandardMaterial` derived from the glTF `baseColorFactor`.
223
+
224
+ When `onMeshLoaded` is set, URDFLoader will **not** override `mesh.material` with a `<material>` tag parsed from the URDF — the consumer's hook has final say over materials. Set to `null` (the default) to preserve the original URDF-driven material assignment.
225
+
216
226
  ### .load
217
227
 
218
228
  ```js
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "urdf-loader-babylonjs",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "URDF Loader for Babylon.js and webcomponent viewer",
5
5
  "main": "src/URDFLoader.js",
6
6
  "type": "module",
package/src/URDFLoader.js CHANGED
@@ -119,6 +119,12 @@ class URDFLoader {
119
119
  this.packages = '';
120
120
  this.workingPath = '';
121
121
  this.fetchOptions = {};
122
+ // Optional hook: (mesh, originalMaterial) => void. Called once per
123
+ // mesh produced by defaultMeshLoader, after the mesh exists and its
124
+ // original material is assigned (StandardMaterial for STL; the glTF
125
+ // loader's material for GLB/GLTF). Consumers can inspect the source
126
+ // material (e.g. baseColor) and swap mesh.material in place.
127
+ this.onMeshLoaded = null;
122
128
 
123
129
  }
124
130
 
@@ -165,7 +171,11 @@ class URDFLoader {
165
171
  .then(data => {
166
172
 
167
173
  const model = this.parse(data, this.workingPath || workingPath);
168
- onComplete(model);
174
+ // Defer onComplete until every mesh load tracked by the
175
+ // LoadTracker has also finished. parse() kicks off async
176
+ // loadMeshCb calls that increment pending; onLoad fires when
177
+ // pending returns to zero after our own itemEnd below.
178
+ manager.onLoad = () => { onComplete(model); };
169
179
  manager.itemEnd();
170
180
 
171
181
  })
@@ -190,8 +200,10 @@ class URDFLoader {
190
200
  parse(content, workingPath = this.workingPath) {
191
201
 
192
202
  const scene = this.scene;
203
+ const manager = this.manager;
193
204
  const packages = this.packages;
194
205
  const loadMeshCb = this.loadMeshCb;
206
+ const onMeshLoaded = this.onMeshLoaded;
195
207
  const parseVisual = this.parseVisual;
196
208
  const parseCollision = this.parseCollision;
197
209
  const linkMap = {};
@@ -599,9 +611,23 @@ class URDFLoader {
599
611
 
600
612
  }
601
613
 
614
+ // Track each mesh load on the LoadTracker so
615
+ // `onLoad` fires only after all meshes have
616
+ // attached. Without this the top-level
617
+ // `onComplete` runs right after parse returns —
618
+ // before any async STL/GLB loads finish — so
619
+ // callers observe an empty robot tree and can't
620
+ // populate light include-lists, selection sets,
621
+ // etc. from the final mesh set.
622
+ manager.itemStart();
602
623
  loadMeshCb(filePath, scene, (obj, err) => {
603
624
 
604
- if (scene.isDisposed) return;
625
+ if (scene.isDisposed) {
626
+
627
+ manager.itemEnd();
628
+ return;
629
+
630
+ }
605
631
 
606
632
  if (err) {
607
633
 
@@ -609,7 +635,12 @@ class URDFLoader {
609
635
 
610
636
  } else if (obj) {
611
637
 
612
- if (obj instanceof Mesh) {
638
+ // Skip the URDF-material override when the
639
+ // consumer has installed an onMeshLoaded
640
+ // hook — they take full responsibility for
641
+ // mesh materials (including per-primitive
642
+ // handling for multi-mesh glTF imports).
643
+ if (obj instanceof Mesh && !onMeshLoaded) {
613
644
 
614
645
  obj.material = material;
615
646
 
@@ -626,6 +657,8 @@ class URDFLoader {
626
657
 
627
658
  }
628
659
 
660
+ manager.itemEnd();
661
+
629
662
  });
630
663
 
631
664
  }
@@ -707,6 +740,7 @@ class URDFLoader {
707
740
 
708
741
  const mesh = meshes[0];
709
742
  mesh.material = new StandardMaterial('stl-material', scene);
743
+ if (this.onMeshLoaded) this.onMeshLoaded(mesh, mesh.material);
710
744
  done(mesh);
711
745
 
712
746
  } else {
@@ -715,6 +749,7 @@ class URDFLoader {
715
749
  meshes.forEach(m => {
716
750
 
717
751
  m.material = new StandardMaterial('stl-material', scene);
752
+ if (this.onMeshLoaded) this.onMeshLoaded(m, m.material);
718
753
  m.parent = parent;
719
754
 
720
755
  });
@@ -744,12 +779,18 @@ class URDFLoader {
744
779
 
745
780
  if (meshes.length === 1) {
746
781
 
782
+ if (this.onMeshLoaded) this.onMeshLoaded(meshes[0], meshes[0].material);
747
783
  done(meshes[0]);
748
784
 
749
785
  } else if (meshes.length > 1) {
750
786
 
751
787
  const parent = new (Mesh.bind(Mesh, 'gltf-root', scene))();
752
- meshes.forEach(m => { m.parent = parent; });
788
+ meshes.forEach(m => {
789
+
790
+ if (this.onMeshLoaded) this.onMeshLoaded(m, m.material);
791
+ m.parent = parent;
792
+
793
+ });
753
794
  done(parent);
754
795
 
755
796
  }
package/umd/URDFLoader.js CHANGED
@@ -682,6 +682,12 @@
682
682
  this.packages = '';
683
683
  this.workingPath = '';
684
684
  this.fetchOptions = {};
685
+ // Optional hook: (mesh, originalMaterial) => void. Called once per
686
+ // mesh produced by defaultMeshLoader, after the mesh exists and its
687
+ // original material is assigned (StandardMaterial for STL; the glTF
688
+ // loader's material for GLB/GLTF). Consumers can inspect the source
689
+ // material (e.g. baseColor) and swap mesh.material in place.
690
+ this.onMeshLoaded = null;
685
691
 
686
692
  }
687
693
 
@@ -728,7 +734,11 @@
728
734
  .then(data => {
729
735
 
730
736
  const model = this.parse(data, this.workingPath || workingPath);
731
- onComplete(model);
737
+ // Defer onComplete until every mesh load tracked by the
738
+ // LoadTracker has also finished. parse() kicks off async
739
+ // loadMeshCb calls that increment pending; onLoad fires when
740
+ // pending returns to zero after our own itemEnd below.
741
+ manager.onLoad = () => { onComplete(model); };
732
742
  manager.itemEnd();
733
743
 
734
744
  })
@@ -753,8 +763,10 @@
753
763
  parse(content, workingPath = this.workingPath) {
754
764
 
755
765
  const scene = this.scene;
766
+ const manager = this.manager;
756
767
  const packages = this.packages;
757
768
  const loadMeshCb = this.loadMeshCb;
769
+ const onMeshLoaded = this.onMeshLoaded;
758
770
  const parseVisual = this.parseVisual;
759
771
  const parseCollision = this.parseCollision;
760
772
  const linkMap = {};
@@ -1162,9 +1174,23 @@
1162
1174
 
1163
1175
  }
1164
1176
 
1177
+ // Track each mesh load on the LoadTracker so
1178
+ // `onLoad` fires only after all meshes have
1179
+ // attached. Without this the top-level
1180
+ // `onComplete` runs right after parse returns —
1181
+ // before any async STL/GLB loads finish — so
1182
+ // callers observe an empty robot tree and can't
1183
+ // populate light include-lists, selection sets,
1184
+ // etc. from the final mesh set.
1185
+ manager.itemStart();
1165
1186
  loadMeshCb(filePath, scene, (obj, err) => {
1166
1187
 
1167
- if (scene.isDisposed) return;
1188
+ if (scene.isDisposed) {
1189
+
1190
+ manager.itemEnd();
1191
+ return;
1192
+
1193
+ }
1168
1194
 
1169
1195
  if (err) {
1170
1196
 
@@ -1172,7 +1198,12 @@
1172
1198
 
1173
1199
  } else if (obj) {
1174
1200
 
1175
- if (obj instanceof core.Mesh) {
1201
+ // Skip the URDF-material override when the
1202
+ // consumer has installed an onMeshLoaded
1203
+ // hook — they take full responsibility for
1204
+ // mesh materials (including per-primitive
1205
+ // handling for multi-mesh glTF imports).
1206
+ if (obj instanceof core.Mesh && !onMeshLoaded) {
1176
1207
 
1177
1208
  obj.material = material;
1178
1209
 
@@ -1189,6 +1220,8 @@
1189
1220
 
1190
1221
  }
1191
1222
 
1223
+ manager.itemEnd();
1224
+
1192
1225
  });
1193
1226
 
1194
1227
  }
@@ -1270,6 +1303,7 @@
1270
1303
 
1271
1304
  const mesh = meshes[0];
1272
1305
  mesh.material = new core.StandardMaterial('stl-material', scene);
1306
+ if (this.onMeshLoaded) this.onMeshLoaded(mesh, mesh.material);
1273
1307
  done(mesh);
1274
1308
 
1275
1309
  } else {
@@ -1278,6 +1312,7 @@
1278
1312
  meshes.forEach(m => {
1279
1313
 
1280
1314
  m.material = new core.StandardMaterial('stl-material', scene);
1315
+ if (this.onMeshLoaded) this.onMeshLoaded(m, m.material);
1281
1316
  m.parent = parent;
1282
1317
 
1283
1318
  });
@@ -1307,12 +1342,18 @@
1307
1342
 
1308
1343
  if (meshes.length === 1) {
1309
1344
 
1345
+ if (this.onMeshLoaded) this.onMeshLoaded(meshes[0], meshes[0].material);
1310
1346
  done(meshes[0]);
1311
1347
 
1312
1348
  } else if (meshes.length > 1) {
1313
1349
 
1314
1350
  const parent = new (core.Mesh.bind(core.Mesh, 'gltf-root', scene))();
1315
- meshes.forEach(m => { m.parent = parent; });
1351
+ meshes.forEach(m => {
1352
+
1353
+ if (this.onMeshLoaded) this.onMeshLoaded(m, m.material);
1354
+ m.parent = parent;
1355
+
1356
+ });
1316
1357
  done(parent);
1317
1358
 
1318
1359
  }
@@ -1 +1 @@
1
- {"version":3,"file":"URDFLoader.js","sources":["../src/URDFClasses.js","../src/URDFLoader.js"],"sourcesContent":["import { TransformNode, Vector3, Quaternion, Matrix } from '@babylonjs/core';\n\nconst _tempAxis = new Vector3();\nconst _tempQuat = new Quaternion();\nconst _tempQuat2 = new Quaternion();\nconst _tempScale = new Vector3(1.0, 1.0, 1.0);\nconst _tempPosition = new Vector3();\nconst _tempMatrix = new Matrix();\nconst _tempOrigMatrix = new Matrix();\n\nclass URDFBase extends TransformNode {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.rotationQuaternion = new Quaternion();\n this.urdfNode = null;\n this.urdfName = '';\n\n }\n\n // Depth-first traverse matching Three.js behavior\n traverse(callback) {\n\n callback(this);\n for (const child of this.getChildren()) {\n\n if (child.traverse) {\n\n child.traverse(callback);\n\n } else {\n\n callback(child);\n\n }\n\n }\n\n }\n\n copy(source, recursive) {\n\n this.urdfNode = source.urdfNode;\n this.urdfName = source.urdfName;\n\n this.name = source.name;\n this.position.copyFrom(source.position);\n if (source.rotationQuaternion) {\n\n if (!this.rotationQuaternion) {\n\n this.rotationQuaternion = new Quaternion();\n\n }\n this.rotationQuaternion.copyFrom(source.rotationQuaternion);\n\n }\n this.scaling.copyFrom(source.scaling);\n\n if (recursive) {\n\n const children = source.getChildren();\n for (const child of children) {\n\n let clonedChild;\n if (child._clone && child instanceof URDFBase) {\n\n clonedChild = child._clone();\n\n } else if (child.clone) {\n\n // For non-URDF nodes (e.g., Babylon.js Mesh), use native clone\n clonedChild = child.clone(child.name);\n\n }\n if (clonedChild) {\n\n clonedChild.parent = this;\n\n }\n\n }\n\n }\n\n return this;\n\n }\n\n clone(name, newParent) {\n\n const cloned = this._clone();\n if (newParent) {\n\n cloned.parent = newParent;\n\n }\n return cloned;\n\n }\n\n _clone() {\n\n const cloned = new this.constructor(this.name, this.getScene());\n cloned.copy(this, true);\n return cloned;\n\n }\n\n}\n\nclass URDFCollider extends URDFBase {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFCollider = true;\n this.type = 'URDFCollider';\n\n }\n\n}\n\nclass URDFVisual extends URDFBase {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFVisual = true;\n this.type = 'URDFVisual';\n\n }\n\n}\n\nclass URDFLink extends URDFBase {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFLink = true;\n this.type = 'URDFLink';\n\n }\n\n}\n\nclass URDFJoint extends URDFBase {\n\n get jointType() {\n\n return this._jointType;\n\n }\n\n set jointType(v) {\n\n if (this.jointType === v) return;\n this._jointType = v;\n switch (v) {\n\n case 'fixed':\n this.jointValue = [];\n break;\n\n case 'continuous':\n case 'revolute':\n case 'prismatic':\n this.jointValue = new Array(1).fill(0);\n break;\n\n case 'planar':\n // Planar joints are, 3dof: position XY and rotation Z.\n this.jointValue = new Array(3).fill(0);\n this.axis = new Vector3(0, 0, 1);\n break;\n\n case 'floating':\n this.jointValue = new Array(6).fill(0);\n break;\n\n }\n\n }\n\n get angle() {\n\n return this.jointValue[0];\n\n }\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n\n this.isURDFJoint = true;\n this.type = 'URDFJoint';\n\n this.jointValue = null;\n this.jointType = 'fixed';\n this.axis = new Vector3(1, 0, 0);\n this.limit = { lower: 0, upper: 0 };\n this.ignoreLimits = false;\n\n this.origPosition = null;\n this.origQuaternion = null;\n\n this.mimicJoints = [];\n\n }\n\n /* Overrides */\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.jointType = source.jointType;\n this.axis = source.axis.clone();\n this.limit.lower = source.limit.lower;\n this.limit.upper = source.limit.upper;\n this.ignoreLimits = false;\n\n this.jointValue = [...source.jointValue];\n\n this.origPosition = source.origPosition ? source.origPosition.clone() : null;\n this.origQuaternion = source.origQuaternion ? source.origQuaternion.clone() : null;\n\n this.mimicJoints = [...source.mimicJoints];\n\n return this;\n\n }\n\n /* Public Functions */\n /**\n * @param {...number|null} values The joint value components to set, optionally null for no-op\n * @returns {boolean} Whether the invocation of this function resulted in an actual change to the joint value\n */\n setJointValue(...values) {\n\n // Parse all incoming values into numbers except null, which we treat as a no-op for that value component.\n values = values.map(v => v === null ? null : parseFloat(v));\n\n if (!this.origPosition || !this.origQuaternion) {\n\n this.origPosition = this.position.clone();\n this.origQuaternion = this.rotationQuaternion.clone();\n\n }\n\n let didUpdate = false;\n\n this.mimicJoints.forEach(joint => {\n\n didUpdate = joint.updateFromMimickedJoint(...values) || didUpdate;\n\n });\n\n switch (this.jointType) {\n\n case 'fixed': {\n\n return didUpdate;\n\n }\n case 'continuous':\n case 'revolute': {\n\n let angle = values[0];\n if (angle == null) return didUpdate;\n if (angle === this.jointValue[0]) return didUpdate;\n\n if (!this.ignoreLimits && this.jointType === 'revolute') {\n\n angle = Math.min(this.limit.upper, angle);\n angle = Math.max(this.limit.lower, angle);\n\n }\n\n // Three.js: this.quaternion.setFromAxisAngle(this.axis, angle).premultiply(this.origQuaternion);\n // premultiply(q) means result = q * this\n // So: result = origQuaternion * RotationAxis(axis, angle)\n const rotQuat = Quaternion.RotationAxis(this.axis, angle);\n this.origQuaternion.multiplyToRef(rotQuat, this.rotationQuaternion);\n\n if (this.jointValue[0] !== angle) {\n\n this.jointValue[0] = angle;\n this.computeWorldMatrix(true);\n return true;\n\n } else {\n\n return didUpdate;\n\n }\n\n }\n\n case 'prismatic': {\n\n let pos = values[0];\n if (pos == null) return didUpdate;\n if (pos === this.jointValue[0]) return didUpdate;\n\n if (!this.ignoreLimits) {\n\n pos = Math.min(this.limit.upper, pos);\n pos = Math.max(this.limit.lower, pos);\n\n }\n\n this.position.copyFrom(this.origPosition);\n // Rotate axis by the original rotation quaternion\n const rotMatrix = new Matrix();\n Matrix.FromQuaternionToRef(this.origQuaternion, rotMatrix);\n Vector3.TransformNormalToRef(this.axis, rotMatrix, _tempAxis);\n this.position.addInPlace(_tempAxis.scale(pos));\n\n if (this.jointValue[0] !== pos) {\n\n this.jointValue[0] = pos;\n this.computeWorldMatrix(true);\n return true;\n\n } else {\n\n return didUpdate;\n\n }\n\n }\n\n case 'floating': {\n\n // no-op if all values are identical to existing value or are null\n if (this.jointValue.every((value, index) => values[index] === value || values[index] === null)) return didUpdate;\n // Floating joints have six degrees of freedom: X, Y, Z, R, P, Y.\n this.jointValue[0] = values[0] !== null ? values[0] : this.jointValue[0];\n this.jointValue[1] = values[1] !== null ? values[1] : this.jointValue[1];\n this.jointValue[2] = values[2] !== null ? values[2] : this.jointValue[2];\n this.jointValue[3] = values[3] !== null ? values[3] : this.jointValue[3];\n this.jointValue[4] = values[4] !== null ? values[4] : this.jointValue[4];\n this.jointValue[5] = values[5] !== null ? values[5] : this.jointValue[5];\n\n // Compose transform of joint origin and transform due to joint values\n // Three.js: Matrix4.compose(pos, quat, scale) -> Babylon: Matrix.Compose(scale, quat, pos)\n Matrix.ComposeToRef(_tempScale, this.origQuaternion, this.origPosition, _tempOrigMatrix);\n\n // Three.js Euler('XYZ') -> compose quaternion from axis rotations\n // XYZ intrinsic = Qz * Qy * Qx\n const qx = Quaternion.RotationAxis(new Vector3(1, 0, 0), this.jointValue[3]);\n const qy = Quaternion.RotationAxis(new Vector3(0, 1, 0), this.jointValue[4]);\n const qz = Quaternion.RotationAxis(new Vector3(0, 0, 1), this.jointValue[5]);\n // XYZ order: apply X first, then Y, then Z -> qz * qy * qx\n qz.multiplyToRef(qy, _tempQuat);\n _tempQuat.multiplyToRef(qx, _tempQuat2);\n\n _tempPosition.set(this.jointValue[0], this.jointValue[1], this.jointValue[2]);\n Matrix.ComposeToRef(_tempScale, _tempQuat2, _tempPosition, _tempMatrix);\n\n // Three.js: _tempOrigTransform.premultiply(_tempTransform) means _tempTransform * _tempOrigTransform\n _tempMatrix.multiplyToRef(_tempOrigMatrix, _tempOrigMatrix);\n\n // Decompose: Babylon decompose(scale, rotation, translation)\n _tempOrigMatrix.decompose(_tempScale, _tempQuat, _tempPosition);\n this.position.copyFrom(_tempPosition);\n this.rotationQuaternion.copyFrom(_tempQuat);\n\n // Reset temp scale\n _tempScale.set(1, 1, 1);\n\n this.computeWorldMatrix(true);\n return true;\n }\n\n case 'planar': {\n\n // no-op if all values are identical to existing value or are null\n if (this.jointValue.every((value, index) => values[index] === value || values[index] === null)) return didUpdate;\n\n this.jointValue[0] = values[0] !== null ? values[0] : this.jointValue[0];\n this.jointValue[1] = values[1] !== null ? values[1] : this.jointValue[1];\n this.jointValue[2] = values[2] !== null ? values[2] : this.jointValue[2];\n\n // Compose transform of joint origin and transform due to joint values\n Matrix.ComposeToRef(_tempScale, this.origQuaternion, this.origPosition, _tempOrigMatrix);\n const axisQuat = Quaternion.RotationAxis(this.axis, this.jointValue[2]);\n _tempPosition.set(this.jointValue[0], this.jointValue[1], 0.0);\n Matrix.ComposeToRef(_tempScale, axisQuat, _tempPosition, _tempMatrix);\n\n // Calculate new transform: premultiply means _tempTransform * _tempOrigTransform\n _tempMatrix.multiplyToRef(_tempOrigMatrix, _tempOrigMatrix);\n\n _tempOrigMatrix.decompose(_tempScale, _tempQuat, _tempPosition);\n this.position.copyFrom(_tempPosition);\n this.rotationQuaternion.copyFrom(_tempQuat);\n\n // Reset temp scale\n _tempScale.set(1, 1, 1);\n\n this.computeWorldMatrix(true);\n return true;\n }\n\n }\n\n return didUpdate;\n\n }\n\n}\n\nclass URDFMimicJoint extends URDFJoint {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.type = 'URDFMimicJoint';\n this.mimicJoint = null;\n this.offset = 0;\n this.multiplier = 1;\n\n }\n\n updateFromMimickedJoint(...values) {\n\n const modifiedValues = values.map(x => x * this.multiplier + this.offset);\n return super.setJointValue(...modifiedValues);\n\n }\n\n /* Overrides */\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.mimicJoint = source.mimicJoint;\n this.offset = source.offset;\n this.multiplier = source.multiplier;\n\n return this;\n\n }\n\n}\n\nclass URDFRobot extends URDFLink {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFRobot = true;\n this.urdfNode = null;\n\n this.urdfRobotNode = null;\n this.robotName = null;\n\n this.links = null;\n this.joints = null;\n this.colliders = null;\n this.visual = null;\n this.frames = null;\n\n }\n\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.urdfRobotNode = source.urdfRobotNode;\n this.robotName = source.robotName;\n\n this.links = {};\n this.joints = {};\n this.colliders = {};\n this.visual = {};\n\n this.traverse(c => {\n\n if (c.isURDFJoint && c.urdfName in source.joints) {\n\n this.joints[c.urdfName] = c;\n\n }\n\n if (c.isURDFLink && c.urdfName in source.links) {\n\n this.links[c.urdfName] = c;\n\n }\n\n if (c.isURDFCollider && c.urdfName in source.colliders) {\n\n this.colliders[c.urdfName] = c;\n\n }\n\n if (c.isURDFVisual && c.urdfName in source.visual) {\n\n this.visual[c.urdfName] = c;\n\n }\n\n });\n\n // Repair mimic joint references once we've re-accumulated all our joint data\n for (const joint in this.joints) {\n this.joints[joint].mimicJoints = this.joints[joint].mimicJoints.map((mimicJoint) => this.joints[mimicJoint.name]);\n }\n\n this.frames = {\n ...this.colliders,\n ...this.visual,\n ...this.links,\n ...this.joints,\n };\n\n return this;\n\n }\n\n getFrame(name) {\n\n return this.frames[name];\n\n }\n\n setJointValue(jointName, ...angle) {\n\n const joint = this.joints[jointName];\n if (joint) {\n\n return joint.setJointValue(...angle);\n\n }\n\n return false;\n }\n\n setJointValues(values) {\n\n let didChange = false;\n for (const name in values) {\n\n const value = values[name];\n if (Array.isArray(value)) {\n\n didChange = this.setJointValue(name, ...value) || didChange;\n\n } else {\n\n didChange = this.setJointValue(name, value) || didChange;\n\n }\n\n }\n\n return didChange;\n\n }\n\n}\n\nexport { URDFRobot, URDFLink, URDFJoint, URDFMimicJoint, URDFVisual, URDFCollider };\n","import { StandardMaterial, Color3, Texture, MeshBuilder, Mesh, Vector3, Quaternion, Material, SceneLoader } from '@babylonjs/core';\nimport { STLFileLoader } from '@babylonjs/loaders/STL/stlFileLoader.js';\nimport '@babylonjs/loaders/glTF';\n\n// Prevent Y/Z axis swap — URDF coordinates should be used as-is in a right-handed scene\nSTLFileLoader.DO_NOT_ALTER_FILE_COORDINATES = true;\nimport { URDFRobot, URDFJoint, URDFLink, URDFCollider, URDFVisual, URDFMimicJoint } from './URDFClasses.js';\n\n/*\nReference coordinate frames for Babylon.js and ROS.\nBabylon.js is LEFT-handed, ROS/URDF is RIGHT-handed.\nTo handle this, apply scaling (1, 1, -1) on the robot root node\n(handled in the viewer component).\n\nBabylon.js\n Y\n |\n |\n .-----X\n \\\n Z (into screen, left-handed)\n\nROS URDF\n Z\n | X\n | /\n Y-----.\n\n*/\n\nconst tempQuaternion = new Quaternion();\n\n// Simple load tracker replacing THREE.LoadingManager\nclass LoadTracker {\n\n constructor() {\n\n this._pending = 0;\n this.onLoad = null;\n\n }\n\n itemStart() {\n\n this._pending++;\n\n }\n\n itemEnd() {\n\n this._pending--;\n if (this._pending === 0 && this.onLoad) {\n\n this.onLoad();\n\n }\n\n }\n\n itemError(url) {\n\n console.error(`URDFLoader: Failed to load: ${ url }`);\n\n }\n\n}\n\n// take a vector \"x y z\" and process it into\n// an array [x, y, z]\nfunction processTuple(val) {\n\n if (!val) return [0, 0, 0];\n return val.trim().split(/\\s+/g).map(num => parseFloat(num));\n\n}\n\n// Extract the base URL from a full URL path\nfunction extractUrlBase(url) {\n\n return url.substring(0, url.lastIndexOf('/') + 1);\n\n}\n\n// applies a rotation to a Babylon.js node in URDF order\nfunction applyRotation(obj, rpy, additive = false) {\n\n // if additive is true the rotation is applied in\n // addition to the existing rotation\n if (!additive) {\n\n obj.rotationQuaternion = new Quaternion();\n\n }\n\n // URDF uses ZYX Euler order (intrinsic)\n // ZYX intrinsic = Qz * Qy * Qx\n const qx = Quaternion.RotationAxis(new Vector3(1, 0, 0), rpy[0]);\n const qy = Quaternion.RotationAxis(new Vector3(0, 1, 0), rpy[1]);\n const qz = Quaternion.RotationAxis(new Vector3(0, 0, 1), rpy[2]);\n const rpyQuat = qz.multiply(qy).multiply(qx);\n\n rpyQuat.multiplyToRef(obj.rotationQuaternion, tempQuaternion);\n obj.rotationQuaternion.copyFrom(tempQuaternion);\n\n}\n\n/* URDFLoader Class */\n// Loads and reads a URDF file into a Babylon.js TransformNode format\nexport default\nclass URDFLoader {\n\n constructor(scene) {\n\n this.scene = scene || null;\n this.manager = new LoadTracker();\n this.loadMeshCb = this.defaultMeshLoader.bind(this);\n this.parseVisual = true;\n this.parseCollision = false;\n this.packages = '';\n this.workingPath = '';\n this.fetchOptions = {};\n\n }\n\n /* Public API */\n loadAsync(urdf) {\n\n return new Promise((resolve, reject) => {\n\n this.load(urdf, resolve, null, reject);\n\n });\n\n }\n\n // urdf: The path to the URDF within the package OR absolute\n // onComplete: Callback that is passed the model once loaded\n load(urdf, onComplete, onProgress, onError) {\n\n const manager = this.manager;\n const workingPath = extractUrlBase(urdf);\n const urdfPath = urdf;\n\n manager.itemStart();\n\n fetch(urdfPath, this.fetchOptions)\n .then(res => {\n\n if (res.ok) {\n\n if (onProgress) {\n\n onProgress(null);\n\n }\n return res.text();\n\n } else {\n\n throw new Error(`URDFLoader: Failed to load url '${ urdfPath }' with error code ${ res.status } : ${ res.statusText }.`);\n\n }\n\n })\n .then(data => {\n\n const model = this.parse(data, this.workingPath || workingPath);\n onComplete(model);\n manager.itemEnd();\n\n })\n .catch(e => {\n\n if (onError) {\n\n onError(e);\n\n } else {\n\n console.error('URDFLoader: Error loading file.', e);\n\n }\n manager.itemError(urdfPath);\n manager.itemEnd();\n\n });\n\n }\n\n parse(content, workingPath = this.workingPath) {\n\n const scene = this.scene;\n const packages = this.packages;\n const loadMeshCb = this.loadMeshCb;\n const parseVisual = this.parseVisual;\n const parseCollision = this.parseCollision;\n const linkMap = {};\n const jointMap = {};\n const materialMap = {};\n\n // Resolves the path of mesh files\n function resolvePath(path) {\n\n if (!/^package:\\/\\//.test(path)) {\n\n return workingPath ? workingPath + path : path;\n\n }\n\n // Remove \"package://\" keyword and split meshPath at the first slash\n const [targetPkg, relPath] = path.replace(/^package:\\/\\//, '').split(/\\/(.+)/);\n\n if (typeof packages === 'string') {\n\n // \"pkg\" is one single package\n if (packages.endsWith(targetPkg)) {\n\n // \"pkg\" is the target package\n return packages + '/' + relPath;\n\n } else {\n\n // Assume \"pkg\" is the target package's parent directory\n return packages + '/' + targetPkg + '/' + relPath;\n\n }\n\n } else if (packages instanceof Function) {\n\n return packages(targetPkg) + '/' + relPath;\n\n } else if (typeof packages === 'object') {\n\n // \"pkg\" is a map of packages\n if (targetPkg in packages) {\n\n return packages[targetPkg] + '/' + relPath;\n\n } else {\n\n console.error(`URDFLoader : ${ targetPkg } not found in provided package list.`);\n return null;\n\n }\n\n }\n\n }\n\n // Process the URDF text format\n function processUrdf(data) {\n\n let children;\n if (data instanceof Document) {\n\n children = [ ...data.children ];\n\n } else if (data instanceof Element) {\n\n children = [ data ];\n\n } else {\n\n const parser = new DOMParser();\n const urdf = parser.parseFromString(data, 'text/xml');\n children = [ ...urdf.children ];\n\n }\n\n const robotNode = children.filter(c => c.nodeName === 'robot').pop();\n return processRobot(robotNode);\n\n }\n\n // Process the <robot> node\n function processRobot(robot) {\n\n const robotNodes = [ ...robot.children ];\n const links = robotNodes.filter(c => c.nodeName.toLowerCase() === 'link');\n const joints = robotNodes.filter(c => c.nodeName.toLowerCase() === 'joint');\n const materials = robotNodes.filter(c => c.nodeName.toLowerCase() === 'material');\n const obj = new URDFRobot('', scene);\n\n obj.robotName = robot.getAttribute('name');\n obj.urdfRobotNode = robot;\n\n // Create the <material> map\n materials.forEach(m => {\n\n const name = m.getAttribute('name');\n materialMap[name] = processMaterial(m);\n\n });\n\n // Create the <link> map\n const visualMap = {};\n const colliderMap = {};\n links.forEach(l => {\n\n const name = l.getAttribute('name');\n const isRoot = robot.querySelector(`child[link=\"${ name }\"]`) === null;\n linkMap[name] = processLink(l, visualMap, colliderMap, isRoot ? obj : null);\n\n });\n\n // Create the <joint> map\n joints.forEach(j => {\n\n const name = j.getAttribute('name');\n jointMap[name] = processJoint(j);\n\n });\n\n obj.joints = jointMap;\n obj.links = linkMap;\n obj.colliders = colliderMap;\n obj.visual = visualMap;\n\n // Link up mimic joints\n const jointList = Object.values(jointMap);\n jointList.forEach(j => {\n\n if (j instanceof URDFMimicJoint) {\n\n jointMap[j.mimicJoint].mimicJoints.push(j);\n\n }\n\n });\n\n // Detect infinite loops of mimic joints\n jointList.forEach(j => {\n\n const uniqueJoints = new Set();\n const iterFunction = joint => {\n\n if (uniqueJoints.has(joint)) {\n\n throw new Error('URDFLoader: Detected an infinite loop of mimic joints.');\n\n }\n\n uniqueJoints.add(joint);\n joint.mimicJoints.forEach(j => {\n\n iterFunction(j);\n\n });\n\n };\n\n iterFunction(j);\n });\n\n obj.frames = {\n ...colliderMap,\n ...visualMap,\n ...linkMap,\n ...jointMap,\n };\n\n return obj;\n\n }\n\n // Process joint nodes and parent them\n function processJoint(joint) {\n\n const children = [ ...joint.children ];\n const jointType = joint.getAttribute('type');\n\n let obj;\n\n const mimicTag = children.find(n => n.nodeName.toLowerCase() === 'mimic');\n if (mimicTag) {\n\n obj = new URDFMimicJoint('', scene);\n obj.mimicJoint = mimicTag.getAttribute('joint');\n obj.multiplier = parseFloat(mimicTag.getAttribute('multiplier') || 1.0);\n obj.offset = parseFloat(mimicTag.getAttribute('offset') || 0.0);\n\n } else {\n\n obj = new URDFJoint('', scene);\n\n }\n\n obj.urdfNode = joint;\n obj.name = joint.getAttribute('name');\n obj.urdfName = obj.name;\n obj.jointType = jointType;\n\n let parent = null;\n let child = null;\n let xyz = [0, 0, 0];\n let rpy = [0, 0, 0];\n\n // Extract the attributes\n children.forEach(n => {\n\n const type = n.nodeName.toLowerCase();\n if (type === 'origin') {\n\n xyz = processTuple(n.getAttribute('xyz'));\n rpy = processTuple(n.getAttribute('rpy'));\n\n } else if (type === 'child') {\n\n child = linkMap[n.getAttribute('link')];\n\n } else if (type === 'parent') {\n\n parent = linkMap[n.getAttribute('link')];\n\n } else if (type === 'limit') {\n\n obj.limit.lower = parseFloat(n.getAttribute('lower') || obj.limit.lower);\n obj.limit.upper = parseFloat(n.getAttribute('upper') || obj.limit.upper);\n\n }\n });\n\n // Join the links - Babylon.js uses child.parent = parentNode\n obj.parent = parent;\n child.parent = obj;\n applyRotation(obj, rpy);\n obj.position.set(xyz[0], xyz[1], xyz[2]);\n\n // Set up the rotate function\n const axisNode = children.filter(n => n.nodeName.toLowerCase() === 'axis')[0];\n\n if (axisNode) {\n\n const axisXYZ = axisNode.getAttribute('xyz').split(/\\s+/g).map(num => parseFloat(num));\n obj.axis = new Vector3(axisXYZ[0], axisXYZ[1], axisXYZ[2]);\n obj.axis.normalize();\n\n }\n\n return obj;\n\n }\n\n // Process the <link> nodes\n function processLink(link, visualMap, colliderMap, target = null) {\n\n if (target === null) {\n\n target = new URDFLink('', scene);\n\n }\n\n const children = [ ...link.children ];\n target.name = link.getAttribute('name');\n target.urdfName = target.name;\n target.urdfNode = link;\n\n if (parseVisual) {\n\n const visualNodes = children.filter(n => n.nodeName.toLowerCase() === 'visual');\n visualNodes.forEach(vn => {\n\n const v = processLinkElement(vn, materialMap);\n v.parent = target;\n\n if (vn.hasAttribute('name')) {\n\n const name = vn.getAttribute('name');\n v.name = name;\n v.urdfName = name;\n visualMap[name] = v;\n\n }\n\n });\n\n }\n\n if (parseCollision) {\n\n const collisionNodes = children.filter(n => n.nodeName.toLowerCase() === 'collision');\n collisionNodes.forEach(cn => {\n\n const c = processLinkElement(cn);\n c.parent = target;\n\n if (cn.hasAttribute('name')) {\n\n const name = cn.getAttribute('name');\n c.name = name;\n c.urdfName = name;\n colliderMap[name] = c;\n\n }\n\n });\n\n }\n\n return target;\n\n }\n\n function processMaterial(node) {\n\n const matNodes = [ ...node.children ];\n const material = new StandardMaterial(node.getAttribute('name') || '', scene);\n\n material.name = node.getAttribute('name') || '';\n matNodes.forEach(n => {\n\n const type = n.nodeName.toLowerCase();\n if (type === 'color') {\n\n const rgba =\n n\n .getAttribute('rgba')\n .split(/\\s/g)\n .map(v => parseFloat(v));\n\n material.diffuseColor = new Color3(rgba[0], rgba[1], rgba[2]);\n material.alpha = rgba[3];\n if (rgba[3] < 1) {\n\n material.transparencyMode = Material.MATERIAL_ALPHABLEND;\n material.disableDepthWrite = true;\n\n }\n\n } else if (type === 'texture') {\n\n // The URDF spec does not require that the <texture/> tag include\n // a filename attribute so skip loading the texture if not provided.\n const filename = n.getAttribute('filename');\n if (filename) {\n\n const filePath = resolvePath(filename);\n material.diffuseTexture = new Texture(filePath, scene);\n\n }\n\n }\n });\n\n return material;\n\n }\n\n // Process the visual and collision nodes into meshes\n function processLinkElement(vn, materialMap = {}) {\n\n const isCollisionNode = vn.nodeName.toLowerCase() === 'collision';\n const children = [ ...vn.children ];\n let material = null;\n\n // get the material first\n const materialNode = children.filter(n => n.nodeName.toLowerCase() === 'material')[0];\n if (materialNode) {\n\n const name = materialNode.getAttribute('name');\n if (name && name in materialMap) {\n\n material = materialMap[name];\n\n } else {\n\n material = processMaterial(materialNode);\n\n }\n\n } else {\n\n material = new StandardMaterial('', scene);\n\n }\n\n const group = isCollisionNode ? new URDFCollider('', scene) : new URDFVisual('', scene);\n group.urdfNode = vn;\n\n children.forEach(n => {\n\n const type = n.nodeName.toLowerCase();\n if (type === 'geometry') {\n\n const geoType = n.children[0].nodeName.toLowerCase();\n if (geoType === 'mesh') {\n\n const filename = n.children[0].getAttribute('filename');\n const filePath = resolvePath(filename);\n\n // file path is null if a package directory is not provided.\n if (filePath !== null) {\n\n const scaleAttr = n.children[0].getAttribute('scale');\n if (scaleAttr) {\n\n const scale = processTuple(scaleAttr);\n group.scaling.set(scale[0], scale[1], scale[2]);\n\n }\n\n loadMeshCb(filePath, scene, (obj, err) => {\n\n if (scene.isDisposed) return;\n\n if (err) {\n\n console.error('URDFLoader: Error loading mesh.', err);\n\n } else if (obj) {\n\n if (obj instanceof Mesh) {\n\n obj.material = material;\n\n }\n\n // We don't expect non identity rotations or positions.\n obj.position.set(0, 0, 0);\n if (obj.rotationQuaternion) {\n\n obj.rotationQuaternion.copyFrom(Quaternion.Identity());\n\n }\n obj.parent = group;\n\n }\n\n });\n\n }\n\n } else if (geoType === 'box') {\n\n const primitiveModel = MeshBuilder.CreateBox('box', { size: 1 }, scene);\n primitiveModel.material = material;\n\n const size = processTuple(n.children[0].getAttribute('size'));\n primitiveModel.scaling.set(size[0], size[1], size[2]);\n\n primitiveModel.parent = group;\n\n } else if (geoType === 'sphere') {\n\n const primitiveModel = MeshBuilder.CreateSphere('sphere', { diameter: 2, segments: 30 }, scene);\n primitiveModel.material = material;\n\n const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;\n primitiveModel.scaling.set(radius, radius, radius);\n\n primitiveModel.parent = group;\n\n } else if (geoType === 'cylinder') {\n\n const primitiveModel = MeshBuilder.CreateCylinder('cylinder', { diameter: 2, height: 1, tessellation: 30 }, scene);\n primitiveModel.material = material;\n\n const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;\n const length = parseFloat(n.children[0].getAttribute('length')) || 0;\n // Three.js cylinder is Y-up, Babylon.js cylinder is also Y-up\n // Three.js original: scale(radius, length, radius), rotation(PI/2, 0, 0)\n // The rotation makes the cylinder lie along the Z axis (URDF convention)\n primitiveModel.scaling.set(radius, length, radius);\n primitiveModel.rotationQuaternion = Quaternion.RotationAxis(new Vector3(1, 0, 0), Math.PI / 2);\n\n primitiveModel.parent = group;\n\n }\n\n } else if (type === 'origin') {\n\n const xyz = processTuple(n.getAttribute('xyz'));\n const rpy = processTuple(n.getAttribute('rpy'));\n\n group.position.set(xyz[0], xyz[1], xyz[2]);\n group.rotationQuaternion = new Quaternion();\n applyRotation(group, rpy);\n\n }\n\n });\n\n return group;\n\n }\n\n return processUrdf(content);\n\n }\n\n // Default mesh loading function\n defaultMeshLoader(path, scene, done) {\n\n if (/\\.stl$/i.test(path)) {\n\n const rootUrl = path.substring(0, path.lastIndexOf('/') + 1);\n const fileName = path.substring(path.lastIndexOf('/') + 1);\n\n SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {\n\n if (scene.isDisposed) return;\n\n if (meshes.length > 0) {\n\n // If multiple meshes, create a parent node\n if (meshes.length === 1) {\n\n const mesh = meshes[0];\n mesh.material = new StandardMaterial('stl-material', scene);\n done(mesh);\n\n } else {\n\n const parent = new (Mesh.bind(Mesh, 'stl-root', scene))();\n meshes.forEach(m => {\n\n m.material = new StandardMaterial('stl-material', scene);\n m.parent = parent;\n\n });\n done(parent);\n\n }\n\n }\n\n }, null, (scene, message, exception) => {\n\n if (scene.isDisposed) return;\n\n console.warn(`URDFLoader: Could not load STL at ${ path }.`, message);\n done(null, exception || new Error(message));\n\n });\n\n } else if (/\\.(glb|gltf)$/i.test(path)) {\n\n const rootUrl = path.substring(0, path.lastIndexOf('/') + 1);\n const fileName = path.substring(path.lastIndexOf('/') + 1);\n\n SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {\n\n if (scene.isDisposed) return;\n\n if (meshes.length === 1) {\n\n done(meshes[0]);\n\n } else if (meshes.length > 1) {\n\n const parent = new (Mesh.bind(Mesh, 'gltf-root', scene))();\n meshes.forEach(m => { m.parent = parent; });\n done(parent);\n\n }\n\n }, null, (scene, message, exception) => {\n\n if (scene.isDisposed) return;\n\n console.warn(`URDFLoader: Could not load glTF at ${ path }.`, message);\n done(null, exception || new Error(message));\n\n });\n\n } else if (/\\.dae$/i.test(path)) {\n\n console.warn(`URDFLoader: DAE/COLLADA files are not supported in Babylon.js. Please convert to glTF: ${ path }`);\n done(null, new Error('DAE files not supported. Convert to glTF.'));\n\n } else {\n\n console.warn(`URDFLoader: Could not load model at ${ path }.\\nNo loader available`);\n\n }\n\n }\n\n}\n"],"names":["Vector3","Quaternion","Matrix","TransformNode","STLFileLoader","StandardMaterial","Color3","Material","Texture","Mesh","MeshBuilder","SceneLoader"],"mappings":"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"}
1
+ {"version":3,"file":"URDFLoader.js","sources":["../src/URDFClasses.js","../src/URDFLoader.js"],"sourcesContent":["import { TransformNode, Vector3, Quaternion, Matrix } from '@babylonjs/core';\n\nconst _tempAxis = new Vector3();\nconst _tempQuat = new Quaternion();\nconst _tempQuat2 = new Quaternion();\nconst _tempScale = new Vector3(1.0, 1.0, 1.0);\nconst _tempPosition = new Vector3();\nconst _tempMatrix = new Matrix();\nconst _tempOrigMatrix = new Matrix();\n\nclass URDFBase extends TransformNode {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.rotationQuaternion = new Quaternion();\n this.urdfNode = null;\n this.urdfName = '';\n\n }\n\n // Depth-first traverse matching Three.js behavior\n traverse(callback) {\n\n callback(this);\n for (const child of this.getChildren()) {\n\n if (child.traverse) {\n\n child.traverse(callback);\n\n } else {\n\n callback(child);\n\n }\n\n }\n\n }\n\n copy(source, recursive) {\n\n this.urdfNode = source.urdfNode;\n this.urdfName = source.urdfName;\n\n this.name = source.name;\n this.position.copyFrom(source.position);\n if (source.rotationQuaternion) {\n\n if (!this.rotationQuaternion) {\n\n this.rotationQuaternion = new Quaternion();\n\n }\n this.rotationQuaternion.copyFrom(source.rotationQuaternion);\n\n }\n this.scaling.copyFrom(source.scaling);\n\n if (recursive) {\n\n const children = source.getChildren();\n for (const child of children) {\n\n let clonedChild;\n if (child._clone && child instanceof URDFBase) {\n\n clonedChild = child._clone();\n\n } else if (child.clone) {\n\n // For non-URDF nodes (e.g., Babylon.js Mesh), use native clone\n clonedChild = child.clone(child.name);\n\n }\n if (clonedChild) {\n\n clonedChild.parent = this;\n\n }\n\n }\n\n }\n\n return this;\n\n }\n\n clone(name, newParent) {\n\n const cloned = this._clone();\n if (newParent) {\n\n cloned.parent = newParent;\n\n }\n return cloned;\n\n }\n\n _clone() {\n\n const cloned = new this.constructor(this.name, this.getScene());\n cloned.copy(this, true);\n return cloned;\n\n }\n\n}\n\nclass URDFCollider extends URDFBase {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFCollider = true;\n this.type = 'URDFCollider';\n\n }\n\n}\n\nclass URDFVisual extends URDFBase {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFVisual = true;\n this.type = 'URDFVisual';\n\n }\n\n}\n\nclass URDFLink extends URDFBase {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFLink = true;\n this.type = 'URDFLink';\n\n }\n\n}\n\nclass URDFJoint extends URDFBase {\n\n get jointType() {\n\n return this._jointType;\n\n }\n\n set jointType(v) {\n\n if (this.jointType === v) return;\n this._jointType = v;\n switch (v) {\n\n case 'fixed':\n this.jointValue = [];\n break;\n\n case 'continuous':\n case 'revolute':\n case 'prismatic':\n this.jointValue = new Array(1).fill(0);\n break;\n\n case 'planar':\n // Planar joints are, 3dof: position XY and rotation Z.\n this.jointValue = new Array(3).fill(0);\n this.axis = new Vector3(0, 0, 1);\n break;\n\n case 'floating':\n this.jointValue = new Array(6).fill(0);\n break;\n\n }\n\n }\n\n get angle() {\n\n return this.jointValue[0];\n\n }\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n\n this.isURDFJoint = true;\n this.type = 'URDFJoint';\n\n this.jointValue = null;\n this.jointType = 'fixed';\n this.axis = new Vector3(1, 0, 0);\n this.limit = { lower: 0, upper: 0 };\n this.ignoreLimits = false;\n\n this.origPosition = null;\n this.origQuaternion = null;\n\n this.mimicJoints = [];\n\n }\n\n /* Overrides */\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.jointType = source.jointType;\n this.axis = source.axis.clone();\n this.limit.lower = source.limit.lower;\n this.limit.upper = source.limit.upper;\n this.ignoreLimits = false;\n\n this.jointValue = [...source.jointValue];\n\n this.origPosition = source.origPosition ? source.origPosition.clone() : null;\n this.origQuaternion = source.origQuaternion ? source.origQuaternion.clone() : null;\n\n this.mimicJoints = [...source.mimicJoints];\n\n return this;\n\n }\n\n /* Public Functions */\n /**\n * @param {...number|null} values The joint value components to set, optionally null for no-op\n * @returns {boolean} Whether the invocation of this function resulted in an actual change to the joint value\n */\n setJointValue(...values) {\n\n // Parse all incoming values into numbers except null, which we treat as a no-op for that value component.\n values = values.map(v => v === null ? null : parseFloat(v));\n\n if (!this.origPosition || !this.origQuaternion) {\n\n this.origPosition = this.position.clone();\n this.origQuaternion = this.rotationQuaternion.clone();\n\n }\n\n let didUpdate = false;\n\n this.mimicJoints.forEach(joint => {\n\n didUpdate = joint.updateFromMimickedJoint(...values) || didUpdate;\n\n });\n\n switch (this.jointType) {\n\n case 'fixed': {\n\n return didUpdate;\n\n }\n case 'continuous':\n case 'revolute': {\n\n let angle = values[0];\n if (angle == null) return didUpdate;\n if (angle === this.jointValue[0]) return didUpdate;\n\n if (!this.ignoreLimits && this.jointType === 'revolute') {\n\n angle = Math.min(this.limit.upper, angle);\n angle = Math.max(this.limit.lower, angle);\n\n }\n\n // Three.js: this.quaternion.setFromAxisAngle(this.axis, angle).premultiply(this.origQuaternion);\n // premultiply(q) means result = q * this\n // So: result = origQuaternion * RotationAxis(axis, angle)\n const rotQuat = Quaternion.RotationAxis(this.axis, angle);\n this.origQuaternion.multiplyToRef(rotQuat, this.rotationQuaternion);\n\n if (this.jointValue[0] !== angle) {\n\n this.jointValue[0] = angle;\n this.computeWorldMatrix(true);\n return true;\n\n } else {\n\n return didUpdate;\n\n }\n\n }\n\n case 'prismatic': {\n\n let pos = values[0];\n if (pos == null) return didUpdate;\n if (pos === this.jointValue[0]) return didUpdate;\n\n if (!this.ignoreLimits) {\n\n pos = Math.min(this.limit.upper, pos);\n pos = Math.max(this.limit.lower, pos);\n\n }\n\n this.position.copyFrom(this.origPosition);\n // Rotate axis by the original rotation quaternion\n const rotMatrix = new Matrix();\n Matrix.FromQuaternionToRef(this.origQuaternion, rotMatrix);\n Vector3.TransformNormalToRef(this.axis, rotMatrix, _tempAxis);\n this.position.addInPlace(_tempAxis.scale(pos));\n\n if (this.jointValue[0] !== pos) {\n\n this.jointValue[0] = pos;\n this.computeWorldMatrix(true);\n return true;\n\n } else {\n\n return didUpdate;\n\n }\n\n }\n\n case 'floating': {\n\n // no-op if all values are identical to existing value or are null\n if (this.jointValue.every((value, index) => values[index] === value || values[index] === null)) return didUpdate;\n // Floating joints have six degrees of freedom: X, Y, Z, R, P, Y.\n this.jointValue[0] = values[0] !== null ? values[0] : this.jointValue[0];\n this.jointValue[1] = values[1] !== null ? values[1] : this.jointValue[1];\n this.jointValue[2] = values[2] !== null ? values[2] : this.jointValue[2];\n this.jointValue[3] = values[3] !== null ? values[3] : this.jointValue[3];\n this.jointValue[4] = values[4] !== null ? values[4] : this.jointValue[4];\n this.jointValue[5] = values[5] !== null ? values[5] : this.jointValue[5];\n\n // Compose transform of joint origin and transform due to joint values\n // Three.js: Matrix4.compose(pos, quat, scale) -> Babylon: Matrix.Compose(scale, quat, pos)\n Matrix.ComposeToRef(_tempScale, this.origQuaternion, this.origPosition, _tempOrigMatrix);\n\n // Three.js Euler('XYZ') -> compose quaternion from axis rotations\n // XYZ intrinsic = Qz * Qy * Qx\n const qx = Quaternion.RotationAxis(new Vector3(1, 0, 0), this.jointValue[3]);\n const qy = Quaternion.RotationAxis(new Vector3(0, 1, 0), this.jointValue[4]);\n const qz = Quaternion.RotationAxis(new Vector3(0, 0, 1), this.jointValue[5]);\n // XYZ order: apply X first, then Y, then Z -> qz * qy * qx\n qz.multiplyToRef(qy, _tempQuat);\n _tempQuat.multiplyToRef(qx, _tempQuat2);\n\n _tempPosition.set(this.jointValue[0], this.jointValue[1], this.jointValue[2]);\n Matrix.ComposeToRef(_tempScale, _tempQuat2, _tempPosition, _tempMatrix);\n\n // Three.js: _tempOrigTransform.premultiply(_tempTransform) means _tempTransform * _tempOrigTransform\n _tempMatrix.multiplyToRef(_tempOrigMatrix, _tempOrigMatrix);\n\n // Decompose: Babylon decompose(scale, rotation, translation)\n _tempOrigMatrix.decompose(_tempScale, _tempQuat, _tempPosition);\n this.position.copyFrom(_tempPosition);\n this.rotationQuaternion.copyFrom(_tempQuat);\n\n // Reset temp scale\n _tempScale.set(1, 1, 1);\n\n this.computeWorldMatrix(true);\n return true;\n }\n\n case 'planar': {\n\n // no-op if all values are identical to existing value or are null\n if (this.jointValue.every((value, index) => values[index] === value || values[index] === null)) return didUpdate;\n\n this.jointValue[0] = values[0] !== null ? values[0] : this.jointValue[0];\n this.jointValue[1] = values[1] !== null ? values[1] : this.jointValue[1];\n this.jointValue[2] = values[2] !== null ? values[2] : this.jointValue[2];\n\n // Compose transform of joint origin and transform due to joint values\n Matrix.ComposeToRef(_tempScale, this.origQuaternion, this.origPosition, _tempOrigMatrix);\n const axisQuat = Quaternion.RotationAxis(this.axis, this.jointValue[2]);\n _tempPosition.set(this.jointValue[0], this.jointValue[1], 0.0);\n Matrix.ComposeToRef(_tempScale, axisQuat, _tempPosition, _tempMatrix);\n\n // Calculate new transform: premultiply means _tempTransform * _tempOrigTransform\n _tempMatrix.multiplyToRef(_tempOrigMatrix, _tempOrigMatrix);\n\n _tempOrigMatrix.decompose(_tempScale, _tempQuat, _tempPosition);\n this.position.copyFrom(_tempPosition);\n this.rotationQuaternion.copyFrom(_tempQuat);\n\n // Reset temp scale\n _tempScale.set(1, 1, 1);\n\n this.computeWorldMatrix(true);\n return true;\n }\n\n }\n\n return didUpdate;\n\n }\n\n}\n\nclass URDFMimicJoint extends URDFJoint {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.type = 'URDFMimicJoint';\n this.mimicJoint = null;\n this.offset = 0;\n this.multiplier = 1;\n\n }\n\n updateFromMimickedJoint(...values) {\n\n const modifiedValues = values.map(x => x * this.multiplier + this.offset);\n return super.setJointValue(...modifiedValues);\n\n }\n\n /* Overrides */\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.mimicJoint = source.mimicJoint;\n this.offset = source.offset;\n this.multiplier = source.multiplier;\n\n return this;\n\n }\n\n}\n\nclass URDFRobot extends URDFLink {\n\n constructor(name = '', scene = null) {\n\n super(name, scene);\n this.isURDFRobot = true;\n this.urdfNode = null;\n\n this.urdfRobotNode = null;\n this.robotName = null;\n\n this.links = null;\n this.joints = null;\n this.colliders = null;\n this.visual = null;\n this.frames = null;\n\n }\n\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.urdfRobotNode = source.urdfRobotNode;\n this.robotName = source.robotName;\n\n this.links = {};\n this.joints = {};\n this.colliders = {};\n this.visual = {};\n\n this.traverse(c => {\n\n if (c.isURDFJoint && c.urdfName in source.joints) {\n\n this.joints[c.urdfName] = c;\n\n }\n\n if (c.isURDFLink && c.urdfName in source.links) {\n\n this.links[c.urdfName] = c;\n\n }\n\n if (c.isURDFCollider && c.urdfName in source.colliders) {\n\n this.colliders[c.urdfName] = c;\n\n }\n\n if (c.isURDFVisual && c.urdfName in source.visual) {\n\n this.visual[c.urdfName] = c;\n\n }\n\n });\n\n // Repair mimic joint references once we've re-accumulated all our joint data\n for (const joint in this.joints) {\n this.joints[joint].mimicJoints = this.joints[joint].mimicJoints.map((mimicJoint) => this.joints[mimicJoint.name]);\n }\n\n this.frames = {\n ...this.colliders,\n ...this.visual,\n ...this.links,\n ...this.joints,\n };\n\n return this;\n\n }\n\n getFrame(name) {\n\n return this.frames[name];\n\n }\n\n setJointValue(jointName, ...angle) {\n\n const joint = this.joints[jointName];\n if (joint) {\n\n return joint.setJointValue(...angle);\n\n }\n\n return false;\n }\n\n setJointValues(values) {\n\n let didChange = false;\n for (const name in values) {\n\n const value = values[name];\n if (Array.isArray(value)) {\n\n didChange = this.setJointValue(name, ...value) || didChange;\n\n } else {\n\n didChange = this.setJointValue(name, value) || didChange;\n\n }\n\n }\n\n return didChange;\n\n }\n\n}\n\nexport { URDFRobot, URDFLink, URDFJoint, URDFMimicJoint, URDFVisual, URDFCollider };\n","import { StandardMaterial, Color3, Texture, MeshBuilder, Mesh, Vector3, Quaternion, Material, SceneLoader } from '@babylonjs/core';\nimport { STLFileLoader } from '@babylonjs/loaders/STL/stlFileLoader.js';\nimport '@babylonjs/loaders/glTF';\n\n// Prevent Y/Z axis swap — URDF coordinates should be used as-is in a right-handed scene\nSTLFileLoader.DO_NOT_ALTER_FILE_COORDINATES = true;\nimport { URDFRobot, URDFJoint, URDFLink, URDFCollider, URDFVisual, URDFMimicJoint } from './URDFClasses.js';\n\n/*\nReference coordinate frames for Babylon.js and ROS.\nBabylon.js is LEFT-handed, ROS/URDF is RIGHT-handed.\nTo handle this, apply scaling (1, 1, -1) on the robot root node\n(handled in the viewer component).\n\nBabylon.js\n Y\n |\n |\n .-----X\n \\\n Z (into screen, left-handed)\n\nROS URDF\n Z\n | X\n | /\n Y-----.\n\n*/\n\nconst tempQuaternion = new Quaternion();\n\n// Simple load tracker replacing THREE.LoadingManager\nclass LoadTracker {\n\n constructor() {\n\n this._pending = 0;\n this.onLoad = null;\n\n }\n\n itemStart() {\n\n this._pending++;\n\n }\n\n itemEnd() {\n\n this._pending--;\n if (this._pending === 0 && this.onLoad) {\n\n this.onLoad();\n\n }\n\n }\n\n itemError(url) {\n\n console.error(`URDFLoader: Failed to load: ${ url }`);\n\n }\n\n}\n\n// take a vector \"x y z\" and process it into\n// an array [x, y, z]\nfunction processTuple(val) {\n\n if (!val) return [0, 0, 0];\n return val.trim().split(/\\s+/g).map(num => parseFloat(num));\n\n}\n\n// Extract the base URL from a full URL path\nfunction extractUrlBase(url) {\n\n return url.substring(0, url.lastIndexOf('/') + 1);\n\n}\n\n// applies a rotation to a Babylon.js node in URDF order\nfunction applyRotation(obj, rpy, additive = false) {\n\n // if additive is true the rotation is applied in\n // addition to the existing rotation\n if (!additive) {\n\n obj.rotationQuaternion = new Quaternion();\n\n }\n\n // URDF uses ZYX Euler order (intrinsic)\n // ZYX intrinsic = Qz * Qy * Qx\n const qx = Quaternion.RotationAxis(new Vector3(1, 0, 0), rpy[0]);\n const qy = Quaternion.RotationAxis(new Vector3(0, 1, 0), rpy[1]);\n const qz = Quaternion.RotationAxis(new Vector3(0, 0, 1), rpy[2]);\n const rpyQuat = qz.multiply(qy).multiply(qx);\n\n rpyQuat.multiplyToRef(obj.rotationQuaternion, tempQuaternion);\n obj.rotationQuaternion.copyFrom(tempQuaternion);\n\n}\n\n/* URDFLoader Class */\n// Loads and reads a URDF file into a Babylon.js TransformNode format\nexport default\nclass URDFLoader {\n\n constructor(scene) {\n\n this.scene = scene || null;\n this.manager = new LoadTracker();\n this.loadMeshCb = this.defaultMeshLoader.bind(this);\n this.parseVisual = true;\n this.parseCollision = false;\n this.packages = '';\n this.workingPath = '';\n this.fetchOptions = {};\n // Optional hook: (mesh, originalMaterial) => void. Called once per\n // mesh produced by defaultMeshLoader, after the mesh exists and its\n // original material is assigned (StandardMaterial for STL; the glTF\n // loader's material for GLB/GLTF). Consumers can inspect the source\n // material (e.g. baseColor) and swap mesh.material in place.\n this.onMeshLoaded = null;\n\n }\n\n /* Public API */\n loadAsync(urdf) {\n\n return new Promise((resolve, reject) => {\n\n this.load(urdf, resolve, null, reject);\n\n });\n\n }\n\n // urdf: The path to the URDF within the package OR absolute\n // onComplete: Callback that is passed the model once loaded\n load(urdf, onComplete, onProgress, onError) {\n\n const manager = this.manager;\n const workingPath = extractUrlBase(urdf);\n const urdfPath = urdf;\n\n manager.itemStart();\n\n fetch(urdfPath, this.fetchOptions)\n .then(res => {\n\n if (res.ok) {\n\n if (onProgress) {\n\n onProgress(null);\n\n }\n return res.text();\n\n } else {\n\n throw new Error(`URDFLoader: Failed to load url '${ urdfPath }' with error code ${ res.status } : ${ res.statusText }.`);\n\n }\n\n })\n .then(data => {\n\n const model = this.parse(data, this.workingPath || workingPath);\n // Defer onComplete until every mesh load tracked by the\n // LoadTracker has also finished. parse() kicks off async\n // loadMeshCb calls that increment pending; onLoad fires when\n // pending returns to zero after our own itemEnd below.\n manager.onLoad = () => { onComplete(model); };\n manager.itemEnd();\n\n })\n .catch(e => {\n\n if (onError) {\n\n onError(e);\n\n } else {\n\n console.error('URDFLoader: Error loading file.', e);\n\n }\n manager.itemError(urdfPath);\n manager.itemEnd();\n\n });\n\n }\n\n parse(content, workingPath = this.workingPath) {\n\n const scene = this.scene;\n const manager = this.manager;\n const packages = this.packages;\n const loadMeshCb = this.loadMeshCb;\n const onMeshLoaded = this.onMeshLoaded;\n const parseVisual = this.parseVisual;\n const parseCollision = this.parseCollision;\n const linkMap = {};\n const jointMap = {};\n const materialMap = {};\n\n // Resolves the path of mesh files\n function resolvePath(path) {\n\n if (!/^package:\\/\\//.test(path)) {\n\n return workingPath ? workingPath + path : path;\n\n }\n\n // Remove \"package://\" keyword and split meshPath at the first slash\n const [targetPkg, relPath] = path.replace(/^package:\\/\\//, '').split(/\\/(.+)/);\n\n if (typeof packages === 'string') {\n\n // \"pkg\" is one single package\n if (packages.endsWith(targetPkg)) {\n\n // \"pkg\" is the target package\n return packages + '/' + relPath;\n\n } else {\n\n // Assume \"pkg\" is the target package's parent directory\n return packages + '/' + targetPkg + '/' + relPath;\n\n }\n\n } else if (packages instanceof Function) {\n\n return packages(targetPkg) + '/' + relPath;\n\n } else if (typeof packages === 'object') {\n\n // \"pkg\" is a map of packages\n if (targetPkg in packages) {\n\n return packages[targetPkg] + '/' + relPath;\n\n } else {\n\n console.error(`URDFLoader : ${ targetPkg } not found in provided package list.`);\n return null;\n\n }\n\n }\n\n }\n\n // Process the URDF text format\n function processUrdf(data) {\n\n let children;\n if (data instanceof Document) {\n\n children = [ ...data.children ];\n\n } else if (data instanceof Element) {\n\n children = [ data ];\n\n } else {\n\n const parser = new DOMParser();\n const urdf = parser.parseFromString(data, 'text/xml');\n children = [ ...urdf.children ];\n\n }\n\n const robotNode = children.filter(c => c.nodeName === 'robot').pop();\n return processRobot(robotNode);\n\n }\n\n // Process the <robot> node\n function processRobot(robot) {\n\n const robotNodes = [ ...robot.children ];\n const links = robotNodes.filter(c => c.nodeName.toLowerCase() === 'link');\n const joints = robotNodes.filter(c => c.nodeName.toLowerCase() === 'joint');\n const materials = robotNodes.filter(c => c.nodeName.toLowerCase() === 'material');\n const obj = new URDFRobot('', scene);\n\n obj.robotName = robot.getAttribute('name');\n obj.urdfRobotNode = robot;\n\n // Create the <material> map\n materials.forEach(m => {\n\n const name = m.getAttribute('name');\n materialMap[name] = processMaterial(m);\n\n });\n\n // Create the <link> map\n const visualMap = {};\n const colliderMap = {};\n links.forEach(l => {\n\n const name = l.getAttribute('name');\n const isRoot = robot.querySelector(`child[link=\"${ name }\"]`) === null;\n linkMap[name] = processLink(l, visualMap, colliderMap, isRoot ? obj : null);\n\n });\n\n // Create the <joint> map\n joints.forEach(j => {\n\n const name = j.getAttribute('name');\n jointMap[name] = processJoint(j);\n\n });\n\n obj.joints = jointMap;\n obj.links = linkMap;\n obj.colliders = colliderMap;\n obj.visual = visualMap;\n\n // Link up mimic joints\n const jointList = Object.values(jointMap);\n jointList.forEach(j => {\n\n if (j instanceof URDFMimicJoint) {\n\n jointMap[j.mimicJoint].mimicJoints.push(j);\n\n }\n\n });\n\n // Detect infinite loops of mimic joints\n jointList.forEach(j => {\n\n const uniqueJoints = new Set();\n const iterFunction = joint => {\n\n if (uniqueJoints.has(joint)) {\n\n throw new Error('URDFLoader: Detected an infinite loop of mimic joints.');\n\n }\n\n uniqueJoints.add(joint);\n joint.mimicJoints.forEach(j => {\n\n iterFunction(j);\n\n });\n\n };\n\n iterFunction(j);\n });\n\n obj.frames = {\n ...colliderMap,\n ...visualMap,\n ...linkMap,\n ...jointMap,\n };\n\n return obj;\n\n }\n\n // Process joint nodes and parent them\n function processJoint(joint) {\n\n const children = [ ...joint.children ];\n const jointType = joint.getAttribute('type');\n\n let obj;\n\n const mimicTag = children.find(n => n.nodeName.toLowerCase() === 'mimic');\n if (mimicTag) {\n\n obj = new URDFMimicJoint('', scene);\n obj.mimicJoint = mimicTag.getAttribute('joint');\n obj.multiplier = parseFloat(mimicTag.getAttribute('multiplier') || 1.0);\n obj.offset = parseFloat(mimicTag.getAttribute('offset') || 0.0);\n\n } else {\n\n obj = new URDFJoint('', scene);\n\n }\n\n obj.urdfNode = joint;\n obj.name = joint.getAttribute('name');\n obj.urdfName = obj.name;\n obj.jointType = jointType;\n\n let parent = null;\n let child = null;\n let xyz = [0, 0, 0];\n let rpy = [0, 0, 0];\n\n // Extract the attributes\n children.forEach(n => {\n\n const type = n.nodeName.toLowerCase();\n if (type === 'origin') {\n\n xyz = processTuple(n.getAttribute('xyz'));\n rpy = processTuple(n.getAttribute('rpy'));\n\n } else if (type === 'child') {\n\n child = linkMap[n.getAttribute('link')];\n\n } else if (type === 'parent') {\n\n parent = linkMap[n.getAttribute('link')];\n\n } else if (type === 'limit') {\n\n obj.limit.lower = parseFloat(n.getAttribute('lower') || obj.limit.lower);\n obj.limit.upper = parseFloat(n.getAttribute('upper') || obj.limit.upper);\n\n }\n });\n\n // Join the links - Babylon.js uses child.parent = parentNode\n obj.parent = parent;\n child.parent = obj;\n applyRotation(obj, rpy);\n obj.position.set(xyz[0], xyz[1], xyz[2]);\n\n // Set up the rotate function\n const axisNode = children.filter(n => n.nodeName.toLowerCase() === 'axis')[0];\n\n if (axisNode) {\n\n const axisXYZ = axisNode.getAttribute('xyz').split(/\\s+/g).map(num => parseFloat(num));\n obj.axis = new Vector3(axisXYZ[0], axisXYZ[1], axisXYZ[2]);\n obj.axis.normalize();\n\n }\n\n return obj;\n\n }\n\n // Process the <link> nodes\n function processLink(link, visualMap, colliderMap, target = null) {\n\n if (target === null) {\n\n target = new URDFLink('', scene);\n\n }\n\n const children = [ ...link.children ];\n target.name = link.getAttribute('name');\n target.urdfName = target.name;\n target.urdfNode = link;\n\n if (parseVisual) {\n\n const visualNodes = children.filter(n => n.nodeName.toLowerCase() === 'visual');\n visualNodes.forEach(vn => {\n\n const v = processLinkElement(vn, materialMap);\n v.parent = target;\n\n if (vn.hasAttribute('name')) {\n\n const name = vn.getAttribute('name');\n v.name = name;\n v.urdfName = name;\n visualMap[name] = v;\n\n }\n\n });\n\n }\n\n if (parseCollision) {\n\n const collisionNodes = children.filter(n => n.nodeName.toLowerCase() === 'collision');\n collisionNodes.forEach(cn => {\n\n const c = processLinkElement(cn);\n c.parent = target;\n\n if (cn.hasAttribute('name')) {\n\n const name = cn.getAttribute('name');\n c.name = name;\n c.urdfName = name;\n colliderMap[name] = c;\n\n }\n\n });\n\n }\n\n return target;\n\n }\n\n function processMaterial(node) {\n\n const matNodes = [ ...node.children ];\n const material = new StandardMaterial(node.getAttribute('name') || '', scene);\n\n material.name = node.getAttribute('name') || '';\n matNodes.forEach(n => {\n\n const type = n.nodeName.toLowerCase();\n if (type === 'color') {\n\n const rgba =\n n\n .getAttribute('rgba')\n .split(/\\s/g)\n .map(v => parseFloat(v));\n\n material.diffuseColor = new Color3(rgba[0], rgba[1], rgba[2]);\n material.alpha = rgba[3];\n if (rgba[3] < 1) {\n\n material.transparencyMode = Material.MATERIAL_ALPHABLEND;\n material.disableDepthWrite = true;\n\n }\n\n } else if (type === 'texture') {\n\n // The URDF spec does not require that the <texture/> tag include\n // a filename attribute so skip loading the texture if not provided.\n const filename = n.getAttribute('filename');\n if (filename) {\n\n const filePath = resolvePath(filename);\n material.diffuseTexture = new Texture(filePath, scene);\n\n }\n\n }\n });\n\n return material;\n\n }\n\n // Process the visual and collision nodes into meshes\n function processLinkElement(vn, materialMap = {}) {\n\n const isCollisionNode = vn.nodeName.toLowerCase() === 'collision';\n const children = [ ...vn.children ];\n let material = null;\n\n // get the material first\n const materialNode = children.filter(n => n.nodeName.toLowerCase() === 'material')[0];\n if (materialNode) {\n\n const name = materialNode.getAttribute('name');\n if (name && name in materialMap) {\n\n material = materialMap[name];\n\n } else {\n\n material = processMaterial(materialNode);\n\n }\n\n } else {\n\n material = new StandardMaterial('', scene);\n\n }\n\n const group = isCollisionNode ? new URDFCollider('', scene) : new URDFVisual('', scene);\n group.urdfNode = vn;\n\n children.forEach(n => {\n\n const type = n.nodeName.toLowerCase();\n if (type === 'geometry') {\n\n const geoType = n.children[0].nodeName.toLowerCase();\n if (geoType === 'mesh') {\n\n const filename = n.children[0].getAttribute('filename');\n const filePath = resolvePath(filename);\n\n // file path is null if a package directory is not provided.\n if (filePath !== null) {\n\n const scaleAttr = n.children[0].getAttribute('scale');\n if (scaleAttr) {\n\n const scale = processTuple(scaleAttr);\n group.scaling.set(scale[0], scale[1], scale[2]);\n\n }\n\n // Track each mesh load on the LoadTracker so\n // `onLoad` fires only after all meshes have\n // attached. Without this the top-level\n // `onComplete` runs right after parse returns —\n // before any async STL/GLB loads finish — so\n // callers observe an empty robot tree and can't\n // populate light include-lists, selection sets,\n // etc. from the final mesh set.\n manager.itemStart();\n loadMeshCb(filePath, scene, (obj, err) => {\n\n if (scene.isDisposed) {\n\n manager.itemEnd();\n return;\n\n }\n\n if (err) {\n\n console.error('URDFLoader: Error loading mesh.', err);\n\n } else if (obj) {\n\n // Skip the URDF-material override when the\n // consumer has installed an onMeshLoaded\n // hook — they take full responsibility for\n // mesh materials (including per-primitive\n // handling for multi-mesh glTF imports).\n if (obj instanceof Mesh && !onMeshLoaded) {\n\n obj.material = material;\n\n }\n\n // We don't expect non identity rotations or positions.\n obj.position.set(0, 0, 0);\n if (obj.rotationQuaternion) {\n\n obj.rotationQuaternion.copyFrom(Quaternion.Identity());\n\n }\n obj.parent = group;\n\n }\n\n manager.itemEnd();\n\n });\n\n }\n\n } else if (geoType === 'box') {\n\n const primitiveModel = MeshBuilder.CreateBox('box', { size: 1 }, scene);\n primitiveModel.material = material;\n\n const size = processTuple(n.children[0].getAttribute('size'));\n primitiveModel.scaling.set(size[0], size[1], size[2]);\n\n primitiveModel.parent = group;\n\n } else if (geoType === 'sphere') {\n\n const primitiveModel = MeshBuilder.CreateSphere('sphere', { diameter: 2, segments: 30 }, scene);\n primitiveModel.material = material;\n\n const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;\n primitiveModel.scaling.set(radius, radius, radius);\n\n primitiveModel.parent = group;\n\n } else if (geoType === 'cylinder') {\n\n const primitiveModel = MeshBuilder.CreateCylinder('cylinder', { diameter: 2, height: 1, tessellation: 30 }, scene);\n primitiveModel.material = material;\n\n const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;\n const length = parseFloat(n.children[0].getAttribute('length')) || 0;\n // Three.js cylinder is Y-up, Babylon.js cylinder is also Y-up\n // Three.js original: scale(radius, length, radius), rotation(PI/2, 0, 0)\n // The rotation makes the cylinder lie along the Z axis (URDF convention)\n primitiveModel.scaling.set(radius, length, radius);\n primitiveModel.rotationQuaternion = Quaternion.RotationAxis(new Vector3(1, 0, 0), Math.PI / 2);\n\n primitiveModel.parent = group;\n\n }\n\n } else if (type === 'origin') {\n\n const xyz = processTuple(n.getAttribute('xyz'));\n const rpy = processTuple(n.getAttribute('rpy'));\n\n group.position.set(xyz[0], xyz[1], xyz[2]);\n group.rotationQuaternion = new Quaternion();\n applyRotation(group, rpy);\n\n }\n\n });\n\n return group;\n\n }\n\n return processUrdf(content);\n\n }\n\n // Default mesh loading function\n defaultMeshLoader(path, scene, done) {\n\n if (/\\.stl$/i.test(path)) {\n\n const rootUrl = path.substring(0, path.lastIndexOf('/') + 1);\n const fileName = path.substring(path.lastIndexOf('/') + 1);\n\n SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {\n\n if (scene.isDisposed) return;\n\n if (meshes.length > 0) {\n\n // If multiple meshes, create a parent node\n if (meshes.length === 1) {\n\n const mesh = meshes[0];\n mesh.material = new StandardMaterial('stl-material', scene);\n if (this.onMeshLoaded) this.onMeshLoaded(mesh, mesh.material);\n done(mesh);\n\n } else {\n\n const parent = new (Mesh.bind(Mesh, 'stl-root', scene))();\n meshes.forEach(m => {\n\n m.material = new StandardMaterial('stl-material', scene);\n if (this.onMeshLoaded) this.onMeshLoaded(m, m.material);\n m.parent = parent;\n\n });\n done(parent);\n\n }\n\n }\n\n }, null, (scene, message, exception) => {\n\n if (scene.isDisposed) return;\n\n console.warn(`URDFLoader: Could not load STL at ${ path }.`, message);\n done(null, exception || new Error(message));\n\n });\n\n } else if (/\\.(glb|gltf)$/i.test(path)) {\n\n const rootUrl = path.substring(0, path.lastIndexOf('/') + 1);\n const fileName = path.substring(path.lastIndexOf('/') + 1);\n\n SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {\n\n if (scene.isDisposed) return;\n\n if (meshes.length === 1) {\n\n if (this.onMeshLoaded) this.onMeshLoaded(meshes[0], meshes[0].material);\n done(meshes[0]);\n\n } else if (meshes.length > 1) {\n\n const parent = new (Mesh.bind(Mesh, 'gltf-root', scene))();\n meshes.forEach(m => {\n\n if (this.onMeshLoaded) this.onMeshLoaded(m, m.material);\n m.parent = parent;\n\n });\n done(parent);\n\n }\n\n }, null, (scene, message, exception) => {\n\n if (scene.isDisposed) return;\n\n console.warn(`URDFLoader: Could not load glTF at ${ path }.`, message);\n done(null, exception || new Error(message));\n\n });\n\n } else if (/\\.dae$/i.test(path)) {\n\n console.warn(`URDFLoader: DAE/COLLADA files are not supported in Babylon.js. Please convert to glTF: ${ path }`);\n done(null, new Error('DAE files not supported. Convert to glTF.'));\n\n } else {\n\n console.warn(`URDFLoader: Could not load model at ${ path }.\\nNo loader available`);\n\n }\n\n }\n\n}\n"],"names":["Vector3","Quaternion","Matrix","TransformNode","STLFileLoader","StandardMaterial","Color3","Material","Texture","Mesh","MeshBuilder","SceneLoader"],"mappings":"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"}