@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.
- package/LICENSE +190 -0
- package/README.md +115 -2
- package/cc/config.cc +49 -0
- package/cc/config.h +24 -0
- package/cc/frame_publisher.cc +62 -0
- package/cc/frame_publisher.h +27 -0
- package/cc/graph_node.cc +78 -0
- package/cc/graph_node.h +26 -0
- package/cc/keyframe.cc +81 -0
- package/cc/keyframe.h +27 -0
- package/cc/landmark.cc +85 -0
- package/cc/landmark.h +26 -0
- package/cc/map_publisher.cc +119 -0
- package/cc/map_publisher.h +33 -0
- package/cc/openvslam.cc +26 -0
- package/cc/pangolin_viewer/viewer.h +26 -0
- package/cc/socket_publisher/publisher.cc +84 -0
- package/cc/socket_publisher/publisher.h +26 -0
- package/cc/system.cc +190 -0
- package/cc/system.h +47 -0
- package/dist/cjs/data/VSLAMFrame.js +44 -0
- package/dist/cjs/data/VSLAMFrame.js.map +1 -0
- package/dist/cjs/data/VSLAMGraphNode.js +7 -0
- package/dist/cjs/data/VSLAMGraphNode.js.map +1 -0
- package/dist/cjs/data/VSLAMKeyFrame.js +56 -0
- package/dist/cjs/data/VSLAMKeyFrame.js.map +1 -0
- package/dist/cjs/data/VSLAMLandmark.js +53 -0
- package/dist/cjs/data/VSLAMLandmark.js.map +1 -0
- package/dist/cjs/data/VSLAMMap.js +36 -0
- package/dist/cjs/data/VSLAMMap.js.map +1 -0
- package/dist/cjs/data/index.js +8 -0
- package/dist/cjs/data/index.js.map +1 -0
- package/dist/cjs/index.js +9 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/nodes/VSLAMConfiguration.js +43 -0
- package/dist/cjs/nodes/VSLAMConfiguration.js.map +1 -0
- package/dist/cjs/nodes/index.js +7 -0
- package/dist/cjs/nodes/index.js.map +1 -0
- package/dist/cjs/nodes/processing/VSLAMProcessingNode.js +124 -0
- package/dist/cjs/nodes/processing/VSLAMProcessingNode.js.map +1 -0
- package/dist/cjs/nodes/processing/index.js +5 -0
- package/dist/cjs/nodes/processing/index.js.map +1 -0
- package/dist/cjs/nodes/sink/VSLAMSocketPublisher.js +68 -0
- package/dist/cjs/nodes/sink/VSLAMSocketPublisher.js.map +1 -0
- package/dist/cjs/nodes/sink/index.js +5 -0
- package/dist/cjs/nodes/sink/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/service/VSLAMService.js +121 -0
- package/dist/cjs/service/VSLAMService.js.map +1 -0
- package/dist/cjs/service/index.js +5 -0
- package/dist/cjs/service/index.js.map +1 -0
- package/dist/cjs/tsconfig.bundle.cjs.tsbuildinfo +1 -0
- package/dist/esm/data/VSLAMFrame.js +41 -0
- package/dist/esm/data/VSLAMFrame.js.map +1 -0
- package/dist/esm/data/VSLAMGraphNode.js +3 -0
- package/dist/esm/data/VSLAMGraphNode.js.map +1 -0
- package/dist/esm/data/VSLAMKeyFrame.js +53 -0
- package/dist/esm/data/VSLAMKeyFrame.js.map +1 -0
- package/dist/esm/data/VSLAMLandmark.js +50 -0
- package/dist/esm/data/VSLAMLandmark.js.map +1 -0
- package/dist/esm/data/VSLAMMap.js +33 -0
- package/dist/esm/data/VSLAMMap.js.map +1 -0
- package/dist/esm/data/index.js +5 -0
- package/dist/esm/data/index.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/nodes/VSLAMConfiguration.js +39 -0
- package/dist/esm/nodes/VSLAMConfiguration.js.map +1 -0
- package/dist/esm/nodes/index.js +4 -0
- package/dist/esm/nodes/index.js.map +1 -0
- package/dist/esm/nodes/processing/VSLAMProcessingNode.js +120 -0
- package/dist/esm/nodes/processing/VSLAMProcessingNode.js.map +1 -0
- package/dist/esm/nodes/processing/index.js +2 -0
- package/dist/esm/nodes/processing/index.js.map +1 -0
- package/dist/esm/nodes/sink/VSLAMSocketPublisher.js +64 -0
- package/dist/esm/nodes/sink/VSLAMSocketPublisher.js.map +1 -0
- package/dist/esm/nodes/sink/index.js +2 -0
- package/dist/esm/nodes/sink/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/service/VSLAMService.js +117 -0
- package/dist/esm/service/VSLAMService.js.map +1 -0
- package/dist/esm/service/index.js +2 -0
- package/dist/esm/service/index.js.map +1 -0
- package/dist/esm/tsconfig.bundle.esm.tsbuildinfo +1 -0
- package/dist/esm/tsconfig.bundle.types.tsbuildinfo +1 -0
- package/dist/types/data/VSLAMFrame.d.ts +16 -0
- package/dist/types/data/VSLAMFrame.d.ts.map +1 -0
- package/dist/types/data/VSLAMGraphNode.d.ts +3 -0
- package/dist/types/data/VSLAMGraphNode.d.ts.map +1 -0
- package/dist/types/data/VSLAMKeyFrame.d.ts +28 -0
- package/dist/types/data/VSLAMKeyFrame.d.ts.map +1 -0
- package/dist/types/data/VSLAMLandmark.d.ts +20 -0
- package/dist/types/data/VSLAMLandmark.d.ts.map +1 -0
- package/dist/types/data/VSLAMMap.d.ts +13 -0
- package/dist/types/data/VSLAMMap.d.ts.map +1 -0
- package/dist/types/data/index.d.ts +5 -0
- package/dist/types/data/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/nodes/VSLAMConfiguration.d.ts +36 -0
- package/dist/types/nodes/VSLAMConfiguration.d.ts.map +1 -0
- package/dist/types/nodes/index.d.ts +4 -0
- package/dist/types/nodes/index.d.ts.map +1 -0
- package/dist/types/nodes/processing/VSLAMProcessingNode.d.ts +36 -0
- package/dist/types/nodes/processing/VSLAMProcessingNode.d.ts.map +1 -0
- package/dist/types/nodes/processing/index.d.ts +2 -0
- package/dist/types/nodes/processing/index.d.ts.map +1 -0
- package/dist/types/nodes/sink/VSLAMSocketPublisher.d.ts +17 -0
- package/dist/types/nodes/sink/VSLAMSocketPublisher.d.ts.map +1 -0
- package/dist/types/nodes/sink/index.d.ts +2 -0
- package/dist/types/nodes/sink/index.d.ts.map +1 -0
- package/dist/types/service/VSLAMService.d.ts +57 -0
- package/dist/types/service/VSLAMService.d.ts.map +1 -0
- package/dist/types/service/index.d.ts +2 -0
- package/dist/types/service/index.d.ts.map +1 -0
- package/install/install.js +85 -0
- package/install/parseEnv.js +7 -0
- package/package.json +125 -5
- package/src/data/VSLAMFrame.ts +48 -0
- package/src/data/VSLAMGraphNode.ts +1 -0
- package/src/data/VSLAMKeyFrame.ts +50 -0
- package/src/data/VSLAMLandmark.ts +42 -0
- package/src/data/VSLAMMap.ts +20 -0
- package/src/data/index.ts +4 -0
- package/src/index.ts +4 -0
- package/src/nodes/VSLAMConfiguration.ts +72 -0
- package/src/nodes/index.ts +3 -0
- package/src/nodes/processing/VSLAMProcessingNode.ts +152 -0
- package/src/nodes/processing/index.ts +1 -0
- package/src/nodes/sink/VSLAMSocketPublisher.ts +75 -0
- package/src/nodes/sink/index.ts +1 -0
- package/src/openvslam/index.d.ts +9 -0
- package/src/openvslam/index.js +8 -0
- package/src/openvslam/typings/Config.d.ts +3 -0
- package/src/openvslam/typings/FramePublisher.d.ts +12 -0
- package/src/openvslam/typings/GraphNode.d.ts +5 -0
- package/src/openvslam/typings/KeyFrame.d.ts +24 -0
- package/src/openvslam/typings/Landmark.d.ts +19 -0
- package/src/openvslam/typings/MapPublisher.d.ts +21 -0
- package/src/openvslam/typings/PangolinViewer.d.ts +9 -0
- package/src/openvslam/typings/SocketPublisher.d.ts +9 -0
- package/src/openvslam/typings/System.d.ts +45 -0
- package/src/service/VSLAMService.ts +130 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nodes/sink/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC"}
|