urdf-loader 0.10.2 → 0.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +61 -62
- package/src/URDFLoader.d.ts +1 -1
- package/src/urdf-viewer-element.js +551 -551
- package/umd/URDFLoader.js +38 -16
- package/umd/URDFLoader.js.map +1 -1
- package/umd/urdf-manipulator-element.js +23 -2
- package/umd/urdf-manipulator-element.js.map +1 -1
- package/umd/urdf-viewer-element.js +563 -542
- package/umd/urdf-viewer-element.js.map +1 -1
- package/CHANGELOG.md +0 -268
- package/example/styles.css +0 -281
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urdf-viewer-element.js","sources":["../src/urdf-viewer-element.js"],"sourcesContent":["import * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport URDFLoader from './URDFLoader.js';\n\nconst tempVec2 = new THREE.Vector2();\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'];\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 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 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.recenter();\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 if (!this.robot) return;\n\n this.world.updateMatrixWorld();\n\n const bbox = new THREE.Box3();\n bbox.setFromObject(this.robot);\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\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.load(urdf, model => robot = model);\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.Vector2","THREE.Scene","THREE.HemisphereLight","THREE.DirectionalLight","THREE.WebGLRenderer","THREE.PCFSoftShadowMap","THREE.sRGBEncoding","THREE.PerspectiveCamera","THREE.Object3D","THREE.Mesh","THREE.PlaneBufferGeometry","THREE.ShadowMaterial","THREE.DoubleSide","OrbitControls","THREE.Box3","THREE.Vector3","THREE.Sphere","THREE.MeshBasicMaterial","THREE.MeshPhongMaterial","THREE.GammaEncoding","THREE.LoadingManager","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';\r\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\r\nimport URDFLoader from './URDFLoader.js';\r\n\r\nconst tempVec2 = new THREE.Vector2();\r\n\r\n// urdf-viewer element\r\n// Loads and displays a 3D view of a URDF-formatted robot\r\n\r\n// Events\r\n// urdf-change: Fires when the URDF has finished loading and getting processed\r\n// urdf-processed: Fires when the URDF has finished loading and getting processed\r\n// geometry-loaded: Fires when all the geometry has been fully loaded\r\n// ignore-limits-change: Fires when the 'ignore-limits' attribute changes\r\n// angle-change: Fires when an angle changes\r\nexport default\r\nclass URDFViewer extends HTMLElement {\r\n\r\n static get observedAttributes() {\r\n\r\n return ['package', 'urdf', 'up', 'display-shadow', 'ambient-color', 'ignore-limits'];\r\n\r\n }\r\n\r\n get package() { return this.getAttribute('package') || ''; }\r\n set package(val) { this.setAttribute('package', val); }\r\n\r\n get urdf() { return this.getAttribute('urdf') || ''; }\r\n set urdf(val) { this.setAttribute('urdf', val); }\r\n\r\n get ignoreLimits() { return this.hasAttribute('ignore-limits') || false; }\r\n set ignoreLimits(val) { val ? this.setAttribute('ignore-limits', val) : this.removeAttribute('ignore-limits'); }\r\n\r\n get up() { return this.getAttribute('up') || '+Z'; }\r\n set up(val) { this.setAttribute('up', val); }\r\n\r\n get displayShadow() { return this.hasAttribute('display-shadow') || false; }\r\n set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }\r\n\r\n get ambientColor() { return this.getAttribute('ambient-color') || '#455A64'; }\r\n set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }\r\n\r\n get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }\r\n set autoRedraw(val) { val ? this.setAttribute('auto-redraw', true) : this.removeAttribute('auto-redraw'); }\r\n\r\n get noAutoRecenter() { return this.hasAttribute('no-auto-recenter') || false; }\r\n set noAutoRecenter(val) { val ? this.setAttribute('no-auto-recenter', true) : this.removeAttribute('no-auto-recenter'); }\r\n\r\n get jointValues() {\r\n\r\n const values = {};\r\n if (this.robot) {\r\n\r\n for (const name in this.robot.joints) {\r\n\r\n const joint = this.robot.joints[name];\r\n values[name] = joint.jointValue.length === 1 ? joint.angle : [...joint.jointValue];\r\n\r\n }\r\n\r\n }\r\n\r\n return values;\r\n\r\n }\r\n set jointValues(val) { this.setJointValues(val); }\r\n\r\n get angles() {\r\n\r\n return this.jointValues;\r\n\r\n }\r\n set angles(v) {\r\n\r\n this.jointValues = v;\r\n\r\n }\r\n\r\n /* Lifecycle Functions */\r\n constructor() {\r\n\r\n super();\r\n\r\n this._requestId = 0;\r\n this._dirty = false;\r\n this._loadScheduled = false;\r\n this.robot = null;\r\n this.loadMeshFunc = null;\r\n this.urlModifierFunc = null;\r\n\r\n // Scene setup\r\n const scene = new THREE.Scene();\r\n\r\n const ambientLight = new THREE.HemisphereLight(this.ambientColor, '#000');\r\n ambientLight.groundColor.lerp(ambientLight.color, 0.5);\r\n ambientLight.intensity = 0.5;\r\n ambientLight.position.set(0, 1, 0);\r\n scene.add(ambientLight);\r\n\r\n // Light setup\r\n const dirLight = new THREE.DirectionalLight(0xffffff);\r\n dirLight.position.set(4, 10, 1);\r\n dirLight.shadow.mapSize.width = 2048;\r\n dirLight.shadow.mapSize.height = 2048;\r\n dirLight.shadow.normalBias = 0.001;\r\n dirLight.castShadow = true;\r\n scene.add(dirLight);\r\n scene.add(dirLight.target);\r\n\r\n // Renderer setup\r\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\r\n renderer.setClearColor(0xffffff);\r\n renderer.setClearAlpha(0);\r\n renderer.shadowMap.enabled = true;\r\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\n renderer.outputEncoding = THREE.sRGBEncoding;\r\n\r\n // Camera setup\r\n const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);\r\n camera.position.z = -10;\r\n\r\n // World setup\r\n const world = new THREE.Object3D();\r\n scene.add(world);\r\n\r\n const plane = new THREE.Mesh(\r\n new THREE.PlaneBufferGeometry(40, 40),\r\n new THREE.ShadowMaterial({ side: THREE.DoubleSide, transparent: true, opacity: 0.5 }),\r\n );\r\n plane.rotation.x = -Math.PI / 2;\r\n plane.position.y = -0.5;\r\n plane.receiveShadow = true;\r\n plane.scale.set(10, 10, 10);\r\n scene.add(plane);\r\n\r\n // Controls setup\r\n const controls = new OrbitControls(camera, renderer.domElement);\r\n controls.rotateSpeed = 2.0;\r\n controls.zoomSpeed = 5;\r\n controls.panSpeed = 2;\r\n controls.enableZoom = true;\r\n controls.enableDamping = false;\r\n controls.maxDistance = 50;\r\n controls.minDistance = 0.25;\r\n controls.addEventListener('change', () => this.recenter());\r\n\r\n this.scene = scene;\r\n this.world = world;\r\n this.renderer = renderer;\r\n this.camera = camera;\r\n this.controls = controls;\r\n this.plane = plane;\r\n this.directionalLight = dirLight;\r\n this.ambientLight = ambientLight;\r\n\r\n this._setUp(this.up);\r\n\r\n const _renderLoop = () => {\r\n\r\n if (this.parentNode) {\r\n\r\n this.updateSize();\r\n\r\n if (this._dirty || this.autoRedraw) {\r\n\r\n if (!this.noAutoRecenter) {\r\n\r\n this._updateEnvironment();\r\n }\r\n\r\n this.renderer.render(scene, camera);\r\n this._dirty = false;\r\n\r\n }\r\n\r\n // update controls after the environment in\r\n // case the controls are retargeted\r\n this.controls.update();\r\n\r\n }\r\n this._renderLoopId = requestAnimationFrame(_renderLoop);\r\n\r\n };\r\n _renderLoop();\r\n\r\n }\r\n\r\n connectedCallback() {\r\n\r\n // Add our initialize styles for the element if they haven't\r\n // been added yet\r\n if (!this.constructor._styletag) {\r\n\r\n const styletag = document.createElement('style');\r\n styletag.innerHTML =\r\n `\r\n ${ this.tagName } { display: block; }\r\n ${ this.tagName } canvas {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n `;\r\n document.head.appendChild(styletag);\r\n this.constructor._styletag = styletag;\r\n\r\n }\r\n\r\n // add the renderer\r\n if (this.childElementCount === 0) {\r\n\r\n this.appendChild(this.renderer.domElement);\r\n\r\n }\r\n\r\n this.updateSize();\r\n requestAnimationFrame(() => this.updateSize());\r\n\r\n }\r\n\r\n disconnectedCallback() {\r\n\r\n cancelAnimationFrame(this._renderLoopId);\r\n\r\n }\r\n\r\n attributeChangedCallback(attr, oldval, newval) {\r\n\r\n this.recenter();\r\n\r\n switch (attr) {\r\n\r\n case 'package':\r\n case 'urdf': {\r\n\r\n this._scheduleLoad();\r\n break;\r\n\r\n }\r\n\r\n case 'up': {\r\n\r\n this._setUp(this.up);\r\n break;\r\n\r\n }\r\n\r\n case 'ambient-color': {\r\n\r\n this.ambientLight.color.set(this.ambientColor);\r\n this.ambientLight.groundColor.set('#000').lerp(this.ambientLight.color, 0.5);\r\n break;\r\n\r\n }\r\n\r\n case 'ignore-limits': {\r\n\r\n this._setIgnoreLimits(this.ignoreLimits, true);\r\n break;\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n /* Public API */\r\n updateSize() {\r\n\r\n const r = this.renderer;\r\n const w = this.clientWidth;\r\n const h = this.clientHeight;\r\n const currsize = r.getSize(tempVec2);\r\n\r\n if (currsize.width !== w || currsize.height !== h) {\r\n\r\n this.recenter();\r\n\r\n }\r\n\r\n r.setPixelRatio(window.devicePixelRatio);\r\n r.setSize(w, h, false);\r\n\r\n this.camera.aspect = w / h;\r\n this.camera.updateProjectionMatrix();\r\n\r\n }\r\n\r\n redraw() {\r\n\r\n this._dirty = true;\r\n }\r\n\r\n recenter() {\r\n\r\n this._updateEnvironment();\r\n this.redraw();\r\n\r\n }\r\n\r\n // Set the joint with jointName to\r\n // angle in degrees\r\n setJointValue(jointName, ...values) {\r\n\r\n if (!this.robot) return;\r\n if (!this.robot.joints[jointName]) return;\r\n\r\n if (this.robot.joints[jointName].setJointValue(...values)) {\r\n\r\n this.redraw();\r\n this.dispatchEvent(new CustomEvent('angle-change', { bubbles: true, cancelable: true, detail: jointName }));\r\n\r\n }\r\n\r\n }\r\n\r\n setJointValues(values) {\r\n\r\n for (const name in values) this.setJointValue(name, values[name]);\r\n\r\n }\r\n\r\n /* Private Functions */\r\n // Updates the position of the plane to be at the\r\n // lowest point below the robot and focuses the\r\n // camera on the center of the scene\r\n _updateEnvironment() {\r\n\r\n if (!this.robot) return;\r\n\r\n this.world.updateMatrixWorld();\r\n\r\n const bbox = new THREE.Box3();\r\n bbox.setFromObject(this.robot);\r\n\r\n const center = bbox.getCenter(new THREE.Vector3());\r\n this.controls.target.y = center.y;\r\n this.plane.position.y = bbox.min.y - 1e-3;\r\n\r\n const dirLight = this.directionalLight;\r\n dirLight.castShadow = this.displayShadow;\r\n\r\n if (this.displayShadow) {\r\n\r\n // Update the shadow camera rendering bounds to encapsulate the\r\n // model. We use the bounding sphere of the bounding box for\r\n // simplicity -- this could be a tighter fit.\r\n const sphere = bbox.getBoundingSphere(new THREE.Sphere());\r\n const minmax = sphere.radius;\r\n const cam = dirLight.shadow.camera;\r\n cam.left = cam.bottom = -minmax;\r\n cam.right = cam.top = minmax;\r\n\r\n // Update the camera to focus on the center of the model so the\r\n // shadow can encapsulate it\r\n const offset = dirLight.position.clone().sub(dirLight.target.position);\r\n dirLight.target.position.copy(center);\r\n dirLight.position.copy(center).add(offset);\r\n\r\n cam.updateProjectionMatrix();\r\n\r\n }\r\n\r\n }\r\n\r\n _scheduleLoad() {\r\n\r\n // if our current model is already what's being requested\r\n // or has been loaded then early out\r\n if (this._prevload === `${ this.package }|${ this.urdf }`) return;\r\n this._prevload = `${ this.package }|${ this.urdf }`;\r\n\r\n // if we're already waiting on a load then early out\r\n if (this._loadScheduled) return;\r\n this._loadScheduled = true;\r\n\r\n if (this.robot) {\r\n\r\n this.robot.traverse(c => c.dispose && c.dispose());\r\n this.robot.parent.remove(this.robot);\r\n this.robot = null;\r\n\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n\r\n this._loadUrdf(this.package, this.urdf);\r\n this._loadScheduled = false;\r\n\r\n });\r\n\r\n }\r\n\r\n // Watch the package and urdf field and load the robot model.\r\n // This should _only_ be called from _scheduleLoad because that\r\n // ensures the that current robot has been removed\r\n _loadUrdf(pkg, urdf) {\r\n\r\n this.dispatchEvent(new CustomEvent('urdf-change', { bubbles: true, cancelable: true, composed: true }));\r\n\r\n if (urdf) {\r\n\r\n // Keep track of this request and make\r\n // sure it doesn't get overwritten by\r\n // a subsequent one\r\n this._requestId++;\r\n const requestId = this._requestId;\r\n\r\n const updateMaterials = mesh => {\r\n\r\n mesh.traverse(c => {\r\n\r\n if (c.isMesh) {\r\n\r\n c.castShadow = true;\r\n c.receiveShadow = true;\r\n\r\n if (c.material) {\r\n\r\n const mats =\r\n (Array.isArray(c.material) ? c.material : [c.material])\r\n .map(m => {\r\n\r\n if (m instanceof THREE.MeshBasicMaterial) {\r\n\r\n m = new THREE.MeshPhongMaterial();\r\n\r\n }\r\n\r\n if (m.map) {\r\n\r\n m.map.encoding = THREE.GammaEncoding;\r\n\r\n }\r\n\r\n return m;\r\n\r\n });\r\n c.material = mats.length === 1 ? mats[0] : mats;\r\n\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n };\r\n\r\n if (pkg.includes(':') && (pkg.split(':')[1].substring(0, 2)) !== '//') {\r\n // E.g. pkg = \"pkg_name: path/to/pkg_name, pk2: path2/to/pk2\"}\r\n\r\n // Convert pkg(s) into a map. E.g.\r\n // { \"pkg_name\": \"path/to/pkg_name\",\r\n // \"pk2\": \"path2/to/pk2\" }\r\n\r\n pkg = pkg.split(',').reduce((map, value) => {\r\n\r\n const split = value.split(/:/).filter(x => !!x);\r\n const pkgName = split.shift().trim();\r\n const pkgPath = split.join(':').trim();\r\n map[pkgName] = pkgPath;\r\n\r\n return map;\r\n\r\n }, {});\r\n }\r\n\r\n let robot = null;\r\n const manager = new THREE.LoadingManager();\r\n manager.onLoad = () => {\r\n\r\n // If another request has come in to load a new\r\n // robot, then ignore this one\r\n if (this._requestId !== requestId) {\r\n\r\n robot.traverse(c => c.dispose && c.dispose());\r\n return;\r\n\r\n }\r\n\r\n this.robot = robot;\r\n this.world.add(robot);\r\n updateMaterials(robot);\r\n\r\n this._setIgnoreLimits(this.ignoreLimits);\r\n\r\n this.dispatchEvent(new CustomEvent('urdf-processed', { bubbles: true, cancelable: true, composed: true }));\r\n this.dispatchEvent(new CustomEvent('geometry-loaded', { bubbles: true, cancelable: true, composed: true }));\r\n\r\n this.recenter();\r\n\r\n };\r\n\r\n if (this.urlModifierFunc) {\r\n\r\n manager.setURLModifier(this.urlModifierFunc);\r\n\r\n }\r\n\r\n const loader = new URDFLoader(manager);\r\n loader.packages = pkg;\r\n loader.loadMeshCb = this.loadMeshFunc;\r\n loader.fetchOptions = { mode: 'cors', credentials: 'same-origin' };\r\n loader.load(urdf, model => robot = model);\r\n\r\n }\r\n\r\n }\r\n\r\n // Watch the coordinate frame and update the\r\n // rotation of the scene to match\r\n _setUp(up) {\r\n\r\n if (!up) up = '+Z';\r\n up = up.toUpperCase();\r\n const sign = up.replace(/[^-+]/g, '')[0] || '+';\r\n const axis = up.replace(/[^XYZ]/gi, '')[0] || 'Z';\r\n\r\n const PI = Math.PI;\r\n const HALFPI = PI / 2;\r\n if (axis === 'X') this.world.rotation.set(0, 0, sign === '+' ? HALFPI : -HALFPI);\r\n if (axis === 'Z') this.world.rotation.set(sign === '+' ? -HALFPI : HALFPI, 0, 0);\r\n if (axis === 'Y') this.world.rotation.set(sign === '+' ? 0 : PI, 0, 0);\r\n\r\n }\r\n\r\n // Updates the current robot's angles to ignore\r\n // joint limits or not\r\n _setIgnoreLimits(ignore, dispatch = false) {\r\n\r\n if (this.robot) {\r\n\r\n Object\r\n .values(this.robot.joints)\r\n .forEach(joint => {\r\n\r\n joint.ignoreLimits = ignore;\r\n joint.setJointValue(...joint.jointValue);\r\n\r\n });\r\n\r\n }\r\n\r\n if (dispatch) {\r\n\r\n this.dispatchEvent(new CustomEvent('ignore-limits-change', { bubbles: true, cancelable: true, composed: true }));\r\n\r\n }\r\n\r\n }\r\n\r\n};\r\n"],"names":["THREE","OrbitControls","URDFLoader"],"mappings":"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"}
|
package/CHANGELOG.md
DELETED
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
All notable changes to this project will be documented in this file.
|
|
3
|
-
|
|
4
|
-
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
5
|
-
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
6
|
-
|
|
7
|
-
## Unreleased
|
|
8
|
-
### Fixed
|
|
9
|
-
- Typescript defintions for "packages" field.
|
|
10
|
-
|
|
11
|
-
## [0.10.1] - 2021-04-16
|
|
12
|
-
### Added
|
|
13
|
-
- Reexport URDF Class types from the root file.
|
|
14
|
-
|
|
15
|
-
## [0.10.0] - 2021-04-16
|
|
16
|
-
### Fixed
|
|
17
|
-
- `URDFJoint.axis` not correctly defaulting to `1, 0, 0`.
|
|
18
|
-
|
|
19
|
-
### Changed
|
|
20
|
-
- Added `"type": "module"` to the package.json and made the main entry file point to the es6 module.
|
|
21
|
-
- Export URDF Class types as `interafaces` rather than `classes`.
|
|
22
|
-
- Changed URDF Class type definitions to be exported as `interface` rather than `class`.
|
|
23
|
-
|
|
24
|
-
## [0.9.5] - 2021-01-26
|
|
25
|
-
### Added
|
|
26
|
-
- Support for "mimic" joints.
|
|
27
|
-
|
|
28
|
-
### Fixed
|
|
29
|
-
- Incorrect mouseover and mouseout event firing with the manipulation element.
|
|
30
|
-
|
|
31
|
-
## [0.9.3] - 2021-01-19
|
|
32
|
-
### Fixed
|
|
33
|
-
- Unnecessary creation of a new quaternion when setting a joint angle.
|
|
34
|
-
- Throw a human readable error when fetch fails.
|
|
35
|
-
- The model failing to clone if the object names were changed.
|
|
36
|
-
|
|
37
|
-
### Added
|
|
38
|
-
- Ability to set the `packages` option to a function.
|
|
39
|
-
|
|
40
|
-
## [0.9.2] - 2020-10-23
|
|
41
|
-
### Added
|
|
42
|
-
- Normal bias to shadows in URDFViewerElement.
|
|
43
|
-
|
|
44
|
-
### Fixed
|
|
45
|
-
- Apply the mesh node scale to the parent visual node rather than the loaded mesh.
|
|
46
|
-
- URDFViewerElement incorrectly calling setJointValue.
|
|
47
|
-
- Incorrectly preserving rotation from loaded meshes.
|
|
48
|
-
|
|
49
|
-
## [0.9.1] - 2020-10-13
|
|
50
|
-
### Fixed
|
|
51
|
-
- Fix `URDFRobot.setJointValues` not always setting all joint values.
|
|
52
|
-
|
|
53
|
-
## [0.9.0] - 2020-10-09
|
|
54
|
-
### Added
|
|
55
|
-
- `URDFRobot.frames` map.
|
|
56
|
-
- `URDFRobot.visual` map.
|
|
57
|
-
- `URDFRobot.colliders` map.
|
|
58
|
-
- Visual and collider nodes now get the name of the associated urdf node.
|
|
59
|
-
- Typescript definitions for URDFVisual and URDFCollider objects.
|
|
60
|
-
- `setJointValue` function to `URDFJoint` and `URDFRobot`.
|
|
61
|
-
- `getFrame` function to `URDFRobot`.
|
|
62
|
-
|
|
63
|
-
### Changed
|
|
64
|
-
- Transparent materials now set `depthWrite` to false.
|
|
65
|
-
- Removed `setOffset`, `setAngles`, and `setAngle` functions from `URDFJoint` and `URDFRobot`.
|
|
66
|
-
|
|
67
|
-
### Fixed
|
|
68
|
-
- Incorrect use of `worldMatrixNeedsUpdate` to `matrixWorldNeedsUpdate`.
|
|
69
|
-
|
|
70
|
-
## [0.8.2] - 2020-06-08
|
|
71
|
-
### Changed
|
|
72
|
-
- License text in README to remove unnecessary copy.
|
|
73
|
-
|
|
74
|
-
## [0.8.1] - 2020-03-12
|
|
75
|
-
### Added
|
|
76
|
-
- Support for processing pre-parsed XML documents to the `parse` function. A `Document` or `Element` object as returned from `DOMParser` may be passed in place of the xml string.
|
|
77
|
-
|
|
78
|
-
## [0.8.0] - 2020-01-03
|
|
79
|
-
### Changed
|
|
80
|
-
- Moved the URDFLoader options to member variables instead of an object paramter to `parse` and `load` functions.
|
|
81
|
-
- Added `onError` and `onProgress` callbacks to `load` function.
|
|
82
|
-
|
|
83
|
-
## [0.7.3] - 2019-11-08
|
|
84
|
-
### Fixed
|
|
85
|
-
- Incorrect handling of empty "texture" tags that caused materials to display improperly.
|
|
86
|
-
|
|
87
|
-
## [0.7.2] - 2019-09-29
|
|
88
|
-
### Changed
|
|
89
|
-
- Caltech license copy.
|
|
90
|
-
|
|
91
|
-
## [0.7.1] - 2019-06-29
|
|
92
|
-
### Fixed
|
|
93
|
-
- Typescript definition file for URDFLoader.
|
|
94
|
-
|
|
95
|
-
## [0.7.0] - 2019-06-28
|
|
96
|
-
### Changed
|
|
97
|
-
- Use the jsm versions of the loader modules from three.js.
|
|
98
|
-
- Bump three.js peer dependency to 0.105.0.
|
|
99
|
-
|
|
100
|
-
## [0.6.3] - 2019-06-28
|
|
101
|
-
### Added
|
|
102
|
-
- Support for parsing collision nodes.
|
|
103
|
-
|
|
104
|
-
## [0.6.2] - 2019-04-18
|
|
105
|
-
### Added
|
|
106
|
-
- Typescript definition files
|
|
107
|
-
|
|
108
|
-
## [0.6.1] - 2019-03-06
|
|
109
|
-
### Fixed
|
|
110
|
-
- Continuous joints not being able to rotate.
|
|
111
|
-
- Always parse joint angles to numbers.
|
|
112
|
-
|
|
113
|
-
## [0.6.0] - 2019-02-23
|
|
114
|
-
### Added
|
|
115
|
-
- Added `setAngle` and `setAngles` function to the Robot node
|
|
116
|
-
- Added `meshLoadFunc` and `urlModifierFunc` functions to `URDFViewer` component.
|
|
117
|
-
|
|
118
|
-
### Changed
|
|
119
|
-
- Changed `loadMeshCb` function API to take `url`, `manager`, and `done`.
|
|
120
|
-
- Materials defined as "shared" by name in the URDF are shared among meshes, now.
|
|
121
|
-
- The root link is now the same as the URDF Robot object.
|
|
122
|
-
- Moved the `packages` parameter to the options object.
|
|
123
|
-
|
|
124
|
-
### Removed
|
|
125
|
-
- Removed `urdfLoader` and `loadingManager` fields from `URDFViewer` component.
|
|
126
|
-
|
|
127
|
-
## [0.5.3] - 2018-12-17
|
|
128
|
-
### Added
|
|
129
|
-
- `matrixWorldNeedsUpdate` is set to true when the URDFJoints are set.
|
|
130
|
-
|
|
131
|
-
### Fixed
|
|
132
|
-
- Scale being overwritten on models that are loaded with pre-set scale values.
|
|
133
|
-
- Loader not completing if a mesh could not be loaded.
|
|
134
|
-
|
|
135
|
-
## [0.5.2] - 2018-12-5
|
|
136
|
-
### Added
|
|
137
|
-
- URDF XML Node to URDF Joint, Link, and Robot objects
|
|
138
|
-
- Add clone functionality
|
|
139
|
-
|
|
140
|
-
### Changed
|
|
141
|
-
- OnComplete callback now fires once all meshes have loaded
|
|
142
|
-
- Removed unnecessary parent when creating a cylinder visual node
|
|
143
|
-
|
|
144
|
-
## [0.5.1] - 2018-11-14
|
|
145
|
-
### Fixed
|
|
146
|
-
- Use buffer variants of Box and Sphere geometry.
|
|
147
|
-
- Fix the way that roll, pitch, yaw rotations are applied.
|
|
148
|
-
|
|
149
|
-
## [0.5.0] - 2018-11-01
|
|
150
|
-
### Changed
|
|
151
|
-
- The root scripts are now es6 import compatible and require a build process to use
|
|
152
|
-
|
|
153
|
-
### Added
|
|
154
|
-
- Backward compatible umd versions of the scripts in `/umd`
|
|
155
|
-
- Support for shared, named materials in the URDF
|
|
156
|
-
|
|
157
|
-
## [0.4.3] - 2018-10-10
|
|
158
|
-
### Added
|
|
159
|
-
- Add `no-auto-recenter` field to the `urdf-viewer` web component.
|
|
160
|
-
|
|
161
|
-
## [0.4.2] - 2018-08-19
|
|
162
|
-
### Added
|
|
163
|
-
- Include `example/styles.css`
|
|
164
|
-
|
|
165
|
-
## [0.4.1] - 2018-08-19
|
|
166
|
-
### Changed
|
|
167
|
-
- README update
|
|
168
|
-
|
|
169
|
-
## [0.4.0] - 2018-08-19
|
|
170
|
-
### Changed
|
|
171
|
-
- Add "path" variable to parse function signature
|
|
172
|
-
- URDF paths are no longer resolved relative to the package path
|
|
173
|
-
- `parse` function signature changed
|
|
174
|
-
- `parse` returns the robot now
|
|
175
|
-
- `meshLoadCb` and `fetchOptions` have been moved into an `options` argument object
|
|
176
|
-
- Moved all fields from `Object3D.urdf` to the object itself
|
|
177
|
-
- Changed `type` to `jointType`
|
|
178
|
-
|
|
179
|
-
### Added
|
|
180
|
-
- Add `isURDFRobot`, `isURDFJoint`, `isURDFLink` fields to the robot, joints, and links
|
|
181
|
-
- Set the `type` field of the `Object3D` to `URDFRobot`, `URDFJoint`, and `URDFLink`
|
|
182
|
-
|
|
183
|
-
### Removed
|
|
184
|
-
- `node` field from the urdf info on joints, links, and the robot
|
|
185
|
-
|
|
186
|
-
## [0.3.5] - 2018-08-07
|
|
187
|
-
### Added
|
|
188
|
-
- Add support for providing multiple package paths
|
|
189
|
-
|
|
190
|
-
### Fixed
|
|
191
|
-
- Debounce urdf load so errors are not printed when changing models
|
|
192
|
-
- Create mesh primitives immediately instead of waiting a frame
|
|
193
|
-
|
|
194
|
-
## [0.3.4] - 2018-07-31
|
|
195
|
-
### Fixed
|
|
196
|
-
- Fixed sphere primitives not being added to the model
|
|
197
|
-
- Fixed cylinder primitive rotation
|
|
198
|
-
|
|
199
|
-
## [0.3.3] - 2018-07-28
|
|
200
|
-
### Changed
|
|
201
|
-
- Make element auto redraw whenever a texture loads
|
|
202
|
-
|
|
203
|
-
### Fixed
|
|
204
|
-
- Fix drag and drop file path cleansing in example files
|
|
205
|
-
- Fix console error on drag manipulation in manipulation element
|
|
206
|
-
|
|
207
|
-
## [0.3.2] - 2018-07-03
|
|
208
|
-
### Changed
|
|
209
|
-
- Add urdf-manipulator element for demo
|
|
210
|
-
|
|
211
|
-
## [0.3.1] - 2018-07-01
|
|
212
|
-
### Fixed
|
|
213
|
-
- Fix the example input fields not converting to radians
|
|
214
|
-
|
|
215
|
-
## [0.3.0] - 2018-06-30
|
|
216
|
-
### Changed
|
|
217
|
-
- Model bounding box is used to make better use of shadow map resolution.
|
|
218
|
-
- Fix joint controls still being clickable when hidden
|
|
219
|
-
- Rename `joint.urdf.limits` to `joint.urdf.limit` so it lines up with the URDF definition
|
|
220
|
-
- Full `http://` or `file://` uris are supported (package path is not prepended in this case)
|
|
221
|
-
|
|
222
|
-
## [0.2.6] - 2018-06-28
|
|
223
|
-
### Fixed
|
|
224
|
-
- Render meshes double sided in shadows
|
|
225
|
-
- Disable shadows casting on model when the shadow display is disabled
|
|
226
|
-
|
|
227
|
-
## [0.2.5] - 2018-06-28
|
|
228
|
-
### Changed
|
|
229
|
-
- Do not change the material type provided by the mesh loader to MeshLambertMaterial when setting the colors from the URDF.
|
|
230
|
-
- Use a hemisphere light and linear rendering in the element and example
|
|
231
|
-
- Enable better shadow rendering
|
|
232
|
-
|
|
233
|
-
## [0.2.4] - 2018-06-22
|
|
234
|
-
### Changed
|
|
235
|
-
- Change `urdf-viewer` element `up` attribute to default to +Z so it lines up with the default ROS coordinate frame
|
|
236
|
-
|
|
237
|
-
### Fixed
|
|
238
|
-
- Fix the default mesh loader throwing an error because `this` was undefined.
|
|
239
|
-
|
|
240
|
-
## [0.2.3] - 2018-06-22
|
|
241
|
-
### Added
|
|
242
|
-
- Add the `auto-redraw` attribute to the urdf-viewer element
|
|
243
|
-
|
|
244
|
-
## [0.2.2] - 2018-06-14
|
|
245
|
-
### Added
|
|
246
|
-
- Add `redraw()` function to the viewer element
|
|
247
|
-
- Add flipped variants of the ATHLETE URDF models
|
|
248
|
-
|
|
249
|
-
### Changed
|
|
250
|
-
- Update example to start at a nicer viewing angle
|
|
251
|
-
- Update some underlying example code
|
|
252
|
-
|
|
253
|
-
## [0.2.1] - 2018-06-13
|
|
254
|
-
### Changed
|
|
255
|
-
- Optimize rendering in `<urdf-viewer>`
|
|
256
|
-
- Keep the robot in the middle of the screen in `<urdf-viewer>`
|
|
257
|
-
- Adjust the the `<urdf-viewer>` up attribute to line up with the default ROS coordinate frame
|
|
258
|
-
|
|
259
|
-
### Fixed
|
|
260
|
-
- Meshes not scaling the by mesh tags `scale` attribute
|
|
261
|
-
- Revolute joints rotating the wrong direction
|
|
262
|
-
|
|
263
|
-
## [0.1.2] - 2018-05-28
|
|
264
|
-
### Added
|
|
265
|
-
- Support for prismatic joints
|
|
266
|
-
|
|
267
|
-
### Fixed
|
|
268
|
-
- Fix not defaulting revolute joint limits to 0
|