@wemap/providers 12.10.8 → 12.10.9
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/dist/helpers/CustomMapProvider.d.ts +10 -0
- package/{index.ts → dist/index.d.ts} +0 -14
- package/dist/index.js +1 -3446
- package/dist/index.js.map +1 -1
- package/{src/ProvidersOptions.ts → dist/src/ProvidersOptions.d.ts} +7 -16
- package/dist/src/errors/AskImuOnDesktopError.d.ts +5 -0
- package/dist/src/errors/ContainsIgnoredProviderError.d.ts +5 -0
- package/dist/src/errors/GeolocationApiMissingError.d.ts +5 -0
- package/dist/src/errors/GeolocationPermissionDeniedError.d.ts +5 -0
- package/dist/src/errors/GeolocationPositionUnavailableError.d.ts +5 -0
- package/dist/src/errors/IpResolveServerError.d.ts +5 -0
- package/dist/src/errors/MissingAccelerometerError.d.ts +6 -0
- package/dist/src/errors/MissingArCoreError.d.ts +5 -0
- package/dist/src/errors/MissingGyroscopeError.d.ts +6 -0
- package/dist/src/errors/MissingMagnetometerError.d.ts +5 -0
- package/dist/src/errors/MissingNativeInterfaceError.d.ts +5 -0
- package/dist/src/errors/MissingPoleStarError.d.ts +5 -0
- package/dist/src/errors/MissingSensorError.d.ts +6 -0
- package/dist/src/errors/NoProviderFoundError.d.ts +5 -0
- package/dist/src/events/AvailabilityHelper.d.ts +5 -0
- package/dist/src/events/ProvidersLoggerOld.d.ts +24 -0
- package/dist/src/events/Types.d.ts +34 -0
- package/dist/src/mapmatching/MapMatchingHandler.d.ts +93 -0
- package/dist/src/providers/Constants.d.ts +4 -0
- package/{src/providers/NativeProviders.ts → dist/src/providers/NativeProviders.d.ts} +2 -23
- package/dist/src/providers/Provider.d.ts +64 -0
- package/dist/src/providers/attitude/EkfAttitude.d.ts +41 -0
- package/dist/src/providers/attitude/TurnProvider.d.ts +17 -0
- package/dist/src/providers/attitude/absolute/AbsoluteAttitudeFromBrowserProvider.d.ts +60 -0
- package/dist/src/providers/attitude/absolute/AbsoluteAttitudeProvider.d.ts +44 -0
- package/dist/src/providers/attitude/relative/RelativeAttitudeFromBrowserProvider.d.ts +31 -0
- package/dist/src/providers/attitude/relative/RelativeAttitudeFromEkfProvider.d.ts +26 -0
- package/dist/src/providers/attitude/relative/RelativeAttitudeFromInertialProvider.d.ts +18 -0
- package/dist/src/providers/attitude/relative/RelativeAttitudeProvider.d.ts +25 -0
- package/dist/src/providers/imu/AccelerometerProvider.d.ts +11 -0
- package/dist/src/providers/imu/GyroscopeProvider.d.ts +11 -0
- package/dist/src/providers/imu/HighRotationsProvider.d.ts +15 -0
- package/dist/src/providers/imu/ImuProvider.d.ts +34 -0
- package/dist/src/providers/imu/MagnetometerCalibrationProvider.d.ts +11 -0
- package/dist/src/providers/inclination/InclinationFromAccProvider.d.ts +18 -0
- package/dist/src/providers/inclination/InclinationFromRelativeAttitudeProvider.d.ts +19 -0
- package/dist/src/providers/inclination/InclinationProvider.d.ts +18 -0
- package/dist/src/providers/legacy/helpers/HeadingUnlocker.d.ts +12 -0
- package/dist/src/providers/legacy/helpers/ThugDetector.d.ts +8 -0
- package/dist/src/providers/others/CameraNativeProvider.d.ts +11 -0
- package/dist/src/providers/others/CameraProjectionMatrixProvider.d.ts +11 -0
- package/dist/src/providers/position/absolute/AbsolutePositionProvider.d.ts +35 -0
- package/dist/src/providers/position/absolute/GnssWifiProvider.d.ts +28 -0
- package/dist/src/providers/position/absolute/IpProvider.d.ts +16 -0
- package/dist/src/providers/position/absolute/PoleStarProvider.d.ts +14 -0
- package/dist/src/providers/position/relative/GeoRelativePositionFromArCoreProvider.d.ts +17 -0
- package/dist/src/providers/position/relative/GeoRelativePositionProvider.d.ts +12 -0
- package/dist/src/providers/position/relative/PdrProvider.d.ts +15 -0
- package/dist/src/providers/steps/StepDetectionLadetto.d.ts +15 -0
- package/dist/src/providers/steps/StepDetectionMinMaxPeaks.d.ts +19 -0
- package/dist/src/providers/steps/StepDetectionMinMaxPeaks2.d.ts +27 -0
- package/dist/src/providers/steps/StepDetectionMinMaxPeaks3.d.ts +24 -0
- package/dist/src/providers/steps/StepProvider.d.ts +36 -0
- package/dist/src/providers/steps/StraightLineProvider.d.ts +21 -0
- package/dist/src/providers/vision/ArCoreProvider.d.ts +50 -0
- package/dist/src/providers/vision/BarcodeProvider.d.ts +11 -0
- package/dist/src/providers/vision/vps/ImageRelocalization.d.ts +11 -0
- package/dist/src/providers/vision/vps/RelativeRotationCalc.d.ts +10 -0
- package/dist/src/providers/vision/vps/VpsMetadata.d.ts +33 -0
- package/dist/src/providers/vision/vps/VpsProvider.d.ts +45 -0
- package/dist/src/providers/vision/vps/VpsRequest.d.ts +18 -0
- package/dist/src/providers/vision/vps/VpsResponse.d.ts +15 -0
- package/dist/src/smoothers/AttitudeSmoother.d.ts +23 -0
- package/dist/src/smoothers/PositionSmoother.d.ts +21 -0
- package/package.json +16 -12
- package/src/errors/AskImuOnDesktopError.ts +0 -10
- package/src/errors/ContainsIgnoredProviderError.ts +0 -10
- package/src/errors/GeolocationApiMissingError.ts +0 -10
- package/src/errors/GeolocationPermissionDeniedError.ts +0 -10
- package/src/errors/GeolocationPositionUnavailableError.ts +0 -10
- package/src/errors/IpResolveServerError.ts +0 -10
- package/src/errors/MissingAccelerometerError.ts +0 -11
- package/src/errors/MissingArCoreError.ts +0 -10
- package/src/errors/MissingGyroscopeError.ts +0 -11
- package/src/errors/MissingMagnetometerError.ts +0 -9
- package/src/errors/MissingNativeInterfaceError.ts +0 -11
- package/src/errors/MissingPoleStarError.ts +0 -10
- package/src/errors/MissingSensorError.ts +0 -15
- package/src/errors/NoProviderFoundError.ts +0 -10
- package/src/events/AvailabilityHelper.spec.ts +0 -30
- package/src/events/AvailabilityHelper.ts +0 -28
- package/src/events/ProvidersLoggerOld.ts +0 -87
- package/src/events/Types.ts +0 -18
- package/src/mapmatching/MapMatchingHandler.spec.ts +0 -142
- package/src/mapmatching/MapMatchingHandler.ts +0 -540
- package/src/providers/Constants.ts +0 -5
- package/src/providers/FakeProvider.spec.ts +0 -49
- package/src/providers/Provider.spec.ts +0 -113
- package/src/providers/Provider.ts +0 -244
- package/src/providers/attitude/EkfAttitude.spec.ts +0 -115
- package/src/providers/attitude/EkfAttitude.ts +0 -233
- package/src/providers/attitude/TurnProvider.ts +0 -58
- package/src/providers/attitude/absolute/AbsoluteAttitudeFromBrowserProvider.ts +0 -267
- package/src/providers/attitude/absolute/AbsoluteAttitudeProvider.ts +0 -268
- package/src/providers/attitude/relative/RelativeAttitudeFromBrowserProvider.ts +0 -84
- package/src/providers/attitude/relative/RelativeAttitudeFromEkfProvider.ts +0 -89
- package/src/providers/attitude/relative/RelativeAttitudeFromInertialProvider.ts +0 -66
- package/src/providers/attitude/relative/RelativeAttitudeProvider.ts +0 -70
- package/src/providers/imu/AccelerometerProvider.ts +0 -28
- package/src/providers/imu/GyroscopeProvider.ts +0 -27
- package/src/providers/imu/HighRotationsProvider.ts +0 -49
- package/src/providers/imu/ImuProvider.ts +0 -110
- package/src/providers/imu/MagnetometerCalibrationProvider.ts +0 -21
- package/src/providers/inclination/InclinationFromAccProvider.ts +0 -57
- package/src/providers/inclination/InclinationFromRelativeAttitudeProvider.ts +0 -51
- package/src/providers/inclination/InclinationProvider.ts +0 -59
- package/src/providers/legacy/helpers/HeadingUnlocker.spec.ts +0 -53
- package/src/providers/legacy/helpers/HeadingUnlocker.ts +0 -44
- package/src/providers/legacy/helpers/ThugDetector.ts +0 -30
- package/src/providers/others/CameraNativeProvider.ts +0 -29
- package/src/providers/others/CameraProjectionMatrixProvider.ts +0 -25
- package/src/providers/position/absolute/AbsolutePositionProvider.spec.ts +0 -31
- package/src/providers/position/absolute/AbsolutePositionProvider.ts +0 -277
- package/src/providers/position/absolute/GnssWifiProvider.ts +0 -126
- package/src/providers/position/absolute/GnssWifiProviders.spec.ts +0 -90
- package/src/providers/position/absolute/IpProvider.ts +0 -47
- package/src/providers/position/absolute/PoleStarProvider.ts +0 -88
- package/src/providers/position/relative/GeoRelativePositionFromArCoreProvider.ts +0 -82
- package/src/providers/position/relative/GeoRelativePositionProvider.ts +0 -35
- package/src/providers/position/relative/PdrProvider.ts +0 -107
- package/src/providers/steps/StepDetectionLadetto.ts +0 -67
- package/src/providers/steps/StepDetectionMinMaxPeaks.ts +0 -70
- package/src/providers/steps/StepDetectionMinMaxPeaks2.ts +0 -99
- package/src/providers/steps/StepDetectionMinMaxPeaks3.ts +0 -192
- package/src/providers/steps/StepProvider.ts +0 -151
- package/src/providers/steps/StraightLineProvider.ts +0 -69
- package/src/providers/vision/ArCoreProvider.ts +0 -184
- package/src/providers/vision/BarcodeProvider.ts +0 -28
- package/src/providers/vision/vps/ImageRelocalization.ts +0 -98
- package/src/providers/vision/vps/RelativeRotationCalc.ts +0 -58
- package/src/providers/vision/vps/VpsMetadata.ts +0 -63
- package/src/providers/vision/vps/VpsProvider.ts +0 -251
- package/src/providers/vision/vps/VpsRequest.ts +0 -29
- package/src/providers/vision/vps/VpsResponse.ts +0 -43
- package/src/providers/vision/vps/VpsSchema.json +0 -90
- package/src/smoothers/AttitudeSmoother.ts +0 -110
- package/src/smoothers/PositionSmoother.spec.ts +0 -53
- package/src/smoothers/PositionSmoother.ts +0 -96
- package/tsconfig.json +0 -3
- package/vite.config.ts +0 -4
- /package/{src/providers/ProviderState.ts → dist/src/providers/ProviderState.d.ts} +0 -0
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { UserPosition } from '@wemap/geo';
|
|
2
|
-
|
|
3
|
-
import Provider from './Provider.js';
|
|
4
|
-
|
|
5
|
-
class FakeProvider1Clazz extends Provider<void> {
|
|
6
|
-
getName = () => 'FakeProvider1';
|
|
7
|
-
availability = () => Promise.resolve();
|
|
8
|
-
start() { this.notifyError(new Error()); }
|
|
9
|
-
stop() { /* do nothing */ }
|
|
10
|
-
}
|
|
11
|
-
const FakeProvider1 = new FakeProvider1Clazz();
|
|
12
|
-
export { FakeProvider1 };
|
|
13
|
-
|
|
14
|
-
class FakeProvider2Clazz extends Provider<void> {
|
|
15
|
-
getName = () => 'FakeProvider2';
|
|
16
|
-
availability = () => Promise.resolve(new Error());
|
|
17
|
-
start() { /* do nothing */ }
|
|
18
|
-
stop() { /* do nothing */ }
|
|
19
|
-
}
|
|
20
|
-
const FakeProvider2 = new FakeProvider2Clazz();
|
|
21
|
-
export { FakeProvider2 };
|
|
22
|
-
|
|
23
|
-
class FakeProvider3Clazz extends Provider<UserPosition> {
|
|
24
|
-
intervalId?: NodeJS.Timer;
|
|
25
|
-
getName = () => 'FakeProvider3';
|
|
26
|
-
availability = () => Promise.resolve();
|
|
27
|
-
start() {
|
|
28
|
-
this.intervalId = setInterval(() => {
|
|
29
|
-
this.notify(new UserPosition(Math.random() * 45, Math.random() * 180));
|
|
30
|
-
}, 1);
|
|
31
|
-
}
|
|
32
|
-
stop() { clearInterval(this.intervalId); }
|
|
33
|
-
}
|
|
34
|
-
const FakeProvider3 = new FakeProvider3Clazz();
|
|
35
|
-
export { FakeProvider3 };
|
|
36
|
-
|
|
37
|
-
class FakeProvider4Clazz extends Provider<UserPosition> {
|
|
38
|
-
fp3id?: number;
|
|
39
|
-
getName = () => 'FakeProvider4';
|
|
40
|
-
availability = () => FakeProvider3.getAvailability();
|
|
41
|
-
start() {
|
|
42
|
-
this.fp3id = FakeProvider3.addEventListener(this.notify, this.notifyError);
|
|
43
|
-
}
|
|
44
|
-
stop() {
|
|
45
|
-
FakeProvider3.removeEventListener(this.fp3id);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
const FakeProvider4 = new FakeProvider4Clazz();
|
|
49
|
-
export { FakeProvider4 };
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import chai from 'chai';
|
|
2
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
3
|
-
|
|
4
|
-
import Logger from '@wemap/logger';
|
|
5
|
-
|
|
6
|
-
import Provider from './Provider.js';
|
|
7
|
-
import ContainsIgnoredProviderError from '../errors/ContainsIgnoredProviderError.js';
|
|
8
|
-
import {
|
|
9
|
-
FakeProvider1, FakeProvider2, FakeProvider3, FakeProvider4
|
|
10
|
-
} from './FakeProvider.spec.js';
|
|
11
|
-
import ProvidersOptions from '../ProvidersOptions.js';
|
|
12
|
-
|
|
13
|
-
chai.use(chaiAsPromised);
|
|
14
|
-
Logger.enable(false);
|
|
15
|
-
|
|
16
|
-
const { expect } = chai;
|
|
17
|
-
|
|
18
|
-
const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
|
|
19
|
-
|
|
20
|
-
describe('Provider', () => {
|
|
21
|
-
|
|
22
|
-
it('default getter', () => {
|
|
23
|
-
const provider = FakeProvider1;
|
|
24
|
-
expect(provider.getName()).equals(FakeProvider1.getName());
|
|
25
|
-
expect(provider.useCameraNatively).is.false;
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('availability', async () => {
|
|
29
|
-
|
|
30
|
-
expect(FakeProvider1.getAvailability()).to.be.fulfilled;
|
|
31
|
-
ProvidersOptions.ignoreProviders.push(FakeProvider1.getName());
|
|
32
|
-
expect(await FakeProvider1.getAvailability()).is.instanceOf(ContainsIgnoredProviderError);
|
|
33
|
-
ProvidersOptions.ignoreProviders = [];
|
|
34
|
-
|
|
35
|
-
expect(await FakeProvider2.getAvailability()).is.instanceOf(Error);
|
|
36
|
-
|
|
37
|
-
expect(FakeProvider3.getAvailability()).to.be.fulfilled;
|
|
38
|
-
expect(FakeProvider4.getAvailability()).to.be.fulfilled;
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('checkAvailability on start', async () => {
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* checkAvailabilityOnStart = true
|
|
45
|
-
*/
|
|
46
|
-
let errored = false;
|
|
47
|
-
FakeProvider2.addEventListener(null, () => (errored = true));
|
|
48
|
-
|
|
49
|
-
await sleep(2);
|
|
50
|
-
|
|
51
|
-
expect(errored).is.true;
|
|
52
|
-
expect(FakeProvider2.state).equals('stopped');
|
|
53
|
-
expect(FakeProvider2._eventsCallbacks.length).equals(0);
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* checkAvailabilityOnStart = false
|
|
57
|
-
*/
|
|
58
|
-
ProvidersOptions.checkAvailabilityOnStart = false;
|
|
59
|
-
|
|
60
|
-
errored = false;
|
|
61
|
-
const id = FakeProvider2.addEventListener(null, () => (errored = true));
|
|
62
|
-
|
|
63
|
-
await sleep(2);
|
|
64
|
-
|
|
65
|
-
expect(errored).is.false;
|
|
66
|
-
expect(FakeProvider2.state).equals('started');
|
|
67
|
-
|
|
68
|
-
FakeProvider2.removeEventListener(id);
|
|
69
|
-
expect(FakeProvider2.state).equals('stopped');
|
|
70
|
-
expect(FakeProvider2._eventsCallbacks.length).equals(0);
|
|
71
|
-
|
|
72
|
-
ProvidersOptions.checkAvailabilityOnStart = true;
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
const startStop = <T>(provider: Provider<T>) => {
|
|
76
|
-
return new Promise<void>((resolve, reject) => {
|
|
77
|
-
let isStopped = false;
|
|
78
|
-
let fail = false;
|
|
79
|
-
|
|
80
|
-
const listenerId = provider.addEventListener(() => {
|
|
81
|
-
if (isStopped) {
|
|
82
|
-
fail = true;
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
setTimeout(() => {
|
|
87
|
-
isStopped = true;
|
|
88
|
-
provider.removeEventListener(listenerId);
|
|
89
|
-
|
|
90
|
-
setTimeout(() => {
|
|
91
|
-
if (fail) {
|
|
92
|
-
reject('Provider did not stop');
|
|
93
|
-
} else {
|
|
94
|
-
resolve();
|
|
95
|
-
}
|
|
96
|
-
}, 5);
|
|
97
|
-
}, 7);
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
it('start/stop', async () => {
|
|
103
|
-
let errored = false;
|
|
104
|
-
FakeProvider1.addEventListener(null, () => (errored = true));
|
|
105
|
-
await sleep(2);
|
|
106
|
-
expect(errored).is.true;
|
|
107
|
-
|
|
108
|
-
await expect(startStop(FakeProvider2)).to.be.fulfilled;
|
|
109
|
-
await expect(startStop(FakeProvider3)).to.be.fulfilled;
|
|
110
|
-
await expect(startStop(FakeProvider4)).to.be.fulfilled;
|
|
111
|
-
|
|
112
|
-
});
|
|
113
|
-
});
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import ProvidersLoggerOld from '../events/ProvidersLoggerOld.js';
|
|
2
|
-
import ContainsIgnoredProviderError from '../errors/ContainsIgnoredProviderError.js';
|
|
3
|
-
import ProvidersOptions from '../ProvidersOptions.js';
|
|
4
|
-
import { ProviderState } from './ProviderState.js';
|
|
5
|
-
import { AvailabilityPromise } from '../events/AvailabilityHelper.js';
|
|
6
|
-
import { NativeCallbackInterface, NativeInterface } from './NativeProviders.js';
|
|
7
|
-
|
|
8
|
-
declare global {
|
|
9
|
-
interface Window {
|
|
10
|
-
__nativeProviders?: NativeInterface;
|
|
11
|
-
__nativeJsProviders?: NativeCallbackInterface;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A provider is a meta class to define an entity which can be
|
|
17
|
-
* started / stopped and provides a data of <E>
|
|
18
|
-
*/
|
|
19
|
-
abstract class Provider<E> {
|
|
20
|
-
|
|
21
|
-
static _callbackUniqueId = 0;
|
|
22
|
-
static _uniqueId = 1;
|
|
23
|
-
|
|
24
|
-
id: number;
|
|
25
|
-
state: ProviderState = 'stopped';
|
|
26
|
-
|
|
27
|
-
_lastEvent: E | null = null;
|
|
28
|
-
|
|
29
|
-
_eventsCallbacks: {
|
|
30
|
-
id: number,
|
|
31
|
-
onEvent: ((event: E) => void) | null,
|
|
32
|
-
onError: ((error: Error) => void) | null,
|
|
33
|
-
optional: boolean
|
|
34
|
-
}[] = [];
|
|
35
|
-
|
|
36
|
-
_monitoringCallbacks: {
|
|
37
|
-
id: number,
|
|
38
|
-
onStarted: (() => void) | null,
|
|
39
|
-
onStopped: (() => void) | null
|
|
40
|
-
}[] = [];
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Provider constructor
|
|
44
|
-
*/
|
|
45
|
-
constructor() {
|
|
46
|
-
this.id = Provider._uniqueId++;
|
|
47
|
-
ProvidersLoggerOld.addEvent(this, 'constructor');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Get the provider name
|
|
52
|
-
*/
|
|
53
|
-
abstract getName(): string;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Resolve with an error if the provider is not available
|
|
58
|
-
*/
|
|
59
|
-
getAvailability() {
|
|
60
|
-
if (ProvidersOptions.ignoreProviders.includes(this.getName())) {
|
|
61
|
-
return Promise.resolve(new ContainsIgnoredProviderError());
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return this.availability();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
protected abstract availability(): AvailabilityPromise;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
protected get hasNativeInterface() {
|
|
71
|
-
return Boolean(this.nativeInterface);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
protected get nativeInterface() {
|
|
75
|
-
return typeof window !== 'undefined' && window.__nativeProviders as NativeInterface || null;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
protected get nativeJsInterface(): NativeCallbackInterface | null {
|
|
79
|
-
if (typeof window === 'undefined') {
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
if (!window.__nativeJsProviders) {
|
|
83
|
-
window.__nativeJsProviders = {};
|
|
84
|
-
}
|
|
85
|
-
return window.__nativeJsProviders;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
get useCameraNatively() {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
addEventListener(
|
|
95
|
-
onEvent: ((events: E) => void) | null = null,
|
|
96
|
-
onError: ((error: Error) => void) | null = null,
|
|
97
|
-
startIfNecessary = true
|
|
98
|
-
) {
|
|
99
|
-
const id = ++Provider._callbackUniqueId;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Build callback
|
|
103
|
-
*/
|
|
104
|
-
this._eventsCallbacks.push({
|
|
105
|
-
id,
|
|
106
|
-
onEvent: onEvent || (() => { /* do nothing */ }),
|
|
107
|
-
onError: onError || (() => { /* do nothing */ }),
|
|
108
|
-
optional: !startIfNecessary
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// The caller just want to have callbacks without starting the provider,
|
|
113
|
-
// the routine can be stopped here
|
|
114
|
-
if (!startIfNecessary) {
|
|
115
|
-
return id;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
// If the provider is already started do not go further
|
|
120
|
-
if (this.state !== 'stopped') {
|
|
121
|
-
return id;
|
|
122
|
-
}
|
|
123
|
-
this.state = 'starting';
|
|
124
|
-
|
|
125
|
-
// Check availability on start if defined in options
|
|
126
|
-
let availabilityPromise: AvailabilityPromise = Promise.resolve();
|
|
127
|
-
if (ProvidersOptions.checkAvailabilityOnStart) {
|
|
128
|
-
availabilityPromise = this.getAvailability();
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
(async () => {
|
|
132
|
-
const error = await availabilityPromise;
|
|
133
|
-
if (error) {
|
|
134
|
-
this.state = 'stopped';
|
|
135
|
-
this.notifyError(error);
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
ProvidersLoggerOld.addEvent(this, 'start');
|
|
140
|
-
|
|
141
|
-
// Call the child start function
|
|
142
|
-
this.start();
|
|
143
|
-
|
|
144
|
-
this.state = 'started';
|
|
145
|
-
|
|
146
|
-
this._monitoringCallbacks.forEach(cb => cb.onStarted?.());
|
|
147
|
-
})();
|
|
148
|
-
|
|
149
|
-
return id;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
removeEventListener(callbackUniqueId?: number) {
|
|
153
|
-
|
|
154
|
-
// Search the caller object in callbacks list
|
|
155
|
-
const callback = this._eventsCallbacks.find(_callback => _callback.id === callbackUniqueId);
|
|
156
|
-
if (!callback) {
|
|
157
|
-
// The callback object is not found. Maybe it is already stopped.
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Remove the current callback from the list of the callbacks
|
|
162
|
-
this._eventsCallbacks = this._eventsCallbacks.filter(_callback => _callback !== callback);
|
|
163
|
-
|
|
164
|
-
// If this callback was optional, do not go further to stop the provider
|
|
165
|
-
if (callback.optional) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// If there is callbacks that are not optionals for start, do not stop the provider
|
|
170
|
-
if (this._eventsCallbacks.find(_callback => !_callback.optional)) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// If the provider is already stopped, do not stop it again.
|
|
175
|
-
// This condition can be true if checkAvailabilityOnStart is true and returns an error
|
|
176
|
-
if (this.state === 'stopped') {
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
ProvidersLoggerOld.addEvent(this, 'stop');
|
|
181
|
-
// Call the child stop function
|
|
182
|
-
this.stop();
|
|
183
|
-
|
|
184
|
-
this.state = 'stopped';
|
|
185
|
-
|
|
186
|
-
this._monitoringCallbacks.forEach(cb => cb.onStopped?.());
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
addMonitoringListener(onStarted?: (() => void) | null, onStopped?: (() => void) | null) {
|
|
191
|
-
const id = Provider._callbackUniqueId++;
|
|
192
|
-
this._monitoringCallbacks.push({
|
|
193
|
-
id,
|
|
194
|
-
onStarted: onStarted || null,
|
|
195
|
-
onStopped: onStopped || null
|
|
196
|
-
});
|
|
197
|
-
return id;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
removeMonitoringListener(callbackUniqueId?: number) {
|
|
201
|
-
this._monitoringCallbacks = this._monitoringCallbacks.filter(
|
|
202
|
-
_callback => _callback.id !== callbackUniqueId
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
protected abstract start(): void
|
|
208
|
-
protected abstract stop(): void
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Notify the subscriber defined in {@link addEventListener}
|
|
213
|
-
*/
|
|
214
|
-
notify = (event: E) => {
|
|
215
|
-
// Logging
|
|
216
|
-
ProvidersLoggerOld.incrementNotifications(this);
|
|
217
|
-
|
|
218
|
-
// Notify callbacks
|
|
219
|
-
this._eventsCallbacks.forEach(cb => cb.onEvent?.(event));
|
|
220
|
-
|
|
221
|
-
// Keep a trace of the last events.
|
|
222
|
-
this._lastEvent = event;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Notify the subscriber defined in {@link addEventListener}
|
|
227
|
-
*/
|
|
228
|
-
notifyError = (error: Error) => {
|
|
229
|
-
this._eventsCallbacks.forEach(({
|
|
230
|
-
id, onError
|
|
231
|
-
}) => {
|
|
232
|
-
if (ProvidersOptions.stopOnError) {
|
|
233
|
-
this.removeEventListener(id);
|
|
234
|
-
}
|
|
235
|
-
onError?.(error);
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
get lastEvent() {
|
|
240
|
-
return this._lastEvent;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
export default Provider;
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import chai from 'chai';
|
|
2
|
-
|
|
3
|
-
import { Quaternion, Quaternion_t, Vector3_t } from '@wemap/maths';
|
|
4
|
-
|
|
5
|
-
import EkfAttitude from './EkfAttitude.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const expect = chai.expect;
|
|
9
|
-
|
|
10
|
-
const dt = [
|
|
11
|
-
0.02, 0.02, 0.02, 0.02, 0.02
|
|
12
|
-
];
|
|
13
|
-
const accData: Vector3_t[] = [
|
|
14
|
-
[-0.034561157, 3.81073, 8.860977],
|
|
15
|
-
[-0.030700684, 3.814499, 8.818954],
|
|
16
|
-
[-0.018234253, 3.8023376, 8.85762],
|
|
17
|
-
[-0.020080566, 3.8205414, 8.8676605],
|
|
18
|
-
[-0.054519653, 3.8456726, 8.810287]
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
const gyrData: Vector3_t[] = [
|
|
22
|
-
[0.0047454834, 0.0028076172, 0.0022888184],
|
|
23
|
-
[0.005218506, 0.0020446777, 0.0012207031],
|
|
24
|
-
[0.0044555664, 0.0023040771, 4.4250488E-4],
|
|
25
|
-
[0.0044555664, 0.0027618408, 0.0011444092],
|
|
26
|
-
[0.0040893555, 0.0020446777, 0.0025787354]
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
const magData: Vector3_t[] = [
|
|
30
|
-
[-7.260132, -29.21753, -30.532837],
|
|
31
|
-
[-8.378601, -29.589844, -29.684448],
|
|
32
|
-
[-8.784485, -29.97284, -29.86145],
|
|
33
|
-
[-8.784485, -30.06134, -30.036926],
|
|
34
|
-
[-8.917236, -29.666138, -28.616333]
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
const expectationsAbsolute: Quaternion_t[] = [
|
|
38
|
-
[0.22501367907095468, 0.048112975227173178, -0.19586497565981961, -0.95325279813673824],
|
|
39
|
-
[0.22521836492577899, 0.048187611771482071, -0.19604062637627487, -0.953164579168738],
|
|
40
|
-
[0.22546875479675244, 0.048146964451479861, -0.19603487950732199, -0.95310861733648156],
|
|
41
|
-
[0.22571872218138991, 0.04816067876157637, -0.19609909097002176, -0.95303554708035731],
|
|
42
|
-
[0.22598409746972753, 0.048415228863568645, -0.1963289784536566, -0.95291242279877153]
|
|
43
|
-
];
|
|
44
|
-
|
|
45
|
-
const expectationsRelative: Quaternion_t[] = [
|
|
46
|
-
[0.979449872594084, 0.201679452107589, 0.001829118097573, 0],
|
|
47
|
-
[0.979412310855378, 0.201861876976980, 0.001818648953412, 0.000022005516141],
|
|
48
|
-
[0.979416707676713, 0.201841237873455, 0.001739180982152, 0.000051642340567],
|
|
49
|
-
[0.979405268570585, 0.201897124314688, 0.001692389320913, 0.000083114532679],
|
|
50
|
-
[0.979351148979101, 0.202158360999907, 0.001821014027950, 0.000089325563504]
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
describe('initAbsolute', () => {
|
|
54
|
-
it('Should return the good value', () => {
|
|
55
|
-
const ekf = new EkfAttitude();
|
|
56
|
-
ekf.setAbsoluteNoises({
|
|
57
|
-
acc: 0.5,
|
|
58
|
-
gyr: 0.3,
|
|
59
|
-
yc: 2
|
|
60
|
-
});
|
|
61
|
-
const result = ekf.update(dt[0], accData[0], gyrData[0], magData[0]);
|
|
62
|
-
const distance = Quaternion.distance(result, expectationsAbsolute[0]);
|
|
63
|
-
expect(distance).to.below(0.000001);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
describe('updateAbsolute', () => {
|
|
68
|
-
it('Should return the good value', () => {
|
|
69
|
-
const ekf = new EkfAttitude();
|
|
70
|
-
ekf.setAbsoluteNoises({
|
|
71
|
-
acc: 0.5,
|
|
72
|
-
gyr: 0.3,
|
|
73
|
-
yc: 2
|
|
74
|
-
});
|
|
75
|
-
let result;
|
|
76
|
-
let distance;
|
|
77
|
-
|
|
78
|
-
for (let i = 0; i < accData.length; i++) {
|
|
79
|
-
result = ekf.update(dt[i], accData[i], gyrData[i], magData[i]);
|
|
80
|
-
distance = Quaternion.distance(result, expectationsAbsolute[i]);
|
|
81
|
-
expect(distance).to.below(0.000001);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
describe('initRelative', () => {
|
|
87
|
-
it('Should return the good value', () => {
|
|
88
|
-
const ekf = new EkfAttitude();
|
|
89
|
-
ekf.setRelativeNoises({
|
|
90
|
-
acc: 0.5,
|
|
91
|
-
gyr: 0.3
|
|
92
|
-
});
|
|
93
|
-
const result = ekf.update(dt[0], accData[0], gyrData[0]);
|
|
94
|
-
const distance = Quaternion.distance(result, expectationsRelative[0]);
|
|
95
|
-
expect(distance).to.below(0.000001);
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
describe('updateRelative', () => {
|
|
100
|
-
it('Should return the good value', () => {
|
|
101
|
-
const ekf = new EkfAttitude();
|
|
102
|
-
ekf.setRelativeNoises({
|
|
103
|
-
acc: 0.5,
|
|
104
|
-
gyr: 0.3
|
|
105
|
-
});
|
|
106
|
-
let result;
|
|
107
|
-
let distance;
|
|
108
|
-
|
|
109
|
-
for (let i = 0; i < accData.length; i++) {
|
|
110
|
-
result = ekf.update(dt[i], accData[i], gyrData[i]);
|
|
111
|
-
distance = Quaternion.distance(result, expectationsRelative[i]);
|
|
112
|
-
expect(distance).to.below(0.000001);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
});
|