@wemap/positioning 2.1.0 → 2.3.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 (67) hide show
  1. package/debug/arcore-absolute.html +16 -0
  2. package/debug/arcore.html +16 -0
  3. package/package.json +2 -1
  4. package/src/PositioningHandler.js +19 -5
  5. package/src/components/AbsoluteAttitudeComponent.jsx +2 -2
  6. package/src/components/ArCoreAbsoluteComponent.jsx +100 -0
  7. package/src/components/ArCoreComponent.jsx +74 -0
  8. package/src/components/GnssWifiComponent.jsx +14 -2
  9. package/src/components/GnssWifiPdrComponent.jsx +11 -2
  10. package/src/components/MapComponent.jsx +237 -0
  11. package/src/components/PdrComponent.jsx +12 -3
  12. package/src/components/PoseComponent.jsx +7 -0
  13. package/src/components/PositioningPoseComponent.jsx +12 -3
  14. package/src/components/Utils.js +18 -0
  15. package/src/components/index.js +4 -0
  16. package/src/errors/MissingArCoreError.js +9 -0
  17. package/src/errors/MissingNativeInterfaceError.js +9 -0
  18. package/src/providers/Provider.js +15 -3
  19. package/src/providers/ProviderOptions.js +1 -1
  20. package/src/providers/attitude/AbsoluteAttitudeProvider.js +6 -6
  21. package/src/providers/others/MapMatchingProvider.js +19 -19
  22. package/src/providers/pose/ArCoreAbsoluteProvider.js +186 -0
  23. package/src/providers/pose/ArCoreProvider.js +115 -0
  24. package/src/providers/pose/GnssWifiPdrProvider.js +20 -20
  25. package/src/providers/pose/PoseProvider.js +1 -1
  26. package/src/providers/pose/pdr/PdrProvider.js +39 -39
  27. package/src/providers/pose/pdr/helpers/Smoother.js +33 -33
  28. package/src/providers/pose/pdr/helpers/Smoother.spec.js +7 -7
  29. package/src/providers/position/GnssWifiProvider.js +5 -5
  30. package/src/providers/position/IpProvider.js +2 -2
  31. package/webpack/webpack.common.js +1 -1
  32. package/src.old/Constants.js +0 -11
  33. package/src.old/NavigationHandler.js +0 -244
  34. package/src.old/Pose.js +0 -8
  35. package/src.old/attitude/AttitudeHandler.js +0 -342
  36. package/src.old/attitude/EkfAttitude.js +0 -238
  37. package/src.old/attitude/EkfAttitude.spec.js +0 -116
  38. package/src.old/components/AbsoluteAttitude.jsx +0 -136
  39. package/src.old/components/Imu.jsx +0 -89
  40. package/src.old/components/LocationSource.jsx +0 -434
  41. package/src.old/components/Logger.jsx +0 -113
  42. package/src.old/components/NavigationDebugApp.jsx +0 -106
  43. package/src.old/components/Others.jsx +0 -121
  44. package/src.old/components/RelativeAttitude.jsx +0 -104
  45. package/src.old/components/Utils.js +0 -35
  46. package/src.old/components/index.js +0 -13
  47. package/src.old/index.js +0 -7
  48. package/src.old/providers/FixedLocationImuLocationSource.js +0 -66
  49. package/src.old/providers/GnssLocationSource.js +0 -118
  50. package/src.old/providers/GnssPdrLocationSource.js +0 -182
  51. package/src.old/providers/IPLocationSource.js +0 -96
  52. package/src.old/providers/LocationSource.js +0 -290
  53. package/src.old/providers/PdrLocationSource.js +0 -320
  54. package/src.old/providers/ProvidersLogger.js +0 -77
  55. package/src.old/providers/pdr/HeadingUnlocker.js +0 -41
  56. package/src.old/providers/pdr/HeadingUnlocker.spec.js +0 -26
  57. package/src.old/providers/pdr/Smoother.js +0 -90
  58. package/src.old/providers/pdr/Smoother.spec.js +0 -424
  59. package/src.old/providers/pdr/ThugDetector.js +0 -37
  60. package/src.old/providers/steps/StepDetection.js +0 -7
  61. package/src.old/providers/steps/StepDetectionLadetto.js +0 -67
  62. package/src.old/providers/steps/StepDetectionMinMaxPeaks.js +0 -80
  63. package/src.old/providers/steps/StepDetectionMinMaxPeaks2.js +0 -108
  64. package/src.old/sensors/SensorsCompatibility.js +0 -486
  65. package/src.old/sensors/SensorsCompatibility.spec.js +0 -270
  66. package/src.old/sensors/SensorsLogger.js +0 -94
  67. package/src.old/sensors/SensorsLoggerUtils.js +0 -35
@@ -1,270 +0,0 @@
1
- import chai from 'chai';
2
- import chaiAlmost from 'chai-almost';
3
- import chaiAsPromised from 'chai-as-promised';
4
- import 'jsdom-global/register';
5
-
6
- import SensorsCompatibility from './SensorsCompatibility';
7
-
8
- const expect = chai.expect;
9
- chai.use(chaiAlmost());
10
- chai.use(chaiAsPromised);
11
-
12
- const IOS_USER_AGENT = 'iPad';
13
- const ANDROID_USER_AGENT = 'Android';
14
- const FIREFOX_USER_AGENT = 'Firefox';
15
- const OPERA_USER_AGENT = 'Opera';
16
- const UNKNOWN_USER_AGENT = 'foobar';
17
-
18
- const defaultMotionSensors = {
19
- accelerometer: true,
20
- gyroscope: true,
21
- magnetometer: true
22
- };
23
-
24
- const defaultDeviceMotionSensors = {
25
- accelerometer: true,
26
- gyroscope: true,
27
- magnetometer: false
28
- };
29
-
30
- const timestamps = [
31
- 0, 0.02, 0.04, 0.06, 0.08
32
- ];
33
-
34
- const accData = [
35
- [-0.034561157, 3.81073, 8.860977],
36
- [-0.030700684, 3.814499, 8.818954],
37
- [-0.018234253, 3.8023376, 8.85762],
38
- [-0.020080566, 3.8205414, 8.8676605],
39
- [-0.054519653, 3.8456726, 8.810287]
40
- ];
41
-
42
- const gyrData = [
43
- [0.0047454834, 0.0028076172, 0.0022888184],
44
- [0.005218506, 0.0020446777, 0.0012207031],
45
- [0.0044555664, 0.0023040771, 4.4250488E-4],
46
- [0.0044555664, 0.0027618408, 0.0011444092],
47
- [0.0040893555, 0.0020446777, 0.0025787354]
48
- ];
49
-
50
-
51
- function fakeUserAgent(userAgent) {
52
- navigator.__defineGetter__('userAgent', () => userAgent);
53
- }
54
-
55
- const commonDeviceMotion = (userAgent = ANDROID_USER_AGENT,
56
- _simulatedSensors = defaultDeviceMotionSensors,
57
- _expectedSensors = defaultDeviceMotionSensors) => {
58
-
59
- const simulatedSensors = !_simulatedSensors ? defaultMotionSensors : _simulatedSensors;
60
- const expectedSensors = !_expectedSensors ? defaultMotionSensors : _expectedSensors;
61
-
62
- return new Promise((resolve, reject) => {
63
- const result = [];
64
-
65
- fakeUserAgent(userAgent);
66
- document.hasFocus = () => true;
67
- const sc = new SensorsCompatibility();
68
-
69
- let eventsReceived = 0;
70
- sc.startImu((e) => {
71
- result.push(e);
72
-
73
- eventsReceived++;
74
- if (eventsReceived === accData.length) {
75
- resolve(result);
76
- }
77
- }, expectedSensors).catch(e => {
78
- reject(e);
79
- });
80
-
81
- if (!simulatedSensors.accelerometer && !simulatedSensors.gyroscope) {
82
- return;
83
- }
84
-
85
- for (let i = 0; i < timestamps.length; i++) {
86
-
87
- const event = new CustomEvent('devicemotion');
88
-
89
- Object.defineProperty(event, 'timeStamp', { get: () => timestamps[i] });
90
-
91
- if (simulatedSensors.accelerometer) {
92
- const acc = accData[i];
93
- event.accelerationIncludingGravity = {
94
- x: acc[0],
95
- y: acc[1],
96
- z: acc[2]
97
- };
98
- }
99
-
100
- if (simulatedSensors.gyroscope) {
101
- const gyr = gyrData[i];
102
- event.rotationRate = {
103
- alpha: gyr[0],
104
- beta: gyr[1],
105
- gamma: gyr[2]
106
- };
107
- }
108
- window.dispatchEvent(event);
109
- }
110
- });
111
- };
112
-
113
-
114
- describe('devicemotion', () => {
115
-
116
- it('[Android] Acc - Gyr', (done) => {
117
- commonDeviceMotion(ANDROID_USER_AGENT).then((receivedDataset) => {
118
- for (let i = 0; i < receivedDataset.length; i++) {
119
- const e = receivedDataset[i];
120
-
121
- const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
122
- const expectedAcc = accData[i];
123
- const expectedTimestamp = timestamps[i] / 1e3;
124
-
125
- expect(e.timestamp).almost(expectedTimestamp);
126
- expect(e.acc).deep.almost(expectedAcc);
127
- expect(e.gyr).deep.almost(expectedGyr);
128
- }
129
- done();
130
- }).catch(e => done(e));
131
- });
132
-
133
- it('[iOS] Acc - Gyr', (done) => {
134
- commonDeviceMotion(IOS_USER_AGENT).then((receivedDataset) => {
135
- for (let i = 0; i < receivedDataset.length; i++) {
136
- const e = receivedDataset[i];
137
-
138
- const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
139
- const expectedAcc = accData[i].map(x => -x);
140
- const expectedTimestamp = timestamps[i] / 1e3;
141
-
142
- expect(e.timestamp).almost(expectedTimestamp);
143
- expect(e.acc).deep.almost(expectedAcc);
144
- expect(e.gyr).deep.almost(expectedGyr);
145
- }
146
- done();
147
- }).catch(e => done(e));
148
- });
149
-
150
- it('[Firefox] Acc - Gyr', (done) => {
151
- commonDeviceMotion(FIREFOX_USER_AGENT).then((receivedDataset) => {
152
- for (let i = 0; i < receivedDataset.length; i++) {
153
- const e = receivedDataset[i];
154
-
155
- const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
156
- const expectedAcc = accData[i];
157
- const expectedTimestamp = timestamps[i] / 1e3;
158
-
159
- expect(e.timestamp).almost(expectedTimestamp);
160
- expect(e.acc).deep.almost(expectedAcc);
161
- expect(e.gyr).deep.almost(expectedGyr);
162
- }
163
- done();
164
- }).catch(e => done(e));
165
- });
166
-
167
- it('[Opera] Acc - Gyr', (done) => {
168
- commonDeviceMotion(OPERA_USER_AGENT).then((receivedDataset) => {
169
- for (let i = 0; i < receivedDataset.length; i++) {
170
- const e = receivedDataset[i];
171
-
172
- const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
173
- const expectedAcc = accData[i];
174
- const expectedTimestamp = timestamps[i] / 1e3;
175
-
176
- expect(e.timestamp).almost(expectedTimestamp);
177
- expect(e.acc).deep.almost(expectedAcc);
178
- expect(e.gyr).deep.almost(expectedGyr);
179
- }
180
- done();
181
- }).catch(e => done(e));
182
- });
183
-
184
-
185
- it('[Unknown] Acc - Gyr', (done) => {
186
- commonDeviceMotion(UNKNOWN_USER_AGENT).then((receivedDataset) => {
187
- for (let i = 0; i < receivedDataset.length; i++) {
188
- const e = receivedDataset[i];
189
-
190
- const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
191
- const expectedAcc = accData[i];
192
- const expectedTimestamp = timestamps[i] / 1e3;
193
-
194
- expect(e.timestamp).almost(expectedTimestamp);
195
- expect(e.acc).deep.almost(expectedAcc);
196
- expect(e.gyr).deep.almost(expectedGyr);
197
- }
198
- done();
199
- }).catch(e => done(e));
200
- });
201
-
202
-
203
- it('[Unknown] Missing gyr', (done) => {
204
-
205
- const globalTimeout = setTimeout(() => done(), 20);
206
-
207
- commonDeviceMotion(UNKNOWN_USER_AGENT,
208
- {
209
- accelerometer: true,
210
- gyroscope: false
211
- }, {
212
- accelerometer: true,
213
- gyroscope: true
214
- })
215
- .then(() => {
216
- clearTimeout(globalTimeout);
217
- done(Error('Should not success'));
218
- })
219
- .catch(() => {
220
- clearTimeout(globalTimeout);
221
- done(Error('Should not reject'));
222
- });
223
- });
224
-
225
-
226
- it('[Unknown] Missing acc', (done) => {
227
-
228
- const globalTimeout = setTimeout(() => done(), 20);
229
-
230
- commonDeviceMotion(UNKNOWN_USER_AGENT,
231
- {
232
- accelerometer: true,
233
- gyroscope: false
234
- }, {
235
- accelerometer: true,
236
- gyroscope: true
237
- })
238
- .then(() => {
239
- clearTimeout(globalTimeout);
240
- done(Error('Should not success'));
241
- })
242
- .catch(() => {
243
- clearTimeout(globalTimeout);
244
- done(Error('Should not reject'));
245
- });
246
- });
247
-
248
-
249
- it('[Unknown] No sensor', (done) => {
250
-
251
- const globalTimeout = setTimeout(() => done(), 20);
252
-
253
- commonDeviceMotion(UNKNOWN_USER_AGENT,
254
- {
255
- accelerometer: false,
256
- gyroscope: false
257
- }, {
258
- accelerometer: true,
259
- gyroscope: true
260
- })
261
- .then(() => {
262
- clearTimeout(globalTimeout);
263
- done(Error('Should not success'));
264
- })
265
- .catch(() => {
266
- clearTimeout(globalTimeout);
267
- done(Error('Should not reject'));
268
- });
269
- });
270
- });
@@ -1,94 +0,0 @@
1
-
2
- const DataType = {
3
- ACCELEROMETER: 0,
4
- GYROSCOPE: 1,
5
- DEVICE_ORIENTATION_RELATIVE: 2,
6
- DEVICE_ORIENTATION_ABSOLUTE: 3,
7
- WATCH_POSITION: 4,
8
- USER_INPUT_POSITION: 10,
9
- USER_INPUT_HEADING: 11,
10
- IP_POSITION: 12
11
- };
12
-
13
- const PRECISION = 1000;
14
-
15
- class SensorsLogger {
16
-
17
- constructor() {
18
- this.dataset = [];
19
- this.videoBlobs = [];
20
- this.removeDuplicates = true;
21
-
22
- this.lastDataTimestamp = new Array(DataType.length);
23
- for (let i = 0; i < DataType.length; i++) {
24
- this.lastDataTimestamp[i] = 0;
25
- }
26
- }
27
-
28
- static get DataType() {
29
- return DataType;
30
- }
31
-
32
- disableRemoveDuplicates() {
33
- this.removeDuplicates = false;
34
- }
35
-
36
- feedWithCurrentTime(dataType, data, compact) {
37
- this.feed(dataType, performance.now() / 1e3, data, compact);
38
- }
39
-
40
- feed(dataType, timestamp, _data, compact = false) {
41
-
42
- let data;
43
-
44
- const smallTimestamp = Math.round(timestamp * PRECISION) / PRECISION;
45
- if (this.removeDuplicates && this.lastDataTimestamp[dataType] === timestamp) {
46
- return;
47
- }
48
-
49
- if (compact) {
50
- const smallData = new Array(_data.length);
51
- for (let i = 0; i < _data.length; i++) {
52
- smallData[i] = Math.round(_data[i] * PRECISION) / PRECISION;
53
- }
54
- data = smallData;
55
- } else {
56
- data = _data;
57
- }
58
-
59
- const dataArray = [dataType, smallTimestamp].concat(data);
60
- this.dataset.push(dataArray);
61
- if (this.removeDuplicates) {
62
- this.lastDataTimestamp[dataType] = timestamp;
63
- }
64
- }
65
-
66
- // TODO: this is not linked to the rest of the code. Check why
67
- // videoFeed = event => {
68
- // if (event.data && event.data.size > 0) {
69
- // this.videoBlobs.push(event.data);
70
- // }
71
- // }
72
-
73
- getVideoSize() {
74
- return this.videoBlobs.length;
75
- }
76
-
77
- /**
78
- * Pop current logs dataset
79
- */
80
- pop() {
81
- const currentDataset = this.dataset;
82
- this.dataset = [];
83
- return currentDataset;
84
- }
85
-
86
- popVideoBlob() {
87
- const currentVideoBlobs = this.videoBlobs;
88
- this.videoBlobs = [];
89
- return new Blob(currentVideoBlobs, { type: 'video/webm' });
90
- }
91
-
92
- }
93
-
94
- export default SensorsLogger;
@@ -1,35 +0,0 @@
1
- import JSZip from 'jszip';
2
- import { saveAs } from 'file-saver';
3
-
4
- class SensorsLoggerUtils {
5
-
6
- static download(sensorsLogger) {
7
-
8
- const data = sensorsLogger.pop();
9
- const csvData = data.map(row => row.join(',')).join('\r\n');
10
-
11
- const zip = new JSZip();
12
- zip.file('data.csv', csvData);
13
- zip.file('video.webm', sensorsLogger.popVideoBlob());
14
- zip.generateAsync({ type: 'blob' })
15
- .then(function(content) {
16
- saveAs(content, 'dataset.zip');
17
- });
18
- }
19
-
20
-
21
- /**
22
- * Return a value equivalent to performance now from a given unix timestamp
23
- * @param {Number} timestamp a unix timestamp
24
- * @returns timestamp relative to performance.now()
25
- */
26
- static unixTimestampToPerformanceNow(timestamp) {
27
-
28
- if (!window || !window.performance) {
29
- throw new Error('window.performance does not exist');
30
- }
31
- return window.performance.now() + timestamp - new Date().getTime();
32
- }
33
- }
34
-
35
- export default SensorsLoggerUtils;