@ioai/robot_viewer 0.0.0-stage → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +183 -2
  3. package/bin/cli.js +83 -0
  4. package/dist/assets/css/PlotPanel-3e7d7555.css +1 -0
  5. package/dist/assets/js/ColladaLoader-2a0c4638.js +1 -0
  6. package/dist/assets/js/GLTFLoader-7a7f40d7.js +1 -0
  7. package/dist/assets/js/MTLLoader-b6ce88b7.js +1 -0
  8. package/dist/assets/js/OBJLoader-7667aa01.js +1 -0
  9. package/dist/assets/js/PlotPanel-64b4820e.js +1 -0
  10. package/dist/assets/js/STLLoader-de0915d4.js +1 -0
  11. package/dist/assets/js/URDFLoader-a34b6917.js +1 -0
  12. package/dist/assets/js/USDZLoader-64197f74.js +7 -0
  13. package/dist/assets/js/__vite-browser-external-afb87ea8.js +1 -0
  14. package/dist/assets/js/codemirror-c3cec7b3.js +1 -0
  15. package/dist/assets/js/codemirror-themes-e6995a6a.js +1 -0
  16. package/dist/assets/js/d3-2e308866.js +1 -0
  17. package/dist/assets/js/index-2e5294e6.js +6 -0
  18. package/dist/assets/js/mujoco_wasm-e013cb22.js +1 -0
  19. package/dist/assets/js/three-9c891de0.js +6 -0
  20. package/dist/camera-publish-worker.js +1 -0
  21. package/dist/favicon.svg +2 -0
  22. package/dist/heartbeat-worker.js +1 -0
  23. package/dist/index.html +4373 -0
  24. package/dist/models/mocap/blender_human.urdf +2319 -0
  25. package/dist/models/mocap/blender_human_skeleton_v4.urdf +1432 -0
  26. package/dist/models/mocap/blender_human_skeleton_v5.urdf +2717 -0
  27. package/dist/models/mocap/meshes/v4/L_base_link.STL +0 -0
  28. package/dist/models/mocap/meshes/v4/L_figer1_1.STL +0 -0
  29. package/dist/models/mocap/meshes/v4/L_figer1_2.STL +0 -0
  30. package/dist/models/mocap/meshes/v4/L_figer1_3.STL +0 -0
  31. package/dist/models/mocap/meshes/v4/L_figer1_4.STL +0 -0
  32. package/dist/models/mocap/meshes/v4/L_figer1_5.STL +0 -0
  33. package/dist/models/mocap/meshes/v4/L_figer1base.STL +0 -0
  34. package/dist/models/mocap/meshes/v4/L_figer2_1.STL +0 -0
  35. package/dist/models/mocap/meshes/v4/L_figer2_2.STL +0 -0
  36. package/dist/models/mocap/meshes/v4/L_figer2_3.STL +0 -0
  37. package/dist/models/mocap/meshes/v4/L_figer2_4.STL +0 -0
  38. package/dist/models/mocap/meshes/v4/L_figer2_5.STL +0 -0
  39. package/dist/models/mocap/meshes/v4/L_figer3_1.STL +0 -0
  40. package/dist/models/mocap/meshes/v4/L_figer3_2.STL +0 -0
  41. package/dist/models/mocap/meshes/v4/L_figer3_3.STL +0 -0
  42. package/dist/models/mocap/meshes/v4/L_figer3_4.STL +0 -0
  43. package/dist/models/mocap/meshes/v4/L_figer3_5.STL +0 -0
  44. package/dist/models/mocap/meshes/v4/L_figer4_1.STL +0 -0
  45. package/dist/models/mocap/meshes/v4/L_figer4_2.STL +0 -0
  46. package/dist/models/mocap/meshes/v4/L_figer4_3.STL +0 -0
  47. package/dist/models/mocap/meshes/v4/L_figer4_4.STL +0 -0
  48. package/dist/models/mocap/meshes/v4/L_figer4_5.STL +0 -0
  49. package/dist/models/mocap/meshes/v4/L_figer5_1.STL +0 -0
  50. package/dist/models/mocap/meshes/v4/L_figer5_2.STL +0 -0
  51. package/dist/models/mocap/meshes/v4/L_figer5_3.STL +0 -0
  52. package/dist/models/mocap/meshes/v4/L_figer5_4.STL +0 -0
  53. package/dist/models/mocap/meshes/v4/L_figer5_5.STL +0 -0
  54. package/dist/models/mocap/meshes/v4/L_handle.STL +0 -0
  55. package/dist/models/mocap/meshes/v4/L_handleseat.STL +0 -0
  56. package/dist/models/mocap/meshes/v4/L_mark.STL +0 -0
  57. package/dist/models/mocap/meshes/v4/L_markseat.STL +0 -0
  58. package/dist/models/mocap/meshes/v4/Lgamepadbase.STL +0 -0
  59. package/dist/models/mocap/meshes/v4/Link1.STL +0 -0
  60. package/dist/models/mocap/meshes/v4/Link2.STL +0 -0
  61. package/dist/models/mocap/meshes/v4/R_base_link.STL +0 -0
  62. package/dist/models/mocap/meshes/v4/R_figer1_1.STL +0 -0
  63. package/dist/models/mocap/meshes/v4/R_figer1_2.STL +0 -0
  64. package/dist/models/mocap/meshes/v4/R_figer1_3.STL +0 -0
  65. package/dist/models/mocap/meshes/v4/R_figer1_4.STL +0 -0
  66. package/dist/models/mocap/meshes/v4/R_figer1_5.STL +0 -0
  67. package/dist/models/mocap/meshes/v4/R_figer1base.STL +0 -0
  68. package/dist/models/mocap/meshes/v4/R_figer2_1.STL +0 -0
  69. package/dist/models/mocap/meshes/v4/R_figer2_2.STL +0 -0
  70. package/dist/models/mocap/meshes/v4/R_figer2_3.STL +0 -0
  71. package/dist/models/mocap/meshes/v4/R_figer2_4.STL +0 -0
  72. package/dist/models/mocap/meshes/v4/R_figer2_5.STL +0 -0
  73. package/dist/models/mocap/meshes/v4/R_figer3_1.STL +0 -0
  74. package/dist/models/mocap/meshes/v4/R_figer3_2.STL +0 -0
  75. package/dist/models/mocap/meshes/v4/R_figer3_3.STL +0 -0
  76. package/dist/models/mocap/meshes/v4/R_figer3_4.STL +0 -0
  77. package/dist/models/mocap/meshes/v4/R_figer3_5.STL +0 -0
  78. package/dist/models/mocap/meshes/v4/R_figer4_1.STL +0 -0
  79. package/dist/models/mocap/meshes/v4/R_figer4_2.STL +0 -0
  80. package/dist/models/mocap/meshes/v4/R_figer4_3.STL +0 -0
  81. package/dist/models/mocap/meshes/v4/R_figer4_4.STL +0 -0
  82. package/dist/models/mocap/meshes/v4/R_figer4_5.STL +0 -0
  83. package/dist/models/mocap/meshes/v4/R_figer5_1.STL +0 -0
  84. package/dist/models/mocap/meshes/v4/R_figer5_2.STL +0 -0
  85. package/dist/models/mocap/meshes/v4/R_figer5_3.STL +0 -0
  86. package/dist/models/mocap/meshes/v4/R_figer5_4.STL +0 -0
  87. package/dist/models/mocap/meshes/v4/R_figer5_5.STL +0 -0
  88. package/dist/models/mocap/meshes/v4/R_handle.STL +0 -0
  89. package/dist/models/mocap/meshes/v4/R_handleseat.STL +0 -0
  90. package/dist/models/mocap/meshes/v4/R_mark.STL +0 -0
  91. package/dist/models/mocap/meshes/v4/R_markseat.STL +0 -0
  92. package/dist/models/mocap/meshes/v4/Rgamepadbase.STL +0 -0
  93. package/dist/models/mocap/meshes/v4/base_link.STL +0 -0
  94. package/dist/models/mocap/meshes/v4/r_figer1_1.STL +0 -0
  95. package/dist/models/mocap/meshes/v5/L_handleseat.STL +0 -0
  96. package/dist/models/mocap/meshes/v5/R_handleseat.STL +0 -0
  97. package/dist/models/mocap/meshes/v5/link_LeftSkeletonBase.STL +0 -0
  98. package/dist/models/mocap/meshes/v5/link_LeftSkeletonIndex1.STL +0 -0
  99. package/dist/models/mocap/meshes/v5/link_LeftSkeletonIndex2.STL +0 -0
  100. package/dist/models/mocap/meshes/v5/link_LeftSkeletonIndex3.STL +0 -0
  101. package/dist/models/mocap/meshes/v5/link_LeftSkeletonIndex4.STL +0 -0
  102. package/dist/models/mocap/meshes/v5/link_LeftSkeletonMiddle1.STL +0 -0
  103. package/dist/models/mocap/meshes/v5/link_LeftSkeletonMiddle2.STL +0 -0
  104. package/dist/models/mocap/meshes/v5/link_LeftSkeletonMiddle3.STL +0 -0
  105. package/dist/models/mocap/meshes/v5/link_LeftSkeletonMiddle4.STL +0 -0
  106. package/dist/models/mocap/meshes/v5/link_LeftSkeletonPinky1.STL +0 -0
  107. package/dist/models/mocap/meshes/v5/link_LeftSkeletonPinky2.STL +0 -0
  108. package/dist/models/mocap/meshes/v5/link_LeftSkeletonPinky3.STL +0 -0
  109. package/dist/models/mocap/meshes/v5/link_LeftSkeletonPinky4.STL +0 -0
  110. package/dist/models/mocap/meshes/v5/link_LeftSkeletonRing1.STL +0 -0
  111. package/dist/models/mocap/meshes/v5/link_LeftSkeletonRing2.STL +0 -0
  112. package/dist/models/mocap/meshes/v5/link_LeftSkeletonRing3.STL +0 -0
  113. package/dist/models/mocap/meshes/v5/link_LeftSkeletonRing4.STL +0 -0
  114. package/dist/models/mocap/meshes/v5/link_LeftSkeletonThumb1.STL +0 -0
  115. package/dist/models/mocap/meshes/v5/link_LeftSkeletonThumb2.STL +0 -0
  116. package/dist/models/mocap/meshes/v5/link_LeftSkeletonThumb3.STL +0 -0
  117. package/dist/models/mocap/meshes/v5/link_LeftSkeletonThumb4.STL +0 -0
  118. package/dist/models/mocap/meshes/v5/link_LeftSkeletonThumbBase.STL +0 -0
  119. package/dist/models/mocap/meshes/v5/link_RightSkeletonBase.STL +0 -0
  120. package/dist/models/mocap/meshes/v5/link_RightSkeletonIndex1.STL +0 -0
  121. package/dist/models/mocap/meshes/v5/link_RightSkeletonIndex2.STL +0 -0
  122. package/dist/models/mocap/meshes/v5/link_RightSkeletonIndex3.STL +0 -0
  123. package/dist/models/mocap/meshes/v5/link_RightSkeletonIndex4.STL +0 -0
  124. package/dist/models/mocap/meshes/v5/link_RightSkeletonMiddle1.STL +0 -0
  125. package/dist/models/mocap/meshes/v5/link_RightSkeletonMiddle2.STL +0 -0
  126. package/dist/models/mocap/meshes/v5/link_RightSkeletonMiddle3.STL +0 -0
  127. package/dist/models/mocap/meshes/v5/link_RightSkeletonMiddle4.STL +0 -0
  128. package/dist/models/mocap/meshes/v5/link_RightSkeletonPinky1.STL +0 -0
  129. package/dist/models/mocap/meshes/v5/link_RightSkeletonPinky2.STL +0 -0
  130. package/dist/models/mocap/meshes/v5/link_RightSkeletonPinky3.STL +0 -0
  131. package/dist/models/mocap/meshes/v5/link_RightSkeletonPinky4.STL +0 -0
  132. package/dist/models/mocap/meshes/v5/link_RightSkeletonRing1.STL +0 -0
  133. package/dist/models/mocap/meshes/v5/link_RightSkeletonRing2.STL +0 -0
  134. package/dist/models/mocap/meshes/v5/link_RightSkeletonRing3.STL +0 -0
  135. package/dist/models/mocap/meshes/v5/link_RightSkeletonRing4.STL +0 -0
  136. package/dist/models/mocap/meshes/v5/link_RightSkeletonThumb1.STL +0 -0
  137. package/dist/models/mocap/meshes/v5/link_RightSkeletonThumb2.STL +0 -0
  138. package/dist/models/mocap/meshes/v5/link_RightSkeletonThumb3.STL +0 -0
  139. package/dist/models/mocap/meshes/v5/link_RightSkeletonThumb4.STL +0 -0
  140. package/dist/models/mocap/meshes/v5/link_RightSkeletonThumbBase.STL +0 -0
  141. package/dist/scripts/start-rosbridge.sh +77 -0
  142. package/dist/usd-iframe.html +41 -0
  143. package/dist/usd-viewer/bindings/.gitattributes +2 -0
  144. package/dist/usd-viewer/bindings/emHdBindings.data +19331 -0
  145. package/dist/usd-viewer/bindings/emHdBindings.js +12281 -0
  146. package/dist/usd-viewer/bindings/emHdBindings.wasm +0 -0
  147. package/dist/usd-viewer/bindings/emHdBindings.worker.js +124 -0
  148. package/dist/usd-viewer/environments/neutral.hdr +0 -0
  149. package/dist/usd-viewer/error-handler.js +57 -0
  150. package/dist/usd-viewer/hydra/HydraPrimitives.js +740 -0
  151. package/dist/usd-viewer/hydra/TextureRegistry.js +130 -0
  152. package/dist/usd-viewer/hydra/ThreeJsRenderDelegate.js +65 -0
  153. package/dist/usd-viewer/index.d.ts +1 -0
  154. package/dist/usd-viewer/main.js +1018 -0
  155. package/dist/usd-viewer/usd.html +36 -0
  156. package/dist/usd-viewer/usdUtils.js +67 -0
  157. package/package.json +70 -4
  158. package/server/package.json +14 -0
  159. package/server/static-server.js +88 -0
@@ -0,0 +1,130 @@
1
+ import { TextureLoader } from "three";
2
+ import { TGALoader } from "three/addons/loaders/TGALoader.js";
3
+ import { EXRLoader } from "three/addons/loaders/EXRLoader.js";
4
+
5
+ const DEBUG_TEXTURES = false;
6
+
7
+ export class TextureRegistry {
8
+ /**
9
+ * @param {import('../../usd-viewer').threeJsRenderDelegateConfig} config
10
+ */
11
+ constructor(config) {
12
+ this.config = config;
13
+ this.allPaths = config.paths;
14
+ this.textures = [];
15
+ this.loader = new TextureLoader();
16
+ this.tgaLoader = new TGALoader();
17
+ this.exrLoader = new EXRLoader();
18
+
19
+ // Determine base URL for external assets from globally provided asset base
20
+ if (typeof window !== "undefined" && window.__usdAssetBase) {
21
+ this.baseUrl = String(window.__usdAssetBase).replace(/\/$/, "");
22
+ }
23
+ }
24
+
25
+ getTexture(resourcePath) {
26
+ if (DEBUG_TEXTURES) console.log("get texture", resourcePath);
27
+
28
+ if (this.textures[resourcePath]) return this.textures[resourcePath];
29
+ if (!resourcePath) {
30
+ return Promise.reject(
31
+ new Error("Empty resource path for file: " + resourcePath)
32
+ );
33
+ }
34
+
35
+ let textureResolve, textureReject;
36
+ this.textures[resourcePath] = new Promise((resolve, reject) => {
37
+ textureResolve = resolve;
38
+ textureReject = reject;
39
+ });
40
+
41
+ // Extract file extension, handling USDZ-internal paths like "file.usdz[0/texture.jpg]"
42
+ const extractExtension = (path) => {
43
+ // Handle USDZ internal paths: extract extension from the inner path
44
+ const usdzMatch = path.match(/\.usdz\[\d+\/.*\.(\w+)\]$/i);
45
+ if (usdzMatch) return usdzMatch[1].toLowerCase();
46
+
47
+ // Regular file path extension
48
+ const match = path.match(/\.(\w+)(?:\])?$/i);
49
+ return match ? match[1].toLowerCase() : null;
50
+ };
51
+
52
+ const ext = extractExtension(resourcePath);
53
+ const typeMap = {
54
+ png: "image/png",
55
+ jpg: "image/jpeg",
56
+ jpeg: "image/jpeg",
57
+ exr: "image/x-exr",
58
+ tga: "image/tga",
59
+ };
60
+
61
+ const filetype = typeMap[ext];
62
+ if (!filetype) {
63
+ console.error("[USD] unknown filetype", resourcePath);
64
+ }
65
+ if (ext === "exr" || ext === "tga") {
66
+ console.warn(
67
+ `${ext.toUpperCase()} textures are not fully supported yet`,
68
+ resourcePath
69
+ );
70
+ }
71
+
72
+ this.config.driver().getFile(resourcePath, async (loadedFile) => {
73
+ let loader = this.loader;
74
+ if (filetype === "image/tga") loader = this.tgaLoader;
75
+ else if (filetype === "image/x-exr") loader = this.exrLoader;
76
+
77
+ const loadFromFile = (_loadedFile) => {
78
+ if (DEBUG_TEXTURES)
79
+ console.log("Loading file", resourcePath, "=>", !!_loadedFile);
80
+
81
+ let url;
82
+ if (_loadedFile) {
83
+ url = URL.createObjectURL(
84
+ new Blob([_loadedFile.slice(0)], { type: filetype })
85
+ );
86
+ } else if (this.baseUrl) {
87
+ const networkPath = resourcePath
88
+ .replace(/^\/+/, "")
89
+ .replace(/^host\//, "");
90
+ url = this.baseUrl + networkPath;
91
+ } else {
92
+ url = resourcePath;
93
+ }
94
+
95
+ loader.load(
96
+ url,
97
+ (texture) => {
98
+ texture.name = resourcePath;
99
+ textureResolve(texture);
100
+ },
101
+ undefined,
102
+ textureReject
103
+ );
104
+ };
105
+
106
+ if (!loadedFile && !this.baseUrl) {
107
+ // Create stub texture for USDZ-internal paths to prevent errors
108
+ if (resourcePath.includes(".usdz[")) {
109
+ const canvas = document.createElement("canvas");
110
+ canvas.width = canvas.height = 1;
111
+ const ctx = canvas.getContext("2d");
112
+ if (ctx) {
113
+ ctx.fillStyle = "#ffffff";
114
+ ctx.fillRect(0, 0, 1, 1);
115
+ }
116
+ const stubTexture = this.loader.load(canvas.toDataURL());
117
+ stubTexture.name = resourcePath;
118
+ textureResolve(stubTexture);
119
+ return;
120
+ }
121
+ textureReject(new Error("Unknown file: " + resourcePath));
122
+ return;
123
+ }
124
+
125
+ loadFromFile(loadedFile);
126
+ });
127
+
128
+ return this.textures[resourcePath];
129
+ }
130
+ }
@@ -0,0 +1,65 @@
1
+ import { TextureRegistry } from "./TextureRegistry.js";
2
+ import {
3
+ HydraMesh,
4
+ HydraCamera,
5
+ HydraLight,
6
+ HydraMaterial,
7
+ } from "./HydraPrimitives.js";
8
+
9
+ const DEBUG_PRIMS = false;
10
+
11
+ // Used by the driver to create the delegate
12
+ export class ThreeRenderDelegateInterface {
13
+ /**
14
+ * @param {import('../../usd-viewer').threeJsRenderDelegateConfig} config
15
+ */
16
+ constructor(config) {
17
+ this.config = config;
18
+ if (DEBUG_PRIMS) console.log("RenderDelegateInterface", config);
19
+ this.registry = new TextureRegistry(config);
20
+ this.materials = {};
21
+ this.meshes = {};
22
+ }
23
+
24
+ /**
25
+ * Render Prims. See webRenderDelegate.h and webRenderDelegate.cpp
26
+ * @param {string} typeId // translated from TfToken
27
+ * @param {string} id // SdfPath.GetAsString()
28
+ * @param {*} instancerId
29
+ * @returns
30
+ */
31
+ createRPrim(typeId, id) {
32
+ if (DEBUG_PRIMS) console.log("Creating RPrim:", typeId, id);
33
+ const mesh = new HydraMesh(id, this);
34
+ this.meshes[id] = mesh;
35
+ return mesh;
36
+ }
37
+
38
+ createBPrim(typeId, id) {
39
+ if (DEBUG_PRIMS) console.log("Creating BPrim:", typeId, id);
40
+ }
41
+
42
+ createSPrim(typeId, id) {
43
+ if (DEBUG_PRIMS) console.log("Creating SPrim:", typeId, id);
44
+ const t = String(typeId || "").toLowerCase();
45
+ if (t === "material") {
46
+ const material = new HydraMaterial(id, this);
47
+ this.materials[id] = material;
48
+ return material;
49
+ }
50
+ // Acknowledge camera and light sprims to prevent hydra warnings
51
+ if (t === "camera") {
52
+ return new HydraCamera(id, this);
53
+ }
54
+ if (t.includes("light")) {
55
+ return new HydraLight(id, this);
56
+ }
57
+ }
58
+
59
+ CommitResources() {
60
+ for (const id in this.meshes) {
61
+ const hydraMesh = this.meshes[id];
62
+ hydraMesh.commit();
63
+ }
64
+ }
65
+ }
@@ -0,0 +1 @@
1
+ export * from "../usd/types";