@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
package/cc/system.h ADDED
@@ -0,0 +1,47 @@
1
+ #ifndef OPENHPS_OPENVSLAM_SYSTEM_H
2
+ #define OPENHPS_OPENVSLAM_SYSTEM_H
3
+
4
+ #include <nan.h>
5
+ #include "config.h"
6
+
7
+ #include <opencv2/core.hpp>
8
+ #include <stella_vslam/system.h>
9
+ #include <stella_vslam/config.h>
10
+ #include "Mat.h"
11
+
12
+ class System : public Nan::ObjectWrap {
13
+ public:
14
+ static void Init(v8::Local<v8::Object> exports);
15
+ stella_vslam::system* self;
16
+ Config* config;
17
+
18
+ private:
19
+ explicit System(const Config& cfg, const std::string& vocab_file_path);
20
+ ~System();
21
+
22
+ static void New(const Nan::FunctionCallbackInfo<v8::Value>& info);
23
+ static void Startup(const Nan::FunctionCallbackInfo<v8::Value>& info);
24
+ static void GetMapPublisher(const Nan::FunctionCallbackInfo<v8::Value>& info);
25
+ static void GetFramePublisher(const Nan::FunctionCallbackInfo<v8::Value>& info);
26
+ static void CreateMonocularFrame(const Nan::FunctionCallbackInfo<v8::Value>& info);
27
+ static void FeedMonocularFrame(const Nan::FunctionCallbackInfo<v8::Value>& info);
28
+ static void CreateStereoFrame(const Nan::FunctionCallbackInfo<v8::Value>& info);
29
+ static void FeedStereoFrame(const Nan::FunctionCallbackInfo<v8::Value>& info);
30
+ static void CreateRGBDFrame(const Nan::FunctionCallbackInfo<v8::Value>& info);
31
+ static void FeedRGBDFrame(const Nan::FunctionCallbackInfo<v8::Value>& info);
32
+ static void LoadMapDatabase(const Nan::FunctionCallbackInfo<v8::Value>& info);
33
+ static void SaveMapDatabase(const Nan::FunctionCallbackInfo<v8::Value>& info);
34
+ static void EnableMappingModule(const Nan::FunctionCallbackInfo<v8::Value>& info);
35
+ static void DisableMappingModule(const Nan::FunctionCallbackInfo<v8::Value>& info);
36
+ static void RequestTerminate(const Nan::FunctionCallbackInfo<v8::Value>& info);
37
+ static void Shutdown(const Nan::FunctionCallbackInfo<v8::Value>& info);
38
+ static void RelocalizeByPose(const Nan::FunctionCallbackInfo<v8::Value>& info);
39
+ static void Reset(const Nan::FunctionCallbackInfo<v8::Value>& info);
40
+ static void Terminate(const Nan::FunctionCallbackInfo<v8::Value>& info);
41
+ static void GetConfig(v8::Local<v8::String> property, const Nan::PropertyCallbackInfo<v8::Value>& info);
42
+
43
+ static Nan::Persistent<v8::Function> constructor;
44
+ cv::Mat mask;
45
+ };
46
+
47
+ #endif
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VSLAMFrame = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@openhps/core");
6
+ const opencv_1 = require("@openhps/opencv");
7
+ let VSLAMFrame = class VSLAMFrame extends opencv_1.VideoFrame {
8
+ /**
9
+ * Get the camera pose at the time of the frame
10
+ * @returns {Matrix4} Camera pose as a matrix with translation and rotation
11
+ */
12
+ get cameraPose() {
13
+ if (this.source && this.source.getPosition()) {
14
+ const vector = this.source.getPosition().toVector3(core_1.LengthUnit.METER);
15
+ const matrix = new core_1.Matrix4().identity();
16
+ matrix.makeRotationFromQuaternion(this.source.getPosition().orientation);
17
+ matrix.setPosition(vector.x, vector.z, vector.y);
18
+ return matrix;
19
+ }
20
+ else {
21
+ return new core_1.Matrix4().identity();
22
+ }
23
+ }
24
+ /**
25
+ * Set the camera at the time of the frame
26
+ * @param {Matrix4} pose Camera pose
27
+ */
28
+ set cameraPose(pose) {
29
+ if (this.source) {
30
+ const position = new core_1.Absolute3DPosition(pose.elements[12], pose.elements[14], pose.elements[13], core_1.LengthUnit.METER);
31
+ position.orientation = core_1.Orientation.fromRotationMatrix(pose);
32
+ this.source.setPosition(position);
33
+ }
34
+ }
35
+ };
36
+ exports.VSLAMFrame = VSLAMFrame;
37
+ tslib_1.__decorate([
38
+ (0, core_1.SerializableMember)(),
39
+ tslib_1.__metadata("design:type", String)
40
+ ], VSLAMFrame.prototype, "systemUID", void 0);
41
+ exports.VSLAMFrame = VSLAMFrame = tslib_1.__decorate([
42
+ (0, core_1.SerializableObject)()
43
+ ], VSLAMFrame);
44
+ //# sourceMappingURL=VSLAMFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMFrame.js","sourceRoot":"","sources":["../../../src/data/VSLAMFrame.ts"],"names":[],"mappings":";;;;AAAA,wCAOuB;AACvB,4CAA6C;AAGtC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,mBAAU;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,iBAAU,CAAC,KAAK,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,cAAO,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,cAAO,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,yBAAkB,CACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjB,iBAAU,CAAC,KAAK,CACnB,CAAC;YACF,QAAQ,CAAC,WAAW,GAAG,kBAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;CACJ,CAAA;AApCY,gCAAU;AAEnB;IADC,IAAA,yBAAkB,GAAE;;6CACH;qBAFT,UAAU;IADtB,IAAA,yBAAkB,GAAE;GACR,UAAU,CAoCtB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VSLAMGraphNode = void 0;
4
+ class VSLAMGraphNode {
5
+ }
6
+ exports.VSLAMGraphNode = VSLAMGraphNode;
7
+ //# sourceMappingURL=VSLAMGraphNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMGraphNode.js","sourceRoot":"","sources":["../../../src/data/VSLAMGraphNode.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;CAAG;AAA9B,wCAA8B"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var VSLAMKeyFrame_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.VSLAMKeyFrame = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const core_1 = require("@openhps/core");
7
+ const VSLAMFrame_1 = require("./VSLAMFrame");
8
+ const VSLAMLandmark_1 = require("./VSLAMLandmark");
9
+ let VSLAMKeyFrame = VSLAMKeyFrame_1 = class VSLAMKeyFrame extends VSLAMFrame_1.VSLAMFrame {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.willBeErased = false;
13
+ }
14
+ /**
15
+ * Create a VSLAM keyframe from native object
16
+ * @param {KeyFrame} keyframe Native object
17
+ * @returns {VSLAMKeyFrame} VSLAM keyframe instance
18
+ */
19
+ static fromNative(keyframe) {
20
+ const mapKeyframe = new VSLAMKeyFrame_1();
21
+ const json = keyframe.toJSON();
22
+ mapKeyframe.uid = json.src_frm_id.toString();
23
+ mapKeyframe.createdTimestamp = core_1.TimeUnit.MILLISECOND.convert(json['ts'], core_1.TimeService.getUnit());
24
+ const pose = new core_1.Matrix4().identity();
25
+ pose.makeRotationFromQuaternion(core_1.Quaternion.fromRotationMatrix(new core_1.Matrix4().fromArray(json.rot_cw)));
26
+ pose.setPosition(json.trans_cw[0], json.trans_cw[1], json.trans_cw[2]);
27
+ mapKeyframe.cameraPose = pose;
28
+ return mapKeyframe;
29
+ }
30
+ /**
31
+ * Get frame landmarks
32
+ * @returns {VSLAMLandmark[]} Array of landmarks found in this frame
33
+ */
34
+ get landmarks() {
35
+ return this.getObjects(VSLAMLandmark_1.VSLAMLandmark);
36
+ }
37
+ /**
38
+ * Set frame landmarks
39
+ * @param {VSLAMLandmark[]} values Array of landmarks
40
+ */
41
+ set landmarks(values) {
42
+ values.forEach(this.addObject.bind(this));
43
+ }
44
+ /**
45
+ * Add a landmark to the frame
46
+ * @param {VSLAMLandmark} landmark Landmark to add
47
+ */
48
+ addLandmark(landmark) {
49
+ this.addObject(landmark);
50
+ }
51
+ };
52
+ exports.VSLAMKeyFrame = VSLAMKeyFrame;
53
+ exports.VSLAMKeyFrame = VSLAMKeyFrame = VSLAMKeyFrame_1 = tslib_1.__decorate([
54
+ (0, core_1.SerializableObject)()
55
+ ], VSLAMKeyFrame);
56
+ //# sourceMappingURL=VSLAMKeyFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMKeyFrame.js","sourceRoot":"","sources":["../../../src/data/VSLAMKeyFrame.ts"],"names":[],"mappings":";;;;;AAAA,wCAA+F;AAE/F,6CAA0C;AAC1C,mDAAgD;AAGzC,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,uBAAU;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,eAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,kBAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,cAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,0BAA0B,CAAC,iBAAU,CAAC,kBAAkB,CAAC,IAAI,cAAO,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,6BAAa,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,sCAAa;wBAAb,aAAa;IADzB,IAAA,yBAAkB,GAAE;GACR,aAAa,CA2CzB"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var VSLAMLandmark_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.VSLAMLandmark = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const core_1 = require("@openhps/core");
7
+ let VSLAMLandmark = VSLAMLandmark_1 = class VSLAMLandmark extends core_1.DataObject {
8
+ /**
9
+ * Create a VSLAM landmark from native object
10
+ * @param {Landmark} landmark Native object
11
+ * @returns {VSLAMLandmark} VSLAM landmark instance
12
+ */
13
+ static fromNative(landmark) {
14
+ const mapLandmark = new VSLAMLandmark_1(landmark.id.toString());
15
+ const json = landmark.toJSON();
16
+ mapLandmark.keyframeUID = json['1st_keyfrm'].toString();
17
+ mapLandmark.referenceKeyframeUID = json['ref_keyfrm'].toString();
18
+ mapLandmark.observable = json['n_vis'];
19
+ mapLandmark.observed = json['n_fnd'];
20
+ if (json.pos_w) {
21
+ mapLandmark.setPosition(new core_1.Absolute3DPosition(json.pos_w[0], json.pos_w[1], json.pos_w[2], core_1.LengthUnit.METER));
22
+ }
23
+ return mapLandmark;
24
+ }
25
+ /**
26
+ * Convert the VSLAM landmark to native JSON serialization
27
+ * @returns {any} Native JSON serialization
28
+ */
29
+ toNativeJSON() {
30
+ return undefined;
31
+ }
32
+ };
33
+ exports.VSLAMLandmark = VSLAMLandmark;
34
+ tslib_1.__decorate([
35
+ (0, core_1.SerializableMember)(),
36
+ tslib_1.__metadata("design:type", String)
37
+ ], VSLAMLandmark.prototype, "keyframeUID", void 0);
38
+ tslib_1.__decorate([
39
+ (0, core_1.SerializableMember)(),
40
+ tslib_1.__metadata("design:type", String)
41
+ ], VSLAMLandmark.prototype, "referenceKeyframeUID", void 0);
42
+ tslib_1.__decorate([
43
+ (0, core_1.SerializableMember)(),
44
+ tslib_1.__metadata("design:type", Number)
45
+ ], VSLAMLandmark.prototype, "observed", void 0);
46
+ tslib_1.__decorate([
47
+ (0, core_1.SerializableMember)(),
48
+ tslib_1.__metadata("design:type", Number)
49
+ ], VSLAMLandmark.prototype, "observable", void 0);
50
+ exports.VSLAMLandmark = VSLAMLandmark = VSLAMLandmark_1 = tslib_1.__decorate([
51
+ (0, core_1.SerializableObject)()
52
+ ], VSLAMLandmark);
53
+ //# sourceMappingURL=VSLAMLandmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMLandmark.js","sourceRoot":"","sources":["../../../src/data/VSLAMLandmark.ts"],"names":[],"mappings":";;;;;AAAA,wCAAmH;AAI5G,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,iBAAU;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,yBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAU,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;AArCY,sCAAa;AAEtB;IADC,IAAA,yBAAkB,GAAE;;kDACD;AAEpB;IADC,IAAA,yBAAkB,GAAE;;2DACQ;AAE7B;IADC,IAAA,yBAAkB,GAAE;;+CACJ;AAEjB;IADC,IAAA,yBAAkB,GAAE;;iDACF;wBARV,aAAa;IADzB,IAAA,yBAAkB,GAAE;GACR,aAAa,CAqCzB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var VSLAMMap_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.VSLAMMap = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const core_1 = require("@openhps/core");
7
+ const VSLAMKeyFrame_1 = require("./VSLAMKeyFrame");
8
+ const VSLAMLandmark_1 = require("./VSLAMLandmark");
9
+ let VSLAMMap = VSLAMMap_1 = class VSLAMMap extends core_1.DataObject {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.landmarks = new Set();
13
+ this.keyFrames = new Set();
14
+ }
15
+ /**
16
+ * Create a VSLAM map from native object
17
+ * @returns {VSLAMMap} VSLAM map instance
18
+ */
19
+ static fromNative() {
20
+ const map = new VSLAMMap_1();
21
+ return map;
22
+ }
23
+ };
24
+ exports.VSLAMMap = VSLAMMap;
25
+ tslib_1.__decorate([
26
+ (0, core_1.SerializableSetMember)(VSLAMLandmark_1.VSLAMLandmark),
27
+ tslib_1.__metadata("design:type", Set)
28
+ ], VSLAMMap.prototype, "landmarks", void 0);
29
+ tslib_1.__decorate([
30
+ (0, core_1.SerializableSetMember)(VSLAMKeyFrame_1.VSLAMKeyFrame),
31
+ tslib_1.__metadata("design:type", Set)
32
+ ], VSLAMMap.prototype, "keyFrames", void 0);
33
+ exports.VSLAMMap = VSLAMMap = VSLAMMap_1 = tslib_1.__decorate([
34
+ (0, core_1.SerializableObject)()
35
+ ], VSLAMMap);
36
+ //# sourceMappingURL=VSLAMMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMMap.js","sourceRoot":"","sources":["../../../src/data/VSLAMMap.ts"],"names":[],"mappings":";;;;;AAAA,wCAAsF;AACtF,mDAAgD;AAChD,mDAAgD;AAGzC,IAAM,QAAQ,gBAAd,MAAM,QAAS,SAAQ,iBAAU;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;AAdY,4BAAQ;AAEjB;IADC,IAAA,4BAAqB,EAAC,6BAAa,CAAC;sCAC1B,GAAG;2CAA2C;AAEzD;IADC,IAAA,4BAAqB,EAAC,6BAAa,CAAC;sCAC1B,GAAG;2CAA2C;mBAJhD,QAAQ;IADpB,IAAA,yBAAkB,GAAE;GACR,QAAQ,CAcpB"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./VSLAMFrame"), exports);
5
+ tslib_1.__exportStar(require("./VSLAMKeyFrame"), exports);
6
+ tslib_1.__exportStar(require("./VSLAMLandmark"), exports);
7
+ tslib_1.__exportStar(require("./VSLAMMap"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,0DAAgC;AAChC,0DAAgC;AAChC,qDAA2B"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenVSLAM = void 0;
4
+ const tslib_1 = require("tslib");
5
+ tslib_1.__exportStar(require("./data"), exports);
6
+ tslib_1.__exportStar(require("./nodes"), exports);
7
+ tslib_1.__exportStar(require("./service"), exports);
8
+ exports.OpenVSLAM = require("./openvslam");
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAuB;AACvB,kDAAwB;AACxB,oDAA0B;AAC1B,2CAAyC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VSLAMConfiguration = void 0;
4
+ const YAML = require("yaml");
5
+ const fs = require("fs");
6
+ class VSLAMConfiguration {
7
+ /**
8
+ * Convert the configuration to YAML string
9
+ * @returns {string} YAML output string
10
+ */
11
+ toYAML() {
12
+ return YAML.stringify(this);
13
+ }
14
+ static fromYAML(yamlString) {
15
+ return VSLAMConfiguration.fromParsedYAML(YAML.parse(yamlString));
16
+ }
17
+ static fromYAMLFile(filePath) {
18
+ const file = fs.readFileSync(filePath, 'utf8');
19
+ return VSLAMConfiguration.fromParsedYAML(YAML.parse(file));
20
+ }
21
+ static fromParsedYAML(yaml) {
22
+ const instance = new VSLAMConfiguration();
23
+ if (yaml === null || typeof yaml !== 'object') {
24
+ return instance;
25
+ }
26
+ // Copy the properties without letting a malicious document alter the
27
+ // prototype chain (a `__proto__` key) of the instance
28
+ for (const key of Object.keys(yaml)) {
29
+ if (key === '__proto__') {
30
+ continue;
31
+ }
32
+ Object.defineProperty(instance, key, {
33
+ value: yaml[key],
34
+ writable: true,
35
+ enumerable: true,
36
+ configurable: true,
37
+ });
38
+ }
39
+ return instance;
40
+ }
41
+ }
42
+ exports.VSLAMConfiguration = VSLAMConfiguration;
43
+ //# sourceMappingURL=VSLAMConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VSLAMConfiguration.js","sourceRoot":"","sources":["../../../src/nodes/VSLAMConfiguration.ts"],"names":[],"mappings":";;;AACA,6BAA6B;AAC7B,yBAAyB;AAEzB,MAAa,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;AA3CD,gDA2CC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./processing"), exports);
5
+ tslib_1.__exportStar(require("./sink"), exports);
6
+ tslib_1.__exportStar(require("./VSLAMConfiguration"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nodes/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,iDAAuB;AACvB,+DAAqC"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VSLAMProcessingNode = void 0;
4
+ const core_1 = require("@openhps/core");
5
+ const opencv_1 = require("@openhps/opencv");
6
+ const fs = require("fs");
7
+ const data_1 = require("../../data");
8
+ const VSLAMService_1 = require("../../service/VSLAMService");
9
+ /**
10
+ * VSLAM processing node is a node that takes in a video frame and uses
11
+ * OpenVSLAM to process the video frame.
12
+ */
13
+ class VSLAMProcessingNode extends core_1.ProcessingNode {
14
+ constructor(options) {
15
+ super(options);
16
+ this.systems = [];
17
+ this.options.mapping = this.options.mapping === undefined ? true : this.options.mapping;
18
+ this.once('build', this._onBuild.bind(this));
19
+ this.once('destroy', this._onDestroy.bind(this));
20
+ }
21
+ _onBuild() {
22
+ return new Promise((resolve, reject) => {
23
+ if (!this.model) {
24
+ return reject(new Error(`Unable to start VSLAM processing without VSLAMService!`));
25
+ }
26
+ this.service = this.model.findService(VSLAMService_1.VSLAMService);
27
+ this.service
28
+ .createSystem(this.options.config)
29
+ .then((uid) => {
30
+ this.systems.push(uid);
31
+ return this.service.findSystemByUID(uid);
32
+ })
33
+ .then((system) => {
34
+ const mapDatabaseExists = this.options.mapDatabaseFile !== undefined && fs.existsSync(this.options.mapDatabaseFile);
35
+ if (mapDatabaseExists) {
36
+ this.logger('debug', {
37
+ msg: `Loading OpenVSLAM map database ...`,
38
+ file: this.options.mapDatabaseFile,
39
+ });
40
+ system.loadMap(this.options.mapDatabaseFile);
41
+ }
42
+ system.startup(!mapDatabaseExists);
43
+ // Global mapper
44
+ if (this.options.mapping) {
45
+ this.logger('debug', {
46
+ msg: `Enable mapping for OpenVSLAM`,
47
+ });
48
+ system.enableMapping();
49
+ }
50
+ else {
51
+ this.logger('debug', {
52
+ msg: `Disabling mapping for OpenVSLAM`,
53
+ });
54
+ system.disableMapping();
55
+ }
56
+ resolve();
57
+ })
58
+ .catch(reject);
59
+ });
60
+ }
61
+ _onDestroy() {
62
+ return new Promise((resolve, reject) => {
63
+ const promises = this.systems.map((systemUID) => this.service.findSystemByUID(systemUID));
64
+ Promise.all(promises)
65
+ .then((systemInstances) => {
66
+ systemInstances.forEach((system) => {
67
+ if (this.options.mapDatabaseFile && this.options.mapping && this.options.persistMapping) {
68
+ // Save mapping
69
+ this.logger('debug', {
70
+ msg: `Saving OpenVSLAM map database ...`,
71
+ file: this.options.mapDatabaseFile,
72
+ });
73
+ system.saveMap(this.options.mapDatabaseFile);
74
+ }
75
+ });
76
+ // Delete and shutdown systems
77
+ return Promise.all(this.systems.map((systemUID) => this.service.deleteSystem(systemUID)));
78
+ })
79
+ .then(() => {
80
+ resolve();
81
+ })
82
+ .catch(reject);
83
+ });
84
+ }
85
+ process(data) {
86
+ return new Promise((resolve, reject) => {
87
+ let uid = undefined;
88
+ this.service
89
+ .findSystemUIDByObject(data.source)
90
+ .then((systemUID) => {
91
+ uid = systemUID;
92
+ return this.service.findSystemByUID(uid);
93
+ })
94
+ .then((system) => {
95
+ if (!system) {
96
+ return resolve(undefined);
97
+ }
98
+ const out = new data_1.VSLAMFrame(data);
99
+ const timestamp = core_1.TimeService.getUnit().convert(data.phenomenonTimestamp, core_1.TimeUnit.SECOND);
100
+ // Process the frame differently depending on the type of video frame
101
+ if (data instanceof opencv_1.VideoFrame) {
102
+ out.image = data.image;
103
+ system.feedMonocularFrame(data.image, timestamp);
104
+ }
105
+ else if (data instanceof opencv_1.StereoVideoFrame) {
106
+ out.image = data.left.image;
107
+ system.feedStereoFrame(data.left.image, data.right.image, timestamp);
108
+ }
109
+ else if (data instanceof opencv_1.DepthImageFrame) {
110
+ out.image = data.image;
111
+ system.feedRGBDFrame(data.image, data.depth, timestamp);
112
+ }
113
+ // Fetch the current camera pose
114
+ const pose = new core_1.Matrix4().fromArray(system.getMapPublisher().getCurrentCamPose());
115
+ out.cameraPose = pose;
116
+ out.systemUID = uid;
117
+ resolve(out);
118
+ })
119
+ .catch(reject);
120
+ });
121
+ }
122
+ }
123
+ exports.VSLAMProcessingNode = VSLAMProcessingNode;
124
+ //# 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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./VSLAMProcessingNode"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nodes/processing/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VSLAMSocketPublisher = void 0;
4
+ const core_1 = require("@openhps/core");
5
+ const openvslam_1 = require("../../openvslam");
6
+ const VSLAMService_1 = require("../../service/VSLAMService");
7
+ class VSLAMSocketPublisher extends core_1.SinkNode {
8
+ constructor(options) {
9
+ var _a;
10
+ super(options);
11
+ this.publishers = new Map();
12
+ this.options = options !== null && options !== void 0 ? options : {};
13
+ this.options.url = (_a = this.options.url) !== null && _a !== void 0 ? _a : 'http://localhost:3000';
14
+ this.once('build', this._onBuild.bind(this));
15
+ this.once('destroy', this._onDestroy.bind(this));
16
+ }
17
+ _onBuild() {
18
+ return new Promise((resolve, reject) => {
19
+ if (!this.model) {
20
+ return reject(new Error(`Unable to start VSLAM processing without VSLAMService!`));
21
+ }
22
+ this.service = this.model.findService(VSLAMService_1.VSLAMService);
23
+ if (!this.service) {
24
+ return reject(new Error(`Unable to start VSLAM socket publisher without VSLAMService!`));
25
+ }
26
+ resolve();
27
+ });
28
+ }
29
+ _onDestroy() {
30
+ return new Promise((resolve) => {
31
+ this.publishers.forEach((publisher) => {
32
+ publisher.terminate();
33
+ });
34
+ resolve();
35
+ });
36
+ }
37
+ onPush(frame, options) {
38
+ return new Promise((resolve, reject) => {
39
+ if (!frame.systemUID) {
40
+ return resolve();
41
+ }
42
+ const existingPublisher = this.publishers.get(frame.systemUID);
43
+ if (existingPublisher) {
44
+ return resolve();
45
+ }
46
+ this.service
47
+ .findSystemByUID(frame.systemUID)
48
+ .then((system) => {
49
+ if (!system) {
50
+ return reject(new Error(`VSLAM system ${frame.systemUID} not found!`));
51
+ }
52
+ // A publisher may have been created by a concurrent push
53
+ if (this.publishers.has(frame.systemUID)) {
54
+ return;
55
+ }
56
+ const publisher = new openvslam_1.SocketPublisher(system, this.options.url);
57
+ publisher.run();
58
+ this.publishers.set(frame.systemUID, publisher);
59
+ })
60
+ .then(() => {
61
+ resolve();
62
+ })
63
+ .catch(reject);
64
+ });
65
+ }
66
+ }
67
+ exports.VSLAMSocketPublisher = VSLAMSocketPublisher;
68
+ //# 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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./VSLAMSocketPublisher"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nodes/sink/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }