@openhps/openvslam 0.0.0-stage → 0.1.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.
Files changed (144) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +115 -2
  3. package/cc/config.cc +49 -0
  4. package/cc/config.h +24 -0
  5. package/cc/frame_publisher.cc +62 -0
  6. package/cc/frame_publisher.h +27 -0
  7. package/cc/graph_node.cc +78 -0
  8. package/cc/graph_node.h +26 -0
  9. package/cc/keyframe.cc +81 -0
  10. package/cc/keyframe.h +27 -0
  11. package/cc/landmark.cc +85 -0
  12. package/cc/landmark.h +26 -0
  13. package/cc/map_publisher.cc +119 -0
  14. package/cc/map_publisher.h +33 -0
  15. package/cc/openvslam.cc +26 -0
  16. package/cc/pangolin_viewer/viewer.h +26 -0
  17. package/cc/socket_publisher/publisher.cc +84 -0
  18. package/cc/socket_publisher/publisher.h +26 -0
  19. package/cc/system.cc +190 -0
  20. package/cc/system.h +47 -0
  21. package/dist/cjs/data/VSLAMFrame.js +44 -0
  22. package/dist/cjs/data/VSLAMFrame.js.map +1 -0
  23. package/dist/cjs/data/VSLAMGraphNode.js +7 -0
  24. package/dist/cjs/data/VSLAMGraphNode.js.map +1 -0
  25. package/dist/cjs/data/VSLAMKeyFrame.js +56 -0
  26. package/dist/cjs/data/VSLAMKeyFrame.js.map +1 -0
  27. package/dist/cjs/data/VSLAMLandmark.js +53 -0
  28. package/dist/cjs/data/VSLAMLandmark.js.map +1 -0
  29. package/dist/cjs/data/VSLAMMap.js +36 -0
  30. package/dist/cjs/data/VSLAMMap.js.map +1 -0
  31. package/dist/cjs/data/index.js +8 -0
  32. package/dist/cjs/data/index.js.map +1 -0
  33. package/dist/cjs/index.js +9 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/nodes/VSLAMConfiguration.js +43 -0
  36. package/dist/cjs/nodes/VSLAMConfiguration.js.map +1 -0
  37. package/dist/cjs/nodes/index.js +7 -0
  38. package/dist/cjs/nodes/index.js.map +1 -0
  39. package/dist/cjs/nodes/processing/VSLAMProcessingNode.js +124 -0
  40. package/dist/cjs/nodes/processing/VSLAMProcessingNode.js.map +1 -0
  41. package/dist/cjs/nodes/processing/index.js +5 -0
  42. package/dist/cjs/nodes/processing/index.js.map +1 -0
  43. package/dist/cjs/nodes/sink/VSLAMSocketPublisher.js +68 -0
  44. package/dist/cjs/nodes/sink/VSLAMSocketPublisher.js.map +1 -0
  45. package/dist/cjs/nodes/sink/index.js +5 -0
  46. package/dist/cjs/nodes/sink/index.js.map +1 -0
  47. package/dist/cjs/package.json +3 -0
  48. package/dist/cjs/service/VSLAMService.js +121 -0
  49. package/dist/cjs/service/VSLAMService.js.map +1 -0
  50. package/dist/cjs/service/index.js +5 -0
  51. package/dist/cjs/service/index.js.map +1 -0
  52. package/dist/cjs/tsconfig.bundle.cjs.tsbuildinfo +1 -0
  53. package/dist/esm/data/VSLAMFrame.js +41 -0
  54. package/dist/esm/data/VSLAMFrame.js.map +1 -0
  55. package/dist/esm/data/VSLAMGraphNode.js +3 -0
  56. package/dist/esm/data/VSLAMGraphNode.js.map +1 -0
  57. package/dist/esm/data/VSLAMKeyFrame.js +53 -0
  58. package/dist/esm/data/VSLAMKeyFrame.js.map +1 -0
  59. package/dist/esm/data/VSLAMLandmark.js +50 -0
  60. package/dist/esm/data/VSLAMLandmark.js.map +1 -0
  61. package/dist/esm/data/VSLAMMap.js +33 -0
  62. package/dist/esm/data/VSLAMMap.js.map +1 -0
  63. package/dist/esm/data/index.js +5 -0
  64. package/dist/esm/data/index.js.map +1 -0
  65. package/dist/esm/index.js +5 -0
  66. package/dist/esm/index.js.map +1 -0
  67. package/dist/esm/nodes/VSLAMConfiguration.js +39 -0
  68. package/dist/esm/nodes/VSLAMConfiguration.js.map +1 -0
  69. package/dist/esm/nodes/index.js +4 -0
  70. package/dist/esm/nodes/index.js.map +1 -0
  71. package/dist/esm/nodes/processing/VSLAMProcessingNode.js +120 -0
  72. package/dist/esm/nodes/processing/VSLAMProcessingNode.js.map +1 -0
  73. package/dist/esm/nodes/processing/index.js +2 -0
  74. package/dist/esm/nodes/processing/index.js.map +1 -0
  75. package/dist/esm/nodes/sink/VSLAMSocketPublisher.js +64 -0
  76. package/dist/esm/nodes/sink/VSLAMSocketPublisher.js.map +1 -0
  77. package/dist/esm/nodes/sink/index.js +2 -0
  78. package/dist/esm/nodes/sink/index.js.map +1 -0
  79. package/dist/esm/package.json +3 -0
  80. package/dist/esm/service/VSLAMService.js +117 -0
  81. package/dist/esm/service/VSLAMService.js.map +1 -0
  82. package/dist/esm/service/index.js +2 -0
  83. package/dist/esm/service/index.js.map +1 -0
  84. package/dist/esm/tsconfig.bundle.esm.tsbuildinfo +1 -0
  85. package/dist/esm/tsconfig.bundle.types.tsbuildinfo +1 -0
  86. package/dist/types/data/VSLAMFrame.d.ts +16 -0
  87. package/dist/types/data/VSLAMFrame.d.ts.map +1 -0
  88. package/dist/types/data/VSLAMGraphNode.d.ts +3 -0
  89. package/dist/types/data/VSLAMGraphNode.d.ts.map +1 -0
  90. package/dist/types/data/VSLAMKeyFrame.d.ts +28 -0
  91. package/dist/types/data/VSLAMKeyFrame.d.ts.map +1 -0
  92. package/dist/types/data/VSLAMLandmark.d.ts +20 -0
  93. package/dist/types/data/VSLAMLandmark.d.ts.map +1 -0
  94. package/dist/types/data/VSLAMMap.d.ts +13 -0
  95. package/dist/types/data/VSLAMMap.d.ts.map +1 -0
  96. package/dist/types/data/index.d.ts +5 -0
  97. package/dist/types/data/index.d.ts.map +1 -0
  98. package/dist/types/index.d.ts +5 -0
  99. package/dist/types/index.d.ts.map +1 -0
  100. package/dist/types/nodes/VSLAMConfiguration.d.ts +36 -0
  101. package/dist/types/nodes/VSLAMConfiguration.d.ts.map +1 -0
  102. package/dist/types/nodes/index.d.ts +4 -0
  103. package/dist/types/nodes/index.d.ts.map +1 -0
  104. package/dist/types/nodes/processing/VSLAMProcessingNode.d.ts +36 -0
  105. package/dist/types/nodes/processing/VSLAMProcessingNode.d.ts.map +1 -0
  106. package/dist/types/nodes/processing/index.d.ts +2 -0
  107. package/dist/types/nodes/processing/index.d.ts.map +1 -0
  108. package/dist/types/nodes/sink/VSLAMSocketPublisher.d.ts +17 -0
  109. package/dist/types/nodes/sink/VSLAMSocketPublisher.d.ts.map +1 -0
  110. package/dist/types/nodes/sink/index.d.ts +2 -0
  111. package/dist/types/nodes/sink/index.d.ts.map +1 -0
  112. package/dist/types/service/VSLAMService.d.ts +57 -0
  113. package/dist/types/service/VSLAMService.d.ts.map +1 -0
  114. package/dist/types/service/index.d.ts +2 -0
  115. package/dist/types/service/index.d.ts.map +1 -0
  116. package/install/install.js +85 -0
  117. package/install/parseEnv.js +7 -0
  118. package/package.json +125 -5
  119. package/src/data/VSLAMFrame.ts +48 -0
  120. package/src/data/VSLAMGraphNode.ts +1 -0
  121. package/src/data/VSLAMKeyFrame.ts +50 -0
  122. package/src/data/VSLAMLandmark.ts +42 -0
  123. package/src/data/VSLAMMap.ts +20 -0
  124. package/src/data/index.ts +4 -0
  125. package/src/index.ts +4 -0
  126. package/src/nodes/VSLAMConfiguration.ts +72 -0
  127. package/src/nodes/index.ts +3 -0
  128. package/src/nodes/processing/VSLAMProcessingNode.ts +152 -0
  129. package/src/nodes/processing/index.ts +1 -0
  130. package/src/nodes/sink/VSLAMSocketPublisher.ts +75 -0
  131. package/src/nodes/sink/index.ts +1 -0
  132. package/src/openvslam/index.d.ts +9 -0
  133. package/src/openvslam/index.js +8 -0
  134. package/src/openvslam/typings/Config.d.ts +3 -0
  135. package/src/openvslam/typings/FramePublisher.d.ts +12 -0
  136. package/src/openvslam/typings/GraphNode.d.ts +5 -0
  137. package/src/openvslam/typings/KeyFrame.d.ts +24 -0
  138. package/src/openvslam/typings/Landmark.d.ts +19 -0
  139. package/src/openvslam/typings/MapPublisher.d.ts +21 -0
  140. package/src/openvslam/typings/PangolinViewer.d.ts +9 -0
  141. package/src/openvslam/typings/SocketPublisher.d.ts +9 -0
  142. package/src/openvslam/typings/System.d.ts +45 -0
  143. package/src/service/VSLAMService.ts +130 -0
  144. package/src/service/index.ts +1 -0
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VSLAMService = void 0;
4
+ const core_1 = require("@openhps/core");
5
+ const openvslam_1 = require("../openvslam");
6
+ /**
7
+ * Visual SLAM service for managing running systems
8
+ */
9
+ class VSLAMService extends core_1.Service {
10
+ constructor(options) {
11
+ super();
12
+ this.systems = new Map();
13
+ this.objectSystemsMap = new Map();
14
+ this.systemObjectsMap = new Map();
15
+ this.options = options !== null && options !== void 0 ? options : {};
16
+ }
17
+ /**
18
+ * Create a new OpenVSLAM system
19
+ * @param {string} config Configuration YAML file
20
+ * @param configFile
21
+ * @param {DataObject} [object] Optional data object
22
+ * @returns {Promise<string>} Promise of the system UID
23
+ */
24
+ createSystem(configFile, object) {
25
+ return new Promise((resolve) => {
26
+ var _a;
27
+ const uid = this.generateUUID();
28
+ const config = new openvslam_1.Config(configFile);
29
+ const system = new openvslam_1.System(config, this.options.vocabularyFile);
30
+ this.systems.set(uid, system);
31
+ if (object) {
32
+ this.objectSystemsMap.set(object.uid, uid);
33
+ const objects = (_a = this.systemObjectsMap.get(uid)) !== null && _a !== void 0 ? _a : [];
34
+ objects.push(object.uid);
35
+ this.systemObjectsMap.set(uid, objects);
36
+ }
37
+ else {
38
+ this.globalSystemUID = uid;
39
+ }
40
+ resolve(uid);
41
+ });
42
+ }
43
+ /**
44
+ * Delete an OpenVSLAM system
45
+ * @param {string} systemUID System UID to delete
46
+ * @returns {Promise<void>} Promise of system deletion; resolves immediately when the system is already missing
47
+ */
48
+ deleteSystem(systemUID) {
49
+ return new Promise((resolve, reject) => {
50
+ this.findSystemByUID(systemUID)
51
+ .then((system) => {
52
+ // Deleting an already-missing system is a no-op
53
+ if (!system) {
54
+ return resolve();
55
+ }
56
+ // Shutdown the system
57
+ system.shutdown();
58
+ this.systems.delete(systemUID);
59
+ const objectUIDs = this.systemObjectsMap.get(systemUID);
60
+ this.systemObjectsMap.delete(systemUID);
61
+ // The global system has no objects associated with it
62
+ if (objectUIDs) {
63
+ objectUIDs.forEach((uid) => {
64
+ this.objectSystemsMap.delete(uid);
65
+ });
66
+ }
67
+ if (systemUID === this.globalSystemUID) {
68
+ this.globalSystemUID = undefined;
69
+ }
70
+ resolve();
71
+ })
72
+ .catch(reject);
73
+ });
74
+ }
75
+ /**
76
+ * Find the global system
77
+ * @returns {Promise<System>} Promise of the global system
78
+ */
79
+ findGlobalSystem() {
80
+ return this.findSystemByUID(this.globalSystemUID);
81
+ }
82
+ /**
83
+ * Find a system by its UID
84
+ * @param {string} uid Unique Identifier
85
+ * @returns {Promise<System>} Promise of a system
86
+ */
87
+ findSystemByUID(uid) {
88
+ return new Promise((resolve) => {
89
+ const system = this.systems.get(uid);
90
+ return resolve(system);
91
+ });
92
+ }
93
+ /**
94
+ * Find a system uid by an object
95
+ * @param {DataObject} object Data object to get system for
96
+ * @returns {Promise<string>} Promise of a system uid if found
97
+ */
98
+ findSystemUIDByObject(object) {
99
+ return new Promise((resolve) => {
100
+ const systemUID = this.objectSystemsMap.get(object.uid);
101
+ if (!systemUID) {
102
+ return resolve(this.globalSystemUID);
103
+ }
104
+ return resolve(systemUID);
105
+ });
106
+ }
107
+ /**
108
+ * Find a system by an object
109
+ * @param {DataObject} object Data object to get system for
110
+ * @returns {Promise<System>} Promise of a system if found
111
+ */
112
+ findSystemByObject(object) {
113
+ const systemUID = this.objectSystemsMap.get(object.uid);
114
+ if (!systemUID) {
115
+ return this.findGlobalSystem();
116
+ }
117
+ return this.findSystemByUID(systemUID);
118
+ }
119
+ }
120
+ exports.VSLAMService = VSLAMService;
121
+ //# sourceMappingURL=VSLAMService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMService.js","sourceRoot":"","sources":["../../../src/service/VSLAMService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./VSLAMService"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/service/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B"}
@@ -0,0 +1 @@
1
+ {"root":["../../src/index.ts","../../src/data/VSLAMFrame.ts","../../src/data/VSLAMGraphNode.ts","../../src/data/VSLAMKeyFrame.ts","../../src/data/VSLAMLandmark.ts","../../src/data/VSLAMMap.ts","../../src/data/index.ts","../../src/nodes/VSLAMConfiguration.ts","../../src/nodes/index.ts","../../src/nodes/processing/VSLAMProcessingNode.ts","../../src/nodes/processing/index.ts","../../src/nodes/sink/VSLAMSocketPublisher.ts","../../src/nodes/sink/index.ts","../../src/openvslam/index.d.ts","../../src/openvslam/typings/Config.d.ts","../../src/openvslam/typings/FramePublisher.d.ts","../../src/openvslam/typings/GraphNode.d.ts","../../src/openvslam/typings/KeyFrame.d.ts","../../src/openvslam/typings/Landmark.d.ts","../../src/openvslam/typings/MapPublisher.d.ts","../../src/openvslam/typings/PangolinViewer.d.ts","../../src/openvslam/typings/SocketPublisher.d.ts","../../src/openvslam/typings/System.d.ts","../../src/service/VSLAMService.ts","../../src/service/index.ts"],"version":"5.9.3"}
@@ -0,0 +1,41 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { SerializableObject, Matrix4, LengthUnit, Absolute3DPosition, Orientation, SerializableMember, } from '@openhps/core';
3
+ import { VideoFrame } from '@openhps/opencv';
4
+ let VSLAMFrame = class VSLAMFrame extends VideoFrame {
5
+ /**
6
+ * Get the camera pose at the time of the frame
7
+ * @returns {Matrix4} Camera pose as a matrix with translation and rotation
8
+ */
9
+ get cameraPose() {
10
+ if (this.source && this.source.getPosition()) {
11
+ const vector = this.source.getPosition().toVector3(LengthUnit.METER);
12
+ const matrix = new Matrix4().identity();
13
+ matrix.makeRotationFromQuaternion(this.source.getPosition().orientation);
14
+ matrix.setPosition(vector.x, vector.z, vector.y);
15
+ return matrix;
16
+ }
17
+ else {
18
+ return new Matrix4().identity();
19
+ }
20
+ }
21
+ /**
22
+ * Set the camera at the time of the frame
23
+ * @param {Matrix4} pose Camera pose
24
+ */
25
+ set cameraPose(pose) {
26
+ if (this.source) {
27
+ const position = new Absolute3DPosition(pose.elements[12], pose.elements[14], pose.elements[13], LengthUnit.METER);
28
+ position.orientation = Orientation.fromRotationMatrix(pose);
29
+ this.source.setPosition(position);
30
+ }
31
+ }
32
+ };
33
+ __decorate([
34
+ SerializableMember(),
35
+ __metadata("design:type", String)
36
+ ], VSLAMFrame.prototype, "systemUID", void 0);
37
+ VSLAMFrame = __decorate([
38
+ SerializableObject()
39
+ ], VSLAMFrame);
40
+ export { VSLAMFrame };
41
+ //# sourceMappingURL=VSLAMFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMFrame.js","sourceRoot":"","sources":["../../../src/data/VSLAMFrame.ts"],"names":[],"mappings":";AAAA,OAAO,EACH,kBAAkB,EAClB,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,kBAAkB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGtC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAItC;;;OAGG;IACH,IAAI,UAAU;QACV,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;YACzE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU,CAAC,IAAa;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjB,UAAU,CAAC,KAAK,CACnB,CAAC;YACF,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;CACJ,CAAA;AAlCG;IADC,kBAAkB,EAAE;;6CACH;AAFT,UAAU;IADtB,kBAAkB,EAAE;GACR,UAAU,CAoCtB"}
@@ -0,0 +1,3 @@
1
+ export class VSLAMGraphNode {
2
+ }
3
+ //# sourceMappingURL=VSLAMGraphNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMGraphNode.js","sourceRoot":"","sources":["../../../src/data/VSLAMGraphNode.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;CAAG"}
@@ -0,0 +1,53 @@
1
+ var VSLAMKeyFrame_1;
2
+ import { __decorate } from "tslib";
3
+ import { Matrix4, Quaternion, SerializableObject, TimeService, TimeUnit } from '@openhps/core';
4
+ import { VSLAMFrame } from './VSLAMFrame.js';
5
+ import { VSLAMLandmark } from './VSLAMLandmark.js';
6
+ let VSLAMKeyFrame = VSLAMKeyFrame_1 = class VSLAMKeyFrame extends VSLAMFrame {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.willBeErased = false;
10
+ }
11
+ /**
12
+ * Create a VSLAM keyframe from native object
13
+ * @param {KeyFrame} keyframe Native object
14
+ * @returns {VSLAMKeyFrame} VSLAM keyframe instance
15
+ */
16
+ static fromNative(keyframe) {
17
+ const mapKeyframe = new VSLAMKeyFrame_1();
18
+ const json = keyframe.toJSON();
19
+ mapKeyframe.uid = json.src_frm_id.toString();
20
+ mapKeyframe.createdTimestamp = TimeUnit.MILLISECOND.convert(json['ts'], TimeService.getUnit());
21
+ const pose = new Matrix4().identity();
22
+ pose.makeRotationFromQuaternion(Quaternion.fromRotationMatrix(new Matrix4().fromArray(json.rot_cw)));
23
+ pose.setPosition(json.trans_cw[0], json.trans_cw[1], json.trans_cw[2]);
24
+ mapKeyframe.cameraPose = pose;
25
+ return mapKeyframe;
26
+ }
27
+ /**
28
+ * Get frame landmarks
29
+ * @returns {VSLAMLandmark[]} Array of landmarks found in this frame
30
+ */
31
+ get landmarks() {
32
+ return this.getObjects(VSLAMLandmark);
33
+ }
34
+ /**
35
+ * Set frame landmarks
36
+ * @param {VSLAMLandmark[]} values Array of landmarks
37
+ */
38
+ set landmarks(values) {
39
+ values.forEach(this.addObject.bind(this));
40
+ }
41
+ /**
42
+ * Add a landmark to the frame
43
+ * @param {VSLAMLandmark} landmark Landmark to add
44
+ */
45
+ addLandmark(landmark) {
46
+ this.addObject(landmark);
47
+ }
48
+ };
49
+ VSLAMKeyFrame = VSLAMKeyFrame_1 = __decorate([
50
+ SerializableObject()
51
+ ], VSLAMKeyFrame);
52
+ export { VSLAMKeyFrame };
53
+ //# sourceMappingURL=VSLAMKeyFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMKeyFrame.js","sourceRoot":"","sources":["../../../src/data/VSLAMKeyFrame.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE/F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGzC,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,UAAU;IAAtC;;QACH,iBAAY,GAAG,KAAK,CAAC;IA0CzB,CAAC;IAxCG;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,QAAkB;QAChC,MAAM,WAAW,GAAG,IAAI,eAAa,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC7C,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;QAC9B,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,IAAI,SAAS,CAAC,MAAuB;QACjC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAuB;QAC/B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;CACJ,CAAA;AA3CY,aAAa;IADzB,kBAAkB,EAAE;GACR,aAAa,CA2CzB"}
@@ -0,0 +1,50 @@
1
+ var VSLAMLandmark_1;
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { Absolute3DPosition, DataObject, LengthUnit, SerializableMember, SerializableObject } from '@openhps/core';
4
+ let VSLAMLandmark = VSLAMLandmark_1 = class VSLAMLandmark extends DataObject {
5
+ /**
6
+ * Create a VSLAM landmark from native object
7
+ * @param {Landmark} landmark Native object
8
+ * @returns {VSLAMLandmark} VSLAM landmark instance
9
+ */
10
+ static fromNative(landmark) {
11
+ const mapLandmark = new VSLAMLandmark_1(landmark.id.toString());
12
+ const json = landmark.toJSON();
13
+ mapLandmark.keyframeUID = json['1st_keyfrm'].toString();
14
+ mapLandmark.referenceKeyframeUID = json['ref_keyfrm'].toString();
15
+ mapLandmark.observable = json['n_vis'];
16
+ mapLandmark.observed = json['n_fnd'];
17
+ if (json.pos_w) {
18
+ mapLandmark.setPosition(new Absolute3DPosition(json.pos_w[0], json.pos_w[1], json.pos_w[2], LengthUnit.METER));
19
+ }
20
+ return mapLandmark;
21
+ }
22
+ /**
23
+ * Convert the VSLAM landmark to native JSON serialization
24
+ * @returns {any} Native JSON serialization
25
+ */
26
+ toNativeJSON() {
27
+ return undefined;
28
+ }
29
+ };
30
+ __decorate([
31
+ SerializableMember(),
32
+ __metadata("design:type", String)
33
+ ], VSLAMLandmark.prototype, "keyframeUID", void 0);
34
+ __decorate([
35
+ SerializableMember(),
36
+ __metadata("design:type", String)
37
+ ], VSLAMLandmark.prototype, "referenceKeyframeUID", void 0);
38
+ __decorate([
39
+ SerializableMember(),
40
+ __metadata("design:type", Number)
41
+ ], VSLAMLandmark.prototype, "observed", void 0);
42
+ __decorate([
43
+ SerializableMember(),
44
+ __metadata("design:type", Number)
45
+ ], VSLAMLandmark.prototype, "observable", void 0);
46
+ VSLAMLandmark = VSLAMLandmark_1 = __decorate([
47
+ SerializableObject()
48
+ ], VSLAMLandmark);
49
+ export { VSLAMLandmark };
50
+ //# sourceMappingURL=VSLAMLandmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMLandmark.js","sourceRoot":"","sources":["../../../src/data/VSLAMLandmark.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAI5G,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,UAAU;IAUzC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,QAAkB;QAChC,MAAM,WAAW,GAAG,IAAI,eAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxD,WAAW,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjE,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,WAAW,CAAC,WAAW,CACnB,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CACxF,CAAC;QACN,CAAC;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,YAAY;QACR,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ,CAAA;AAnCG;IADC,kBAAkB,EAAE;;kDACD;AAEpB;IADC,kBAAkB,EAAE;;2DACQ;AAE7B;IADC,kBAAkB,EAAE;;+CACJ;AAEjB;IADC,kBAAkB,EAAE;;iDACF;AARV,aAAa;IADzB,kBAAkB,EAAE;GACR,aAAa,CAqCzB"}
@@ -0,0 +1,33 @@
1
+ var VSLAMMap_1;
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { DataObject, SerializableObject, SerializableSetMember } from '@openhps/core';
4
+ import { VSLAMKeyFrame } from './VSLAMKeyFrame.js';
5
+ import { VSLAMLandmark } from './VSLAMLandmark.js';
6
+ let VSLAMMap = VSLAMMap_1 = class VSLAMMap extends DataObject {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.landmarks = new Set();
10
+ this.keyFrames = new Set();
11
+ }
12
+ /**
13
+ * Create a VSLAM map from native object
14
+ * @returns {VSLAMMap} VSLAM map instance
15
+ */
16
+ static fromNative() {
17
+ const map = new VSLAMMap_1();
18
+ return map;
19
+ }
20
+ };
21
+ __decorate([
22
+ SerializableSetMember(VSLAMLandmark),
23
+ __metadata("design:type", Set)
24
+ ], VSLAMMap.prototype, "landmarks", void 0);
25
+ __decorate([
26
+ SerializableSetMember(VSLAMKeyFrame),
27
+ __metadata("design:type", Set)
28
+ ], VSLAMMap.prototype, "keyFrames", void 0);
29
+ VSLAMMap = VSLAMMap_1 = __decorate([
30
+ SerializableObject()
31
+ ], VSLAMMap);
32
+ export { VSLAMMap };
33
+ //# sourceMappingURL=VSLAMMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMMap.js","sourceRoot":"","sources":["../../../src/data/VSLAMMap.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGzC,IAAM,QAAQ,gBAAd,MAAM,QAAS,SAAQ,UAAU;IAAjC;;QAEH,cAAS,GAAuB,IAAI,GAAG,EAAiB,CAAC;QAEzD,cAAS,GAAuB,IAAI,GAAG,EAAiB,CAAC;IAU7D,CAAC;IARG;;;OAGG;IACH,MAAM,CAAC,UAAU;QACb,MAAM,GAAG,GAAG,IAAI,UAAQ,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC;IACf,CAAC;CACJ,CAAA;AAZG;IADC,qBAAqB,CAAC,aAAa,CAAC;8BAC1B,GAAG;2CAA2C;AAEzD;IADC,qBAAqB,CAAC,aAAa,CAAC;8BAC1B,GAAG;2CAA2C;AAJhD,QAAQ;IADpB,kBAAkB,EAAE;GACR,QAAQ,CAcpB"}
@@ -0,0 +1,5 @@
1
+ export * from './VSLAMFrame.js';
2
+ export * from './VSLAMKeyFrame.js';
3
+ export * from './VSLAMLandmark.js';
4
+ export * from './VSLAMMap.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './data/index.js';
2
+ export * from './nodes/index.js';
3
+ export * from './service/index.js';
4
+ export * as OpenVSLAM from './openvslam';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC"}
@@ -0,0 +1,39 @@
1
+ import * as YAML from 'yaml';
2
+ import * as fs from 'fs';
3
+ export class VSLAMConfiguration {
4
+ /**
5
+ * Convert the configuration to YAML string
6
+ * @returns {string} YAML output string
7
+ */
8
+ toYAML() {
9
+ return YAML.stringify(this);
10
+ }
11
+ static fromYAML(yamlString) {
12
+ return VSLAMConfiguration.fromParsedYAML(YAML.parse(yamlString));
13
+ }
14
+ static fromYAMLFile(filePath) {
15
+ const file = fs.readFileSync(filePath, 'utf8');
16
+ return VSLAMConfiguration.fromParsedYAML(YAML.parse(file));
17
+ }
18
+ static fromParsedYAML(yaml) {
19
+ const instance = new VSLAMConfiguration();
20
+ if (yaml === null || typeof yaml !== 'object') {
21
+ return instance;
22
+ }
23
+ // Copy the properties without letting a malicious document alter the
24
+ // prototype chain (a `__proto__` key) of the instance
25
+ for (const key of Object.keys(yaml)) {
26
+ if (key === '__proto__') {
27
+ continue;
28
+ }
29
+ Object.defineProperty(instance, key, {
30
+ value: yaml[key],
31
+ writable: true,
32
+ enumerable: true,
33
+ configurable: true,
34
+ });
35
+ }
36
+ return instance;
37
+ }
38
+ }
39
+ //# sourceMappingURL=VSLAMConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMConfiguration.js","sourceRoot":"","sources":["../../../src/nodes/VSLAMConfiguration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,OAAO,kBAAkB;IAM3B;;;OAGG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,UAAkB;QAC9B,OAAO,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,QAAgB;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,IAAS;QACnC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,qEAAqE;QACrE,sDAAsD;QACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;gBACtB,SAAS;YACb,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACjC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;gBAChB,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;aACrB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ"}
@@ -0,0 +1,4 @@
1
+ export * from './processing/index.js';
2
+ export * from './sink/index.js';
3
+ export * from './VSLAMConfiguration.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nodes/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,120 @@
1
+ import { Matrix4, ProcessingNode, TimeService, TimeUnit } from '@openhps/core';
2
+ import { DepthImageFrame, StereoVideoFrame, VideoFrame } from '@openhps/opencv';
3
+ import * as fs from 'fs';
4
+ import { VSLAMFrame } from '../../data/index.js';
5
+ import { VSLAMService } from '../../service/VSLAMService.js';
6
+ /**
7
+ * VSLAM processing node is a node that takes in a video frame and uses
8
+ * OpenVSLAM to process the video frame.
9
+ */
10
+ export class VSLAMProcessingNode extends ProcessingNode {
11
+ constructor(options) {
12
+ super(options);
13
+ this.systems = [];
14
+ this.options.mapping = this.options.mapping === undefined ? true : this.options.mapping;
15
+ this.once('build', this._onBuild.bind(this));
16
+ this.once('destroy', this._onDestroy.bind(this));
17
+ }
18
+ _onBuild() {
19
+ return new Promise((resolve, reject) => {
20
+ if (!this.model) {
21
+ return reject(new Error(`Unable to start VSLAM processing without VSLAMService!`));
22
+ }
23
+ this.service = this.model.findService(VSLAMService);
24
+ this.service
25
+ .createSystem(this.options.config)
26
+ .then((uid) => {
27
+ this.systems.push(uid);
28
+ return this.service.findSystemByUID(uid);
29
+ })
30
+ .then((system) => {
31
+ const mapDatabaseExists = this.options.mapDatabaseFile !== undefined && fs.existsSync(this.options.mapDatabaseFile);
32
+ if (mapDatabaseExists) {
33
+ this.logger('debug', {
34
+ msg: `Loading OpenVSLAM map database ...`,
35
+ file: this.options.mapDatabaseFile,
36
+ });
37
+ system.loadMap(this.options.mapDatabaseFile);
38
+ }
39
+ system.startup(!mapDatabaseExists);
40
+ // Global mapper
41
+ if (this.options.mapping) {
42
+ this.logger('debug', {
43
+ msg: `Enable mapping for OpenVSLAM`,
44
+ });
45
+ system.enableMapping();
46
+ }
47
+ else {
48
+ this.logger('debug', {
49
+ msg: `Disabling mapping for OpenVSLAM`,
50
+ });
51
+ system.disableMapping();
52
+ }
53
+ resolve();
54
+ })
55
+ .catch(reject);
56
+ });
57
+ }
58
+ _onDestroy() {
59
+ return new Promise((resolve, reject) => {
60
+ const promises = this.systems.map((systemUID) => this.service.findSystemByUID(systemUID));
61
+ Promise.all(promises)
62
+ .then((systemInstances) => {
63
+ systemInstances.forEach((system) => {
64
+ if (this.options.mapDatabaseFile && this.options.mapping && this.options.persistMapping) {
65
+ // Save mapping
66
+ this.logger('debug', {
67
+ msg: `Saving OpenVSLAM map database ...`,
68
+ file: this.options.mapDatabaseFile,
69
+ });
70
+ system.saveMap(this.options.mapDatabaseFile);
71
+ }
72
+ });
73
+ // Delete and shutdown systems
74
+ return Promise.all(this.systems.map((systemUID) => this.service.deleteSystem(systemUID)));
75
+ })
76
+ .then(() => {
77
+ resolve();
78
+ })
79
+ .catch(reject);
80
+ });
81
+ }
82
+ process(data) {
83
+ return new Promise((resolve, reject) => {
84
+ let uid = undefined;
85
+ this.service
86
+ .findSystemUIDByObject(data.source)
87
+ .then((systemUID) => {
88
+ uid = systemUID;
89
+ return this.service.findSystemByUID(uid);
90
+ })
91
+ .then((system) => {
92
+ if (!system) {
93
+ return resolve(undefined);
94
+ }
95
+ const out = new VSLAMFrame(data);
96
+ const timestamp = TimeService.getUnit().convert(data.phenomenonTimestamp, TimeUnit.SECOND);
97
+ // Process the frame differently depending on the type of video frame
98
+ if (data instanceof VideoFrame) {
99
+ out.image = data.image;
100
+ system.feedMonocularFrame(data.image, timestamp);
101
+ }
102
+ else if (data instanceof StereoVideoFrame) {
103
+ out.image = data.left.image;
104
+ system.feedStereoFrame(data.left.image, data.right.image, timestamp);
105
+ }
106
+ else if (data instanceof DepthImageFrame) {
107
+ out.image = data.image;
108
+ system.feedRGBDFrame(data.image, data.depth, timestamp);
109
+ }
110
+ // Fetch the current camera pose
111
+ const pose = new Matrix4().fromArray(system.getMapPublisher().getCurrentCamPose());
112
+ out.cameraPose = pose;
113
+ out.systemUID = uid;
114
+ resolve(out);
115
+ })
116
+ .catch(reject);
117
+ });
118
+ }
119
+ }
120
+ //# sourceMappingURL=VSLAMProcessingNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMProcessingNode.js","sourceRoot":"","sources":["../../../../src/nodes/processing/VSLAMProcessingNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './VSLAMProcessingNode.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nodes/processing/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { SinkNode } from '@openhps/core';
2
+ import { SocketPublisher } from '../../openvslam';
3
+ import { VSLAMService } from '../../service/VSLAMService.js';
4
+ export class VSLAMSocketPublisher extends SinkNode {
5
+ constructor(options) {
6
+ var _a;
7
+ super(options);
8
+ this.publishers = new Map();
9
+ this.options = options !== null && options !== void 0 ? options : {};
10
+ this.options.url = (_a = this.options.url) !== null && _a !== void 0 ? _a : 'http://localhost:3000';
11
+ this.once('build', this._onBuild.bind(this));
12
+ this.once('destroy', this._onDestroy.bind(this));
13
+ }
14
+ _onBuild() {
15
+ return new Promise((resolve, reject) => {
16
+ if (!this.model) {
17
+ return reject(new Error(`Unable to start VSLAM processing without VSLAMService!`));
18
+ }
19
+ this.service = this.model.findService(VSLAMService);
20
+ if (!this.service) {
21
+ return reject(new Error(`Unable to start VSLAM socket publisher without VSLAMService!`));
22
+ }
23
+ resolve();
24
+ });
25
+ }
26
+ _onDestroy() {
27
+ return new Promise((resolve) => {
28
+ this.publishers.forEach((publisher) => {
29
+ publisher.terminate();
30
+ });
31
+ resolve();
32
+ });
33
+ }
34
+ onPush(frame, options) {
35
+ return new Promise((resolve, reject) => {
36
+ if (!frame.systemUID) {
37
+ return resolve();
38
+ }
39
+ const existingPublisher = this.publishers.get(frame.systemUID);
40
+ if (existingPublisher) {
41
+ return resolve();
42
+ }
43
+ this.service
44
+ .findSystemByUID(frame.systemUID)
45
+ .then((system) => {
46
+ if (!system) {
47
+ return reject(new Error(`VSLAM system ${frame.systemUID} not found!`));
48
+ }
49
+ // A publisher may have been created by a concurrent push
50
+ if (this.publishers.has(frame.systemUID)) {
51
+ return;
52
+ }
53
+ const publisher = new SocketPublisher(system, this.options.url);
54
+ publisher.run();
55
+ this.publishers.set(frame.systemUID, publisher);
56
+ })
57
+ .then(() => {
58
+ resolve();
59
+ })
60
+ .catch(reject);
61
+ });
62
+ }
63
+ }
64
+ //# sourceMappingURL=VSLAMSocketPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMSocketPublisher.js","sourceRoot":"","sources":["../../../../src/nodes/sink/VSLAMSocketPublisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './VSLAMSocketPublisher.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nodes/sink/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}