urdf-loader-babylonjs 0.1.0 → 0.1.2
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/package.json +5 -5
- package/src/URDFLoader.js +10 -0
- package/umd/URDFLoader.js +10 -0
- package/umd/URDFLoader.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "urdf-loader-babylonjs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "URDF Loader for Babylon.js and webcomponent viewer",
|
|
5
5
|
"main": "src/URDFLoader.js",
|
|
6
6
|
"type": "module",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"webcomponents"
|
|
30
30
|
],
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@babylonjs/core": ">=
|
|
33
|
-
"@babylonjs/loaders": ">=
|
|
32
|
+
"@babylonjs/core": ">=9.1.0",
|
|
33
|
+
"@babylonjs/loaders": ">=9.1.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@babylonjs/core": "^
|
|
37
|
-
"@babylonjs/loaders": "^
|
|
36
|
+
"@babylonjs/core": "^9.1.0",
|
|
37
|
+
"@babylonjs/loaders": "^9.1.0",
|
|
38
38
|
"@eslint/js": "^9.19.0",
|
|
39
39
|
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
40
40
|
"@vitest/eslint-plugin": "^1.1.25",
|
package/src/URDFLoader.js
CHANGED
|
@@ -601,6 +601,8 @@ class URDFLoader {
|
|
|
601
601
|
|
|
602
602
|
loadMeshCb(filePath, scene, (obj, err) => {
|
|
603
603
|
|
|
604
|
+
if (scene.isDisposed) return;
|
|
605
|
+
|
|
604
606
|
if (err) {
|
|
605
607
|
|
|
606
608
|
console.error('URDFLoader: Error loading mesh.', err);
|
|
@@ -696,6 +698,8 @@ class URDFLoader {
|
|
|
696
698
|
|
|
697
699
|
SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {
|
|
698
700
|
|
|
701
|
+
if (scene.isDisposed) return;
|
|
702
|
+
|
|
699
703
|
if (meshes.length > 0) {
|
|
700
704
|
|
|
701
705
|
// If multiple meshes, create a parent node
|
|
@@ -722,6 +726,8 @@ class URDFLoader {
|
|
|
722
726
|
|
|
723
727
|
}, null, (scene, message, exception) => {
|
|
724
728
|
|
|
729
|
+
if (scene.isDisposed) return;
|
|
730
|
+
|
|
725
731
|
console.warn(`URDFLoader: Could not load STL at ${ path }.`, message);
|
|
726
732
|
done(null, exception || new Error(message));
|
|
727
733
|
|
|
@@ -734,6 +740,8 @@ class URDFLoader {
|
|
|
734
740
|
|
|
735
741
|
SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {
|
|
736
742
|
|
|
743
|
+
if (scene.isDisposed) return;
|
|
744
|
+
|
|
737
745
|
if (meshes.length === 1) {
|
|
738
746
|
|
|
739
747
|
done(meshes[0]);
|
|
@@ -748,6 +756,8 @@ class URDFLoader {
|
|
|
748
756
|
|
|
749
757
|
}, null, (scene, message, exception) => {
|
|
750
758
|
|
|
759
|
+
if (scene.isDisposed) return;
|
|
760
|
+
|
|
751
761
|
console.warn(`URDFLoader: Could not load glTF at ${ path }.`, message);
|
|
752
762
|
done(null, exception || new Error(message));
|
|
753
763
|
|
package/umd/URDFLoader.js
CHANGED
|
@@ -1164,6 +1164,8 @@
|
|
|
1164
1164
|
|
|
1165
1165
|
loadMeshCb(filePath, scene, (obj, err) => {
|
|
1166
1166
|
|
|
1167
|
+
if (scene.isDisposed) return;
|
|
1168
|
+
|
|
1167
1169
|
if (err) {
|
|
1168
1170
|
|
|
1169
1171
|
console.error('URDFLoader: Error loading mesh.', err);
|
|
@@ -1259,6 +1261,8 @@
|
|
|
1259
1261
|
|
|
1260
1262
|
core.SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {
|
|
1261
1263
|
|
|
1264
|
+
if (scene.isDisposed) return;
|
|
1265
|
+
|
|
1262
1266
|
if (meshes.length > 0) {
|
|
1263
1267
|
|
|
1264
1268
|
// If multiple meshes, create a parent node
|
|
@@ -1285,6 +1289,8 @@
|
|
|
1285
1289
|
|
|
1286
1290
|
}, null, (scene, message, exception) => {
|
|
1287
1291
|
|
|
1292
|
+
if (scene.isDisposed) return;
|
|
1293
|
+
|
|
1288
1294
|
console.warn(`URDFLoader: Could not load STL at ${ path }.`, message);
|
|
1289
1295
|
done(null, exception || new Error(message));
|
|
1290
1296
|
|
|
@@ -1297,6 +1303,8 @@
|
|
|
1297
1303
|
|
|
1298
1304
|
core.SceneLoader.ImportMesh('', rootUrl, fileName, scene, (meshes) => {
|
|
1299
1305
|
|
|
1306
|
+
if (scene.isDisposed) return;
|
|
1307
|
+
|
|
1300
1308
|
if (meshes.length === 1) {
|
|
1301
1309
|
|
|
1302
1310
|
done(meshes[0]);
|
|
@@ -1311,6 +1319,8 @@
|
|
|
1311
1319
|
|
|
1312
1320
|
}, null, (scene, message, exception) => {
|
|
1313
1321
|
|
|
1322
|
+
if (scene.isDisposed) return;
|
|
1323
|
+
|
|
1314
1324
|
console.warn(`URDFLoader: Could not load glTF at ${ path }.`, message);
|
|
1315
1325
|
done(null, exception || new Error(message));
|
|
1316
1326
|
|
package/umd/URDFLoader.js.map
CHANGED
|
@@ -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 (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 (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 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 (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 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\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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"}
|