urdf-loader 0.10.5 → 0.12.0
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "urdf-loader",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "URDF Loader for THREE.js and webcomponent viewer",
|
|
5
5
|
"main": "src/URDFLoader.js",
|
|
6
6
|
"type": "module",
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"webcomponents"
|
|
37
37
|
],
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"three": ">=0.
|
|
39
|
+
"three": ">=0.152.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@babel/core": "^7.
|
|
43
|
-
"@babel/preset-env": "^7.
|
|
42
|
+
"@babel/core": "^7.21.8",
|
|
43
|
+
"@babel/preset-env": "^7.21.5",
|
|
44
44
|
"@webcomponents/webcomponentsjs": "^2.4.4",
|
|
45
|
-
"babel-jest": "^
|
|
45
|
+
"babel-jest": "^29.5.0",
|
|
46
46
|
"concurrently": "^6.2.1",
|
|
47
47
|
"eslint": "^7.10.0",
|
|
48
48
|
"eslint-plugin-jest": "^24.1.0",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"nyc": "^15.1.0",
|
|
54
54
|
"parcel-bundler": "^1.12.5",
|
|
55
55
|
"static-server": "^3.0.0",
|
|
56
|
-
"three": "^0.
|
|
56
|
+
"three": "^0.152.2",
|
|
57
57
|
"typescript": "^3.9.7",
|
|
58
58
|
"rollup": "^2.29.0"
|
|
59
59
|
},
|
package/src/URDFClasses.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export interface URDFJoint extends Object3D {
|
|
|
34
34
|
ignoreLimits: Boolean;
|
|
35
35
|
mimicJoints: URDFMimicJoint[];
|
|
36
36
|
|
|
37
|
-
setJointValue(value0: Number, value1?: Number, value2?: Number):
|
|
37
|
+
setJointValue(value0: Number, value1?: Number, value2?: Number): boolean;
|
|
38
38
|
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -59,8 +59,8 @@ export interface URDFRobot extends URDFLink {
|
|
|
59
59
|
visual: { [ key: string ]: URDFVisual };
|
|
60
60
|
frames: { [ key: string ]: Object3D };
|
|
61
61
|
|
|
62
|
-
setJointValue(jointName: String, value0: Number, value1?: Number, value2?: Number):
|
|
63
|
-
setJointValues(values: { [ key: string ]: Number | Number[] }):
|
|
62
|
+
setJointValue(jointName: String, value0: Number, value1?: Number, value2?: Number): boolean;
|
|
63
|
+
setJointValues(values: { [ key: string ]: Number | Number[] }): boolean;
|
|
64
64
|
getFrame(name: String): Object3D;
|
|
65
65
|
|
|
66
66
|
}
|
package/src/URDFLoader.js
CHANGED
|
@@ -473,7 +473,7 @@ class URDFLoader {
|
|
|
473
473
|
.split(/\s/g)
|
|
474
474
|
.map(v => parseFloat(v));
|
|
475
475
|
|
|
476
|
-
material.color.setRGB(rgba[0], rgba[1], rgba[2])
|
|
476
|
+
material.color.setRGB(rgba[0], rgba[1], rgba[2]);
|
|
477
477
|
material.opacity = rgba[3];
|
|
478
478
|
material.transparent = rgba[3] < 1;
|
|
479
479
|
material.depthWrite = !material.transparent;
|
|
@@ -488,7 +488,7 @@ class URDFLoader {
|
|
|
488
488
|
const loader = new THREE.TextureLoader(manager);
|
|
489
489
|
const filePath = resolvePath(filename);
|
|
490
490
|
material.map = loader.load(filePath);
|
|
491
|
-
material.map.
|
|
491
|
+
material.map.colorSpace = THREE.SRGBColorSpace;
|
|
492
492
|
|
|
493
493
|
}
|
|
494
494
|
|
|
@@ -582,7 +582,7 @@ class URDFLoader {
|
|
|
582
582
|
} else if (geoType === 'box') {
|
|
583
583
|
|
|
584
584
|
const primitiveModel = new THREE.Mesh();
|
|
585
|
-
primitiveModel.geometry = new THREE.
|
|
585
|
+
primitiveModel.geometry = new THREE.BoxGeometry(1, 1, 1);
|
|
586
586
|
primitiveModel.material = material;
|
|
587
587
|
|
|
588
588
|
const size = processTuple(n.children[0].getAttribute('size'));
|
|
@@ -593,7 +593,7 @@ class URDFLoader {
|
|
|
593
593
|
} else if (geoType === 'sphere') {
|
|
594
594
|
|
|
595
595
|
const primitiveModel = new THREE.Mesh();
|
|
596
|
-
primitiveModel.geometry = new THREE.
|
|
596
|
+
primitiveModel.geometry = new THREE.SphereGeometry(1, 30, 30);
|
|
597
597
|
primitiveModel.material = material;
|
|
598
598
|
|
|
599
599
|
const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;
|
|
@@ -604,7 +604,7 @@ class URDFLoader {
|
|
|
604
604
|
} else if (geoType === 'cylinder') {
|
|
605
605
|
|
|
606
606
|
const primitiveModel = new THREE.Mesh();
|
|
607
|
-
primitiveModel.geometry = new THREE.
|
|
607
|
+
primitiveModel.geometry = new THREE.CylinderGeometry(1, 1, 1, 30);
|
|
608
608
|
primitiveModel.material = material;
|
|
609
609
|
|
|
610
610
|
const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;
|
|
@@ -39,7 +39,7 @@ class URDFViewer extends HTMLElement {
|
|
|
39
39
|
get displayShadow() { return this.hasAttribute('display-shadow') || false; }
|
|
40
40
|
set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }
|
|
41
41
|
|
|
42
|
-
get ambientColor() { return this.getAttribute('ambient-color') || '#
|
|
42
|
+
get ambientColor() { return this.getAttribute('ambient-color') || '#8ea0a8'; }
|
|
43
43
|
set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }
|
|
44
44
|
|
|
45
45
|
get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }
|
|
@@ -118,7 +118,7 @@ class URDFViewer extends HTMLElement {
|
|
|
118
118
|
renderer.setClearAlpha(0);
|
|
119
119
|
renderer.shadowMap.enabled = true;
|
|
120
120
|
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
121
|
-
renderer.
|
|
121
|
+
renderer.outputColorSpace = THREE.SRGBColorSpace;
|
|
122
122
|
|
|
123
123
|
// Camera setup
|
|
124
124
|
const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
|
|
@@ -453,7 +453,7 @@ class URDFViewer extends HTMLElement {
|
|
|
453
453
|
|
|
454
454
|
if (m.map) {
|
|
455
455
|
|
|
456
|
-
m.map.
|
|
456
|
+
m.map.colorSpace = THREE.SRGBColorSpace;
|
|
457
457
|
|
|
458
458
|
}
|
|
459
459
|
|
package/umd/URDFLoader.js
CHANGED
|
@@ -887,7 +887,7 @@
|
|
|
887
887
|
.split(/\s/g)
|
|
888
888
|
.map(v => parseFloat(v));
|
|
889
889
|
|
|
890
|
-
material.color.setRGB(rgba[0], rgba[1], rgba[2])
|
|
890
|
+
material.color.setRGB(rgba[0], rgba[1], rgba[2]);
|
|
891
891
|
material.opacity = rgba[3];
|
|
892
892
|
material.transparent = rgba[3] < 1;
|
|
893
893
|
material.depthWrite = !material.transparent;
|
|
@@ -902,7 +902,7 @@
|
|
|
902
902
|
const loader = new THREE__namespace.TextureLoader(manager);
|
|
903
903
|
const filePath = resolvePath(filename);
|
|
904
904
|
material.map = loader.load(filePath);
|
|
905
|
-
material.map.
|
|
905
|
+
material.map.colorSpace = THREE__namespace.SRGBColorSpace;
|
|
906
906
|
|
|
907
907
|
}
|
|
908
908
|
|
|
@@ -996,7 +996,7 @@
|
|
|
996
996
|
} else if (geoType === 'box') {
|
|
997
997
|
|
|
998
998
|
const primitiveModel = new THREE__namespace.Mesh();
|
|
999
|
-
primitiveModel.geometry = new THREE__namespace.
|
|
999
|
+
primitiveModel.geometry = new THREE__namespace.BoxGeometry(1, 1, 1);
|
|
1000
1000
|
primitiveModel.material = material;
|
|
1001
1001
|
|
|
1002
1002
|
const size = processTuple(n.children[0].getAttribute('size'));
|
|
@@ -1007,7 +1007,7 @@
|
|
|
1007
1007
|
} else if (geoType === 'sphere') {
|
|
1008
1008
|
|
|
1009
1009
|
const primitiveModel = new THREE__namespace.Mesh();
|
|
1010
|
-
primitiveModel.geometry = new THREE__namespace.
|
|
1010
|
+
primitiveModel.geometry = new THREE__namespace.SphereGeometry(1, 30, 30);
|
|
1011
1011
|
primitiveModel.material = material;
|
|
1012
1012
|
|
|
1013
1013
|
const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;
|
|
@@ -1018,7 +1018,7 @@
|
|
|
1018
1018
|
} else if (geoType === 'cylinder') {
|
|
1019
1019
|
|
|
1020
1020
|
const primitiveModel = new THREE__namespace.Mesh();
|
|
1021
|
-
primitiveModel.geometry = new THREE__namespace.
|
|
1021
|
+
primitiveModel.geometry = new THREE__namespace.CylinderGeometry(1, 1, 1, 30);
|
|
1022
1022
|
primitiveModel.material = material;
|
|
1023
1023
|
|
|
1024
1024
|
const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;
|
package/umd/URDFLoader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"URDFLoader.js","sources":["../src/URDFClasses.js","../src/URDFLoader.js"],"sourcesContent":["import { Object3D, Vector3 } from 'three';\n\nclass URDFBase extends Object3D {\n\n constructor(...args) {\n\n super(...args);\n this.urdfNode = null;\n this.urdfName = '';\n\n }\n\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.urdfNode = source.urdfNode;\n this.urdfName = source.urdfName;\n\n return this;\n\n }\n\n}\n\nclass URDFCollider extends URDFBase {\n\n constructor(...args) {\n\n super(...args);\n this.isURDFCollider = true;\n this.type = 'URDFCollider';\n\n }\n\n}\n\nclass URDFVisual extends URDFBase {\n\n constructor(...args) {\n\n super(...args);\n this.isURDFVisual = true;\n this.type = 'URDFVisual';\n\n }\n\n}\n\nclass URDFLink extends URDFBase {\n\n constructor(...args) {\n\n super(...args);\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 this.matrixWorldNeedsUpdate = true;\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 this.jointValue = new Array(2).fill(0);\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(...args) {\n\n super(...args);\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 setJointValue(...values) {\n\n values = values.map(v => parseFloat(v));\n\n if (!this.origPosition || !this.origQuaternion) {\n\n this.origPosition = this.position.clone();\n this.origQuaternion = this.quaternion.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 this.quaternion\n .setFromAxisAngle(this.axis, angle)\n .premultiply(this.origQuaternion);\n\n if (this.jointValue[0] !== angle) {\n\n this.jointValue[0] = angle;\n this.matrixWorldNeedsUpdate = 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.copy(this.origPosition);\n this.position.addScaledVector(this.axis, pos);\n\n if (this.jointValue[0] !== pos) {\n\n this.jointValue[0] = pos;\n this.matrixWorldNeedsUpdate = true;\n return true;\n\n } else {\n\n return didUpdate;\n\n }\n\n }\n\n case 'floating':\n case 'planar':\n // TODO: Support these joint types\n console.warn(`'${ this.jointType }' joint not yet supported`);\n\n }\n\n return didUpdate;\n\n }\n\n}\n\nclass URDFMimicJoint extends URDFJoint {\n\n constructor(...args) {\n\n super(...args);\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(...args) {\n\n super(...args);\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 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 * as THREE from 'three';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\nimport { URDFRobot, URDFJoint, URDFLink, URDFCollider, URDFVisual, URDFMimicJoint } from './URDFClasses.js';\n\n/*\nReference coordinate frames for THREE.js and ROS.\nBoth coordinate systems are right handed so the URDF is instantiated without\nframe transforms. The resulting model can be rotated to rectify the proper up,\nright, and forward directions\n\nTHREE.js\n Y\n |\n |\n .-----X\n /\nZ\n\nROS URDf\n Z\n | X\n | /\n Y-----.\n\n*/\n\nconst tempQuaternion = new THREE.Quaternion();\nconst tempEuler = new THREE.Euler();\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// applies a rotation a threejs object 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) obj.rotation.set(0, 0, 0);\n\n tempEuler.set(rpy[0], rpy[1], rpy[2], 'ZYX');\n tempQuaternion.setFromEuler(tempEuler);\n tempQuaternion.multiply(obj.quaternion);\n obj.quaternion.copy(tempQuaternion);\n\n}\n\n/* URDFLoader Class */\n// Loads and reads a URDF file into a THREEjs Object3D format\nexport default\nclass URDFLoader {\n\n constructor(manager) {\n\n this.manager = manager || THREE.DefaultLoadingManager;\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 // Check if a full URI is specified before\n // prepending the package info\n const manager = this.manager;\n const workingPath = THREE.LoaderUtils.extractUrlBase(urdf);\n const urdfPath = this.manager.resolveURL(urdf);\n\n manager.itemStart(urdfPath);\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 if (this.workingPath === '') {\n\n this.workingPath = workingPath;\n\n }\n\n const model = this.parse(data);\n onComplete(model);\n manager.itemEnd(urdfPath);\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(urdfPath);\n\n });\n\n }\n\n parse(content) {\n\n const packages = this.packages;\n const loadMeshCb = this.loadMeshCb;\n const parseVisual = this.parseVisual;\n const parseCollision = this.parseCollision;\n const workingPath = this.workingPath;\n const manager = this.manager;\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();\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();\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();\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\n parent.add(obj);\n obj.add(child);\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 THREE.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();\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 target.add(v);\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 target.add(c);\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 THREE.MeshPhongMaterial();\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.color.setRGB(rgba[0], rgba[1], rgba[2]).convertSRGBToLinear();\n material.opacity = rgba[3];\n material.transparent = rgba[3] < 1;\n material.depthWrite = !material.transparent;\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 loader = new THREE.TextureLoader(manager);\n const filePath = resolvePath(filename);\n material.map = loader.load(filePath);\n material.map.encoding = THREE.sRGBEncoding;\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 THREE.MeshPhongMaterial();\n\n }\n\n const group = isCollisionNode ? new URDFCollider() : new URDFVisual();\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.scale.set(scale[0], scale[1], scale[2]);\n\n }\n\n loadMeshCb(filePath, manager, (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 THREE.Mesh) {\n\n obj.material = material;\n\n }\n\n // We don't expect non identity rotations or positions. In the case of\n // COLLADA files the model might come in with a custom scale for unit\n // conversion.\n obj.position.set(0, 0, 0);\n obj.quaternion.identity();\n group.add(obj);\n\n }\n\n });\n\n }\n\n } else if (geoType === 'box') {\n\n const primitiveModel = new THREE.Mesh();\n primitiveModel.geometry = new THREE.BoxBufferGeometry(1, 1, 1);\n primitiveModel.material = material;\n\n const size = processTuple(n.children[0].getAttribute('size'));\n primitiveModel.scale.set(size[0], size[1], size[2]);\n\n group.add(primitiveModel);\n\n } else if (geoType === 'sphere') {\n\n const primitiveModel = new THREE.Mesh();\n primitiveModel.geometry = new THREE.SphereBufferGeometry(1, 30, 30);\n primitiveModel.material = material;\n\n const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;\n primitiveModel.scale.set(radius, radius, radius);\n\n group.add(primitiveModel);\n\n } else if (geoType === 'cylinder') {\n\n const primitiveModel = new THREE.Mesh();\n primitiveModel.geometry = new THREE.CylinderBufferGeometry(1, 1, 1, 30);\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 primitiveModel.scale.set(radius, length, radius);\n primitiveModel.rotation.set(Math.PI / 2, 0, 0);\n\n group.add(primitiveModel);\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.rotation.set(0, 0, 0);\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, manager, done) {\n\n if (/\\.stl$/i.test(path)) {\n\n const loader = new STLLoader(manager);\n loader.load(path, geom => {\n const mesh = new THREE.Mesh(geom, new THREE.MeshPhongMaterial());\n done(mesh);\n });\n\n } else if (/\\.dae$/i.test(path)) {\n\n const loader = new ColladaLoader(manager);\n loader.load(path, dae => done(dae.scene));\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":["Object3D","Vector3","THREE","STLLoader","ColladaLoader"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"URDFLoader.js","sources":["../src/URDFClasses.js","../src/URDFLoader.js"],"sourcesContent":["import { Object3D, Vector3 } from 'three';\n\nclass URDFBase extends Object3D {\n\n constructor(...args) {\n\n super(...args);\n this.urdfNode = null;\n this.urdfName = '';\n\n }\n\n copy(source, recursive) {\n\n super.copy(source, recursive);\n\n this.urdfNode = source.urdfNode;\n this.urdfName = source.urdfName;\n\n return this;\n\n }\n\n}\n\nclass URDFCollider extends URDFBase {\n\n constructor(...args) {\n\n super(...args);\n this.isURDFCollider = true;\n this.type = 'URDFCollider';\n\n }\n\n}\n\nclass URDFVisual extends URDFBase {\n\n constructor(...args) {\n\n super(...args);\n this.isURDFVisual = true;\n this.type = 'URDFVisual';\n\n }\n\n}\n\nclass URDFLink extends URDFBase {\n\n constructor(...args) {\n\n super(...args);\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 this.matrixWorldNeedsUpdate = true;\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 this.jointValue = new Array(2).fill(0);\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(...args) {\n\n super(...args);\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 setJointValue(...values) {\n\n values = values.map(v => parseFloat(v));\n\n if (!this.origPosition || !this.origQuaternion) {\n\n this.origPosition = this.position.clone();\n this.origQuaternion = this.quaternion.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 this.quaternion\n .setFromAxisAngle(this.axis, angle)\n .premultiply(this.origQuaternion);\n\n if (this.jointValue[0] !== angle) {\n\n this.jointValue[0] = angle;\n this.matrixWorldNeedsUpdate = 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.copy(this.origPosition);\n this.position.addScaledVector(this.axis, pos);\n\n if (this.jointValue[0] !== pos) {\n\n this.jointValue[0] = pos;\n this.matrixWorldNeedsUpdate = true;\n return true;\n\n } else {\n\n return didUpdate;\n\n }\n\n }\n\n case 'floating':\n case 'planar':\n // TODO: Support these joint types\n console.warn(`'${ this.jointType }' joint not yet supported`);\n\n }\n\n return didUpdate;\n\n }\n\n}\n\nclass URDFMimicJoint extends URDFJoint {\n\n constructor(...args) {\n\n super(...args);\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(...args) {\n\n super(...args);\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 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 * as THREE from 'three';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\nimport { URDFRobot, URDFJoint, URDFLink, URDFCollider, URDFVisual, URDFMimicJoint } from './URDFClasses.js';\n\n/*\nReference coordinate frames for THREE.js and ROS.\nBoth coordinate systems are right handed so the URDF is instantiated without\nframe transforms. The resulting model can be rotated to rectify the proper up,\nright, and forward directions\n\nTHREE.js\n Y\n |\n |\n .-----X\n /\nZ\n\nROS URDf\n Z\n | X\n | /\n Y-----.\n\n*/\n\nconst tempQuaternion = new THREE.Quaternion();\nconst tempEuler = new THREE.Euler();\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// applies a rotation a threejs object 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) obj.rotation.set(0, 0, 0);\n\n tempEuler.set(rpy[0], rpy[1], rpy[2], 'ZYX');\n tempQuaternion.setFromEuler(tempEuler);\n tempQuaternion.multiply(obj.quaternion);\n obj.quaternion.copy(tempQuaternion);\n\n}\n\n/* URDFLoader Class */\n// Loads and reads a URDF file into a THREEjs Object3D format\nexport default\nclass URDFLoader {\n\n constructor(manager) {\n\n this.manager = manager || THREE.DefaultLoadingManager;\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 // Check if a full URI is specified before\n // prepending the package info\n const manager = this.manager;\n const workingPath = THREE.LoaderUtils.extractUrlBase(urdf);\n const urdfPath = this.manager.resolveURL(urdf);\n\n manager.itemStart(urdfPath);\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 if (this.workingPath === '') {\n\n this.workingPath = workingPath;\n\n }\n\n const model = this.parse(data);\n onComplete(model);\n manager.itemEnd(urdfPath);\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(urdfPath);\n\n });\n\n }\n\n parse(content) {\n\n const packages = this.packages;\n const loadMeshCb = this.loadMeshCb;\n const parseVisual = this.parseVisual;\n const parseCollision = this.parseCollision;\n const workingPath = this.workingPath;\n const manager = this.manager;\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();\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();\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();\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\n parent.add(obj);\n obj.add(child);\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 THREE.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();\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 target.add(v);\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 target.add(c);\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 THREE.MeshPhongMaterial();\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.color.setRGB(rgba[0], rgba[1], rgba[2]);\n material.opacity = rgba[3];\n material.transparent = rgba[3] < 1;\n material.depthWrite = !material.transparent;\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 loader = new THREE.TextureLoader(manager);\n const filePath = resolvePath(filename);\n material.map = loader.load(filePath);\n material.map.colorSpace = THREE.SRGBColorSpace;\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 THREE.MeshPhongMaterial();\n\n }\n\n const group = isCollisionNode ? new URDFCollider() : new URDFVisual();\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.scale.set(scale[0], scale[1], scale[2]);\n\n }\n\n loadMeshCb(filePath, manager, (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 THREE.Mesh) {\n\n obj.material = material;\n\n }\n\n // We don't expect non identity rotations or positions. In the case of\n // COLLADA files the model might come in with a custom scale for unit\n // conversion.\n obj.position.set(0, 0, 0);\n obj.quaternion.identity();\n group.add(obj);\n\n }\n\n });\n\n }\n\n } else if (geoType === 'box') {\n\n const primitiveModel = new THREE.Mesh();\n primitiveModel.geometry = new THREE.BoxGeometry(1, 1, 1);\n primitiveModel.material = material;\n\n const size = processTuple(n.children[0].getAttribute('size'));\n primitiveModel.scale.set(size[0], size[1], size[2]);\n\n group.add(primitiveModel);\n\n } else if (geoType === 'sphere') {\n\n const primitiveModel = new THREE.Mesh();\n primitiveModel.geometry = new THREE.SphereGeometry(1, 30, 30);\n primitiveModel.material = material;\n\n const radius = parseFloat(n.children[0].getAttribute('radius')) || 0;\n primitiveModel.scale.set(radius, radius, radius);\n\n group.add(primitiveModel);\n\n } else if (geoType === 'cylinder') {\n\n const primitiveModel = new THREE.Mesh();\n primitiveModel.geometry = new THREE.CylinderGeometry(1, 1, 1, 30);\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 primitiveModel.scale.set(radius, length, radius);\n primitiveModel.rotation.set(Math.PI / 2, 0, 0);\n\n group.add(primitiveModel);\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.rotation.set(0, 0, 0);\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, manager, done) {\n\n if (/\\.stl$/i.test(path)) {\n\n const loader = new STLLoader(manager);\n loader.load(path, geom => {\n const mesh = new THREE.Mesh(geom, new THREE.MeshPhongMaterial());\n done(mesh);\n });\n\n } else if (/\\.dae$/i.test(path)) {\n\n const loader = new ColladaLoader(manager);\n loader.load(path, dae => done(dae.scene));\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":["Object3D","Vector3","THREE","STLLoader","ColladaLoader"],"mappings":"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"}
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
get displayShadow() { return this.hasAttribute('display-shadow') || false; }
|
|
65
65
|
set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }
|
|
66
66
|
|
|
67
|
-
get ambientColor() { return this.getAttribute('ambient-color') || '#
|
|
67
|
+
get ambientColor() { return this.getAttribute('ambient-color') || '#8ea0a8'; }
|
|
68
68
|
set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }
|
|
69
69
|
|
|
70
70
|
get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
renderer.setClearAlpha(0);
|
|
144
144
|
renderer.shadowMap.enabled = true;
|
|
145
145
|
renderer.shadowMap.type = THREE__namespace.PCFSoftShadowMap;
|
|
146
|
-
renderer.
|
|
146
|
+
renderer.outputColorSpace = THREE__namespace.SRGBColorSpace;
|
|
147
147
|
|
|
148
148
|
// Camera setup
|
|
149
149
|
const camera = new THREE__namespace.PerspectiveCamera(75, 1, 0.1, 1000);
|
|
@@ -478,7 +478,7 @@
|
|
|
478
478
|
|
|
479
479
|
if (m.map) {
|
|
480
480
|
|
|
481
|
-
m.map.
|
|
481
|
+
m.map.colorSpace = THREE__namespace.SRGBColorSpace;
|
|
482
482
|
|
|
483
483
|
}
|
|
484
484
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urdf-viewer-element.js","sources":["../src/urdf-viewer-element.js"],"sourcesContent":["import * as THREE from 'three';\nimport { MeshPhongMaterial } from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport URDFLoader from './URDFLoader.js';\n\nconst tempVec2 = new THREE.Vector2();\nconst emptyRaycast = () => {};\n\n// urdf-viewer element\n// Loads and displays a 3D view of a URDF-formatted robot\n\n// Events\n// urdf-change: Fires when the URDF has finished loading and getting processed\n// urdf-processed: Fires when the URDF has finished loading and getting processed\n// geometry-loaded: Fires when all the geometry has been fully loaded\n// ignore-limits-change: Fires when the 'ignore-limits' attribute changes\n// angle-change: Fires when an angle changes\nexport default\nclass URDFViewer extends HTMLElement {\n\n static get observedAttributes() {\n\n return ['package', 'urdf', 'up', 'display-shadow', 'ambient-color', 'ignore-limits', 'show-collision'];\n\n }\n\n get package() { return this.getAttribute('package') || ''; }\n set package(val) { this.setAttribute('package', val); }\n\n get urdf() { return this.getAttribute('urdf') || ''; }\n set urdf(val) { this.setAttribute('urdf', val); }\n\n get ignoreLimits() { return this.hasAttribute('ignore-limits') || false; }\n set ignoreLimits(val) { val ? this.setAttribute('ignore-limits', val) : this.removeAttribute('ignore-limits'); }\n\n get up() { return this.getAttribute('up') || '+Z'; }\n set up(val) { this.setAttribute('up', val); }\n\n get displayShadow() { return this.hasAttribute('display-shadow') || false; }\n set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }\n\n get ambientColor() { return this.getAttribute('ambient-color') || '#455A64'; }\n set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }\n\n get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }\n set autoRedraw(val) { val ? this.setAttribute('auto-redraw', true) : this.removeAttribute('auto-redraw'); }\n\n get noAutoRecenter() { return this.hasAttribute('no-auto-recenter') || false; }\n set noAutoRecenter(val) { val ? this.setAttribute('no-auto-recenter', true) : this.removeAttribute('no-auto-recenter'); }\n\n get showCollision() { return this.hasAttribute('show-collision') || false; }\n set showCollision(val) { val ? this.setAttribute('show-collision', true) : this.removeAttribute('show-collision'); }\n\n get jointValues() {\n\n const values = {};\n if (this.robot) {\n\n for (const name in this.robot.joints) {\n\n const joint = this.robot.joints[name];\n values[name] = joint.jointValue.length === 1 ? joint.angle : [...joint.jointValue];\n\n }\n\n }\n\n return values;\n\n }\n set jointValues(val) { this.setJointValues(val); }\n\n get angles() {\n\n return this.jointValues;\n\n }\n set angles(v) {\n\n this.jointValues = v;\n\n }\n\n /* Lifecycle Functions */\n constructor() {\n\n super();\n\n this._requestId = 0;\n this._dirty = false;\n this._loadScheduled = false;\n this.robot = null;\n this.loadMeshFunc = null;\n this.urlModifierFunc = null;\n\n // Scene setup\n const scene = new THREE.Scene();\n\n const ambientLight = new THREE.HemisphereLight(this.ambientColor, '#000');\n ambientLight.groundColor.lerp(ambientLight.color, 0.5);\n ambientLight.intensity = 0.5;\n ambientLight.position.set(0, 1, 0);\n scene.add(ambientLight);\n\n // Light setup\n const dirLight = new THREE.DirectionalLight(0xffffff);\n dirLight.position.set(4, 10, 1);\n dirLight.shadow.mapSize.width = 2048;\n dirLight.shadow.mapSize.height = 2048;\n dirLight.shadow.normalBias = 0.001;\n dirLight.castShadow = true;\n scene.add(dirLight);\n scene.add(dirLight.target);\n\n // Renderer setup\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setClearColor(0xffffff);\n renderer.setClearAlpha(0);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n renderer.outputEncoding = THREE.sRGBEncoding;\n\n // Camera setup\n const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);\n camera.position.z = -10;\n\n // World setup\n const world = new THREE.Object3D();\n scene.add(world);\n\n const plane = new THREE.Mesh(\n new THREE.PlaneBufferGeometry(40, 40),\n new THREE.ShadowMaterial({ side: THREE.DoubleSide, transparent: true, opacity: 0.5 }),\n );\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = -0.5;\n plane.receiveShadow = true;\n plane.scale.set(10, 10, 10);\n scene.add(plane);\n\n // Controls setup\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.rotateSpeed = 2.0;\n controls.zoomSpeed = 5;\n controls.panSpeed = 2;\n controls.enableZoom = true;\n controls.enableDamping = false;\n controls.maxDistance = 50;\n controls.minDistance = 0.25;\n controls.addEventListener('change', () => this.recenter());\n\n this.scene = scene;\n this.world = world;\n this.renderer = renderer;\n this.camera = camera;\n this.controls = controls;\n this.plane = plane;\n this.directionalLight = dirLight;\n this.ambientLight = ambientLight;\n\n this._setUp(this.up);\n\n this._collisionMaterial = new MeshPhongMaterial({\n transparent: true,\n opacity: 0.35,\n shininess: 2.5,\n premultipliedAlpha: true,\n color: 0xffbe38,\n polygonOffset: true,\n polygonOffsetFactor: -1,\n polygonOffsetUnits: -1,\n });\n\n const _renderLoop = () => {\n\n if (this.parentNode) {\n\n this.updateSize();\n\n if (this._dirty || this.autoRedraw) {\n\n if (!this.noAutoRecenter) {\n\n this._updateEnvironment();\n }\n\n this.renderer.render(scene, camera);\n this._dirty = false;\n\n }\n\n // update controls after the environment in\n // case the controls are retargeted\n this.controls.update();\n\n }\n this._renderLoopId = requestAnimationFrame(_renderLoop);\n\n };\n _renderLoop();\n\n }\n\n connectedCallback() {\n\n // Add our initialize styles for the element if they haven't\n // been added yet\n if (!this.constructor._styletag) {\n\n const styletag = document.createElement('style');\n styletag.innerHTML =\n `\n ${ this.tagName } { display: block; }\n ${ this.tagName } canvas {\n width: 100%;\n height: 100%;\n }\n `;\n document.head.appendChild(styletag);\n this.constructor._styletag = styletag;\n\n }\n\n // add the renderer\n if (this.childElementCount === 0) {\n\n this.appendChild(this.renderer.domElement);\n\n }\n\n this.updateSize();\n requestAnimationFrame(() => this.updateSize());\n\n }\n\n disconnectedCallback() {\n\n cancelAnimationFrame(this._renderLoopId);\n\n }\n\n attributeChangedCallback(attr, oldval, newval) {\n\n this._updateCollisionVisibility();\n if (!this.noAutoRecenter) {\n this.recenter();\n }\n\n switch (attr) {\n\n case 'package':\n case 'urdf': {\n\n this._scheduleLoad();\n break;\n\n }\n\n case 'up': {\n\n this._setUp(this.up);\n break;\n\n }\n\n case 'ambient-color': {\n\n this.ambientLight.color.set(this.ambientColor);\n this.ambientLight.groundColor.set('#000').lerp(this.ambientLight.color, 0.5);\n break;\n\n }\n\n case 'ignore-limits': {\n\n this._setIgnoreLimits(this.ignoreLimits, true);\n break;\n\n }\n\n }\n\n }\n\n /* Public API */\n updateSize() {\n\n const r = this.renderer;\n const w = this.clientWidth;\n const h = this.clientHeight;\n const currSize = r.getSize(tempVec2);\n\n if (currSize.width !== w || currSize.height !== h) {\n\n this.recenter();\n\n }\n\n r.setPixelRatio(window.devicePixelRatio);\n r.setSize(w, h, false);\n\n this.camera.aspect = w / h;\n this.camera.updateProjectionMatrix();\n\n }\n\n redraw() {\n\n this._dirty = true;\n }\n\n recenter() {\n\n this._updateEnvironment();\n this.redraw();\n\n }\n\n // Set the joint with jointName to\n // angle in degrees\n setJointValue(jointName, ...values) {\n\n if (!this.robot) return;\n if (!this.robot.joints[jointName]) return;\n\n if (this.robot.joints[jointName].setJointValue(...values)) {\n\n this.redraw();\n this.dispatchEvent(new CustomEvent('angle-change', { bubbles: true, cancelable: true, detail: jointName }));\n\n }\n\n }\n\n setJointValues(values) {\n\n for (const name in values) this.setJointValue(name, values[name]);\n\n }\n\n /* Private Functions */\n // Updates the position of the plane to be at the\n // lowest point below the robot and focuses the\n // camera on the center of the scene\n _updateEnvironment() {\n\n const robot = this.robot;\n if (!robot) return;\n\n this.world.updateMatrixWorld();\n\n const bbox = new THREE.Box3();\n bbox.makeEmpty();\n robot.traverse(c => {\n if (c.isURDFVisual) {\n bbox.expandByObject(c);\n }\n });\n\n const center = bbox.getCenter(new THREE.Vector3());\n this.controls.target.y = center.y;\n this.plane.position.y = bbox.min.y - 1e-3;\n\n const dirLight = this.directionalLight;\n dirLight.castShadow = this.displayShadow;\n\n if (this.displayShadow) {\n\n // Update the shadow camera rendering bounds to encapsulate the\n // model. We use the bounding sphere of the bounding box for\n // simplicity -- this could be a tighter fit.\n const sphere = bbox.getBoundingSphere(new THREE.Sphere());\n const minmax = sphere.radius;\n const cam = dirLight.shadow.camera;\n cam.left = cam.bottom = -minmax;\n cam.right = cam.top = minmax;\n\n // Update the camera to focus on the center of the model so the\n // shadow can encapsulate it\n const offset = dirLight.position.clone().sub(dirLight.target.position);\n dirLight.target.position.copy(center);\n dirLight.position.copy(center).add(offset);\n\n cam.updateProjectionMatrix();\n\n }\n\n }\n\n _scheduleLoad() {\n\n // if our current model is already what's being requested\n // or has been loaded then early out\n if (this._prevload === `${ this.package }|${ this.urdf }`) return;\n this._prevload = `${ this.package }|${ this.urdf }`;\n\n // if we're already waiting on a load then early out\n if (this._loadScheduled) return;\n this._loadScheduled = true;\n\n if (this.robot) {\n\n this.robot.traverse(c => c.dispose && c.dispose());\n this.robot.parent.remove(this.robot);\n this.robot = null;\n\n }\n\n requestAnimationFrame(() => {\n\n this._loadUrdf(this.package, this.urdf);\n this._loadScheduled = false;\n\n });\n\n }\n\n // Watch the package and urdf field and load the robot model.\n // This should _only_ be called from _scheduleLoad because that\n // ensures the that current robot has been removed\n _loadUrdf(pkg, urdf) {\n\n this.dispatchEvent(new CustomEvent('urdf-change', { bubbles: true, cancelable: true, composed: true }));\n\n if (urdf) {\n\n // Keep track of this request and make\n // sure it doesn't get overwritten by\n // a subsequent one\n this._requestId++;\n const requestId = this._requestId;\n\n const updateMaterials = mesh => {\n\n mesh.traverse(c => {\n\n if (c.isMesh) {\n\n c.castShadow = true;\n c.receiveShadow = true;\n\n if (c.material) {\n\n const mats =\n (Array.isArray(c.material) ? c.material : [c.material])\n .map(m => {\n\n if (m instanceof THREE.MeshBasicMaterial) {\n\n m = new THREE.MeshPhongMaterial();\n\n }\n\n if (m.map) {\n\n m.map.encoding = THREE.GammaEncoding;\n\n }\n\n return m;\n\n });\n c.material = mats.length === 1 ? mats[0] : mats;\n\n }\n\n }\n\n });\n\n };\n\n if (pkg.includes(':') && (pkg.split(':')[1].substring(0, 2)) !== '//') {\n // E.g. pkg = \"pkg_name: path/to/pkg_name, pk2: path2/to/pk2\"}\n\n // Convert pkg(s) into a map. E.g.\n // { \"pkg_name\": \"path/to/pkg_name\",\n // \"pk2\": \"path2/to/pk2\" }\n\n pkg = pkg.split(',').reduce((map, value) => {\n\n const split = value.split(/:/).filter(x => !!x);\n const pkgName = split.shift().trim();\n const pkgPath = split.join(':').trim();\n map[pkgName] = pkgPath;\n\n return map;\n\n }, {});\n }\n\n let robot = null;\n const manager = new THREE.LoadingManager();\n manager.onLoad = () => {\n\n // If another request has come in to load a new\n // robot, then ignore this one\n if (this._requestId !== requestId) {\n\n robot.traverse(c => c.dispose && c.dispose());\n return;\n\n }\n\n this.robot = robot;\n this.world.add(robot);\n updateMaterials(robot);\n\n this._setIgnoreLimits(this.ignoreLimits);\n this._updateCollisionVisibility();\n\n this.dispatchEvent(new CustomEvent('urdf-processed', { bubbles: true, cancelable: true, composed: true }));\n this.dispatchEvent(new CustomEvent('geometry-loaded', { bubbles: true, cancelable: true, composed: true }));\n\n this.recenter();\n\n };\n\n if (this.urlModifierFunc) {\n\n manager.setURLModifier(this.urlModifierFunc);\n\n }\n\n const loader = new URDFLoader(manager);\n loader.packages = pkg;\n loader.loadMeshCb = this.loadMeshFunc;\n loader.fetchOptions = { mode: 'cors', credentials: 'same-origin' };\n loader.parseCollision = true;\n loader.load(urdf, model => robot = model);\n\n }\n\n }\n\n _updateCollisionVisibility() {\n\n const showCollision = this.showCollision;\n const collisionMaterial = this._collisionMaterial;\n const robot = this.robot;\n\n if (robot === null) return;\n\n const colliders = [];\n robot.traverse(c => {\n\n if (c.isURDFCollider) {\n\n c.visible = showCollision;\n colliders.push(c);\n\n }\n\n });\n\n colliders.forEach(coll => {\n\n coll.traverse(c => {\n\n if (c.isMesh) {\n\n c.raycast = emptyRaycast;\n c.material = collisionMaterial;\n c.castShadow = false;\n\n }\n\n });\n\n });\n\n }\n\n // Watch the coordinate frame and update the\n // rotation of the scene to match\n _setUp(up) {\n\n if (!up) up = '+Z';\n up = up.toUpperCase();\n const sign = up.replace(/[^-+]/g, '')[0] || '+';\n const axis = up.replace(/[^XYZ]/gi, '')[0] || 'Z';\n\n const PI = Math.PI;\n const HALFPI = PI / 2;\n if (axis === 'X') this.world.rotation.set(0, 0, sign === '+' ? HALFPI : -HALFPI);\n if (axis === 'Z') this.world.rotation.set(sign === '+' ? -HALFPI : HALFPI, 0, 0);\n if (axis === 'Y') this.world.rotation.set(sign === '+' ? 0 : PI, 0, 0);\n\n }\n\n // Updates the current robot's angles to ignore\n // joint limits or not\n _setIgnoreLimits(ignore, dispatch = false) {\n\n if (this.robot) {\n\n Object\n .values(this.robot.joints)\n .forEach(joint => {\n\n joint.ignoreLimits = ignore;\n joint.setJointValue(...joint.jointValue);\n\n });\n\n }\n\n if (dispatch) {\n\n this.dispatchEvent(new CustomEvent('ignore-limits-change', { bubbles: true, cancelable: true, composed: true }));\n\n }\n\n }\n\n};\n"],"names":["THREE","OrbitControls","MeshPhongMaterial","URDFLoader"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"urdf-viewer-element.js","sources":["../src/urdf-viewer-element.js"],"sourcesContent":["import * as THREE from 'three';\nimport { MeshPhongMaterial } from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport URDFLoader from './URDFLoader.js';\n\nconst tempVec2 = new THREE.Vector2();\nconst emptyRaycast = () => {};\n\n// urdf-viewer element\n// Loads and displays a 3D view of a URDF-formatted robot\n\n// Events\n// urdf-change: Fires when the URDF has finished loading and getting processed\n// urdf-processed: Fires when the URDF has finished loading and getting processed\n// geometry-loaded: Fires when all the geometry has been fully loaded\n// ignore-limits-change: Fires when the 'ignore-limits' attribute changes\n// angle-change: Fires when an angle changes\nexport default\nclass URDFViewer extends HTMLElement {\n\n static get observedAttributes() {\n\n return ['package', 'urdf', 'up', 'display-shadow', 'ambient-color', 'ignore-limits', 'show-collision'];\n\n }\n\n get package() { return this.getAttribute('package') || ''; }\n set package(val) { this.setAttribute('package', val); }\n\n get urdf() { return this.getAttribute('urdf') || ''; }\n set urdf(val) { this.setAttribute('urdf', val); }\n\n get ignoreLimits() { return this.hasAttribute('ignore-limits') || false; }\n set ignoreLimits(val) { val ? this.setAttribute('ignore-limits', val) : this.removeAttribute('ignore-limits'); }\n\n get up() { return this.getAttribute('up') || '+Z'; }\n set up(val) { this.setAttribute('up', val); }\n\n get displayShadow() { return this.hasAttribute('display-shadow') || false; }\n set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }\n\n get ambientColor() { return this.getAttribute('ambient-color') || '#8ea0a8'; }\n set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }\n\n get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }\n set autoRedraw(val) { val ? this.setAttribute('auto-redraw', true) : this.removeAttribute('auto-redraw'); }\n\n get noAutoRecenter() { return this.hasAttribute('no-auto-recenter') || false; }\n set noAutoRecenter(val) { val ? this.setAttribute('no-auto-recenter', true) : this.removeAttribute('no-auto-recenter'); }\n\n get showCollision() { return this.hasAttribute('show-collision') || false; }\n set showCollision(val) { val ? this.setAttribute('show-collision', true) : this.removeAttribute('show-collision'); }\n\n get jointValues() {\n\n const values = {};\n if (this.robot) {\n\n for (const name in this.robot.joints) {\n\n const joint = this.robot.joints[name];\n values[name] = joint.jointValue.length === 1 ? joint.angle : [...joint.jointValue];\n\n }\n\n }\n\n return values;\n\n }\n set jointValues(val) { this.setJointValues(val); }\n\n get angles() {\n\n return this.jointValues;\n\n }\n set angles(v) {\n\n this.jointValues = v;\n\n }\n\n /* Lifecycle Functions */\n constructor() {\n\n super();\n\n this._requestId = 0;\n this._dirty = false;\n this._loadScheduled = false;\n this.robot = null;\n this.loadMeshFunc = null;\n this.urlModifierFunc = null;\n\n // Scene setup\n const scene = new THREE.Scene();\n\n const ambientLight = new THREE.HemisphereLight(this.ambientColor, '#000');\n ambientLight.groundColor.lerp(ambientLight.color, 0.5);\n ambientLight.intensity = 0.5;\n ambientLight.position.set(0, 1, 0);\n scene.add(ambientLight);\n\n // Light setup\n const dirLight = new THREE.DirectionalLight(0xffffff);\n dirLight.position.set(4, 10, 1);\n dirLight.shadow.mapSize.width = 2048;\n dirLight.shadow.mapSize.height = 2048;\n dirLight.shadow.normalBias = 0.001;\n dirLight.castShadow = true;\n scene.add(dirLight);\n scene.add(dirLight.target);\n\n // Renderer setup\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setClearColor(0xffffff);\n renderer.setClearAlpha(0);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n renderer.outputColorSpace = THREE.SRGBColorSpace;\n\n // Camera setup\n const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);\n camera.position.z = -10;\n\n // World setup\n const world = new THREE.Object3D();\n scene.add(world);\n\n const plane = new THREE.Mesh(\n new THREE.PlaneBufferGeometry(40, 40),\n new THREE.ShadowMaterial({ side: THREE.DoubleSide, transparent: true, opacity: 0.5 }),\n );\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = -0.5;\n plane.receiveShadow = true;\n plane.scale.set(10, 10, 10);\n scene.add(plane);\n\n // Controls setup\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.rotateSpeed = 2.0;\n controls.zoomSpeed = 5;\n controls.panSpeed = 2;\n controls.enableZoom = true;\n controls.enableDamping = false;\n controls.maxDistance = 50;\n controls.minDistance = 0.25;\n controls.addEventListener('change', () => this.recenter());\n\n this.scene = scene;\n this.world = world;\n this.renderer = renderer;\n this.camera = camera;\n this.controls = controls;\n this.plane = plane;\n this.directionalLight = dirLight;\n this.ambientLight = ambientLight;\n\n this._setUp(this.up);\n\n this._collisionMaterial = new MeshPhongMaterial({\n transparent: true,\n opacity: 0.35,\n shininess: 2.5,\n premultipliedAlpha: true,\n color: 0xffbe38,\n polygonOffset: true,\n polygonOffsetFactor: -1,\n polygonOffsetUnits: -1,\n });\n\n const _renderLoop = () => {\n\n if (this.parentNode) {\n\n this.updateSize();\n\n if (this._dirty || this.autoRedraw) {\n\n if (!this.noAutoRecenter) {\n\n this._updateEnvironment();\n }\n\n this.renderer.render(scene, camera);\n this._dirty = false;\n\n }\n\n // update controls after the environment in\n // case the controls are retargeted\n this.controls.update();\n\n }\n this._renderLoopId = requestAnimationFrame(_renderLoop);\n\n };\n _renderLoop();\n\n }\n\n connectedCallback() {\n\n // Add our initialize styles for the element if they haven't\n // been added yet\n if (!this.constructor._styletag) {\n\n const styletag = document.createElement('style');\n styletag.innerHTML =\n `\n ${ this.tagName } { display: block; }\n ${ this.tagName } canvas {\n width: 100%;\n height: 100%;\n }\n `;\n document.head.appendChild(styletag);\n this.constructor._styletag = styletag;\n\n }\n\n // add the renderer\n if (this.childElementCount === 0) {\n\n this.appendChild(this.renderer.domElement);\n\n }\n\n this.updateSize();\n requestAnimationFrame(() => this.updateSize());\n\n }\n\n disconnectedCallback() {\n\n cancelAnimationFrame(this._renderLoopId);\n\n }\n\n attributeChangedCallback(attr, oldval, newval) {\n\n this._updateCollisionVisibility();\n if (!this.noAutoRecenter) {\n this.recenter();\n }\n\n switch (attr) {\n\n case 'package':\n case 'urdf': {\n\n this._scheduleLoad();\n break;\n\n }\n\n case 'up': {\n\n this._setUp(this.up);\n break;\n\n }\n\n case 'ambient-color': {\n\n this.ambientLight.color.set(this.ambientColor);\n this.ambientLight.groundColor.set('#000').lerp(this.ambientLight.color, 0.5);\n break;\n\n }\n\n case 'ignore-limits': {\n\n this._setIgnoreLimits(this.ignoreLimits, true);\n break;\n\n }\n\n }\n\n }\n\n /* Public API */\n updateSize() {\n\n const r = this.renderer;\n const w = this.clientWidth;\n const h = this.clientHeight;\n const currSize = r.getSize(tempVec2);\n\n if (currSize.width !== w || currSize.height !== h) {\n\n this.recenter();\n\n }\n\n r.setPixelRatio(window.devicePixelRatio);\n r.setSize(w, h, false);\n\n this.camera.aspect = w / h;\n this.camera.updateProjectionMatrix();\n\n }\n\n redraw() {\n\n this._dirty = true;\n }\n\n recenter() {\n\n this._updateEnvironment();\n this.redraw();\n\n }\n\n // Set the joint with jointName to\n // angle in degrees\n setJointValue(jointName, ...values) {\n\n if (!this.robot) return;\n if (!this.robot.joints[jointName]) return;\n\n if (this.robot.joints[jointName].setJointValue(...values)) {\n\n this.redraw();\n this.dispatchEvent(new CustomEvent('angle-change', { bubbles: true, cancelable: true, detail: jointName }));\n\n }\n\n }\n\n setJointValues(values) {\n\n for (const name in values) this.setJointValue(name, values[name]);\n\n }\n\n /* Private Functions */\n // Updates the position of the plane to be at the\n // lowest point below the robot and focuses the\n // camera on the center of the scene\n _updateEnvironment() {\n\n const robot = this.robot;\n if (!robot) return;\n\n this.world.updateMatrixWorld();\n\n const bbox = new THREE.Box3();\n bbox.makeEmpty();\n robot.traverse(c => {\n if (c.isURDFVisual) {\n bbox.expandByObject(c);\n }\n });\n\n const center = bbox.getCenter(new THREE.Vector3());\n this.controls.target.y = center.y;\n this.plane.position.y = bbox.min.y - 1e-3;\n\n const dirLight = this.directionalLight;\n dirLight.castShadow = this.displayShadow;\n\n if (this.displayShadow) {\n\n // Update the shadow camera rendering bounds to encapsulate the\n // model. We use the bounding sphere of the bounding box for\n // simplicity -- this could be a tighter fit.\n const sphere = bbox.getBoundingSphere(new THREE.Sphere());\n const minmax = sphere.radius;\n const cam = dirLight.shadow.camera;\n cam.left = cam.bottom = -minmax;\n cam.right = cam.top = minmax;\n\n // Update the camera to focus on the center of the model so the\n // shadow can encapsulate it\n const offset = dirLight.position.clone().sub(dirLight.target.position);\n dirLight.target.position.copy(center);\n dirLight.position.copy(center).add(offset);\n\n cam.updateProjectionMatrix();\n\n }\n\n }\n\n _scheduleLoad() {\n\n // if our current model is already what's being requested\n // or has been loaded then early out\n if (this._prevload === `${ this.package }|${ this.urdf }`) return;\n this._prevload = `${ this.package }|${ this.urdf }`;\n\n // if we're already waiting on a load then early out\n if (this._loadScheduled) return;\n this._loadScheduled = true;\n\n if (this.robot) {\n\n this.robot.traverse(c => c.dispose && c.dispose());\n this.robot.parent.remove(this.robot);\n this.robot = null;\n\n }\n\n requestAnimationFrame(() => {\n\n this._loadUrdf(this.package, this.urdf);\n this._loadScheduled = false;\n\n });\n\n }\n\n // Watch the package and urdf field and load the robot model.\n // This should _only_ be called from _scheduleLoad because that\n // ensures the that current robot has been removed\n _loadUrdf(pkg, urdf) {\n\n this.dispatchEvent(new CustomEvent('urdf-change', { bubbles: true, cancelable: true, composed: true }));\n\n if (urdf) {\n\n // Keep track of this request and make\n // sure it doesn't get overwritten by\n // a subsequent one\n this._requestId++;\n const requestId = this._requestId;\n\n const updateMaterials = mesh => {\n\n mesh.traverse(c => {\n\n if (c.isMesh) {\n\n c.castShadow = true;\n c.receiveShadow = true;\n\n if (c.material) {\n\n const mats =\n (Array.isArray(c.material) ? c.material : [c.material])\n .map(m => {\n\n if (m instanceof THREE.MeshBasicMaterial) {\n\n m = new THREE.MeshPhongMaterial();\n\n }\n\n if (m.map) {\n\n m.map.colorSpace = THREE.SRGBColorSpace;\n\n }\n\n return m;\n\n });\n c.material = mats.length === 1 ? mats[0] : mats;\n\n }\n\n }\n\n });\n\n };\n\n if (pkg.includes(':') && (pkg.split(':')[1].substring(0, 2)) !== '//') {\n // E.g. pkg = \"pkg_name: path/to/pkg_name, pk2: path2/to/pk2\"}\n\n // Convert pkg(s) into a map. E.g.\n // { \"pkg_name\": \"path/to/pkg_name\",\n // \"pk2\": \"path2/to/pk2\" }\n\n pkg = pkg.split(',').reduce((map, value) => {\n\n const split = value.split(/:/).filter(x => !!x);\n const pkgName = split.shift().trim();\n const pkgPath = split.join(':').trim();\n map[pkgName] = pkgPath;\n\n return map;\n\n }, {});\n }\n\n let robot = null;\n const manager = new THREE.LoadingManager();\n manager.onLoad = () => {\n\n // If another request has come in to load a new\n // robot, then ignore this one\n if (this._requestId !== requestId) {\n\n robot.traverse(c => c.dispose && c.dispose());\n return;\n\n }\n\n this.robot = robot;\n this.world.add(robot);\n updateMaterials(robot);\n\n this._setIgnoreLimits(this.ignoreLimits);\n this._updateCollisionVisibility();\n\n this.dispatchEvent(new CustomEvent('urdf-processed', { bubbles: true, cancelable: true, composed: true }));\n this.dispatchEvent(new CustomEvent('geometry-loaded', { bubbles: true, cancelable: true, composed: true }));\n\n this.recenter();\n\n };\n\n if (this.urlModifierFunc) {\n\n manager.setURLModifier(this.urlModifierFunc);\n\n }\n\n const loader = new URDFLoader(manager);\n loader.packages = pkg;\n loader.loadMeshCb = this.loadMeshFunc;\n loader.fetchOptions = { mode: 'cors', credentials: 'same-origin' };\n loader.parseCollision = true;\n loader.load(urdf, model => robot = model);\n\n }\n\n }\n\n _updateCollisionVisibility() {\n\n const showCollision = this.showCollision;\n const collisionMaterial = this._collisionMaterial;\n const robot = this.robot;\n\n if (robot === null) return;\n\n const colliders = [];\n robot.traverse(c => {\n\n if (c.isURDFCollider) {\n\n c.visible = showCollision;\n colliders.push(c);\n\n }\n\n });\n\n colliders.forEach(coll => {\n\n coll.traverse(c => {\n\n if (c.isMesh) {\n\n c.raycast = emptyRaycast;\n c.material = collisionMaterial;\n c.castShadow = false;\n\n }\n\n });\n\n });\n\n }\n\n // Watch the coordinate frame and update the\n // rotation of the scene to match\n _setUp(up) {\n\n if (!up) up = '+Z';\n up = up.toUpperCase();\n const sign = up.replace(/[^-+]/g, '')[0] || '+';\n const axis = up.replace(/[^XYZ]/gi, '')[0] || 'Z';\n\n const PI = Math.PI;\n const HALFPI = PI / 2;\n if (axis === 'X') this.world.rotation.set(0, 0, sign === '+' ? HALFPI : -HALFPI);\n if (axis === 'Z') this.world.rotation.set(sign === '+' ? -HALFPI : HALFPI, 0, 0);\n if (axis === 'Y') this.world.rotation.set(sign === '+' ? 0 : PI, 0, 0);\n\n }\n\n // Updates the current robot's angles to ignore\n // joint limits or not\n _setIgnoreLimits(ignore, dispatch = false) {\n\n if (this.robot) {\n\n Object\n .values(this.robot.joints)\n .forEach(joint => {\n\n joint.ignoreLimits = ignore;\n joint.setJointValue(...joint.jointValue);\n\n });\n\n }\n\n if (dispatch) {\n\n this.dispatchEvent(new CustomEvent('ignore-limits-change', { bubbles: true, cancelable: true, composed: true }));\n\n }\n\n }\n\n};\n"],"names":["THREE","OrbitControls","MeshPhongMaterial","URDFLoader"],"mappings":"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"}
|