@wemap/positioning 1.2.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 (51) hide show
  1. package/.eslintrc.json +479 -0
  2. package/.nvmrc +1 -0
  3. package/babel.config.js +11 -0
  4. package/config.json +7 -0
  5. package/debug/index.html +15 -0
  6. package/debug/index.old.html +37 -0
  7. package/package.json +82 -0
  8. package/scripts/release-github.js +216 -0
  9. package/src/Constants.js +11 -0
  10. package/src/NavigationHandler.js +244 -0
  11. package/src/Pose.js +8 -0
  12. package/src/attitude/Attitude.js +65 -0
  13. package/src/attitude/AttitudeHandler.js +343 -0
  14. package/src/attitude/EkfAttitude.js +238 -0
  15. package/src/attitude/EkfAttitude.spec.js +116 -0
  16. package/src/components/AbsoluteAttitude.jsx +136 -0
  17. package/src/components/Imu.jsx +89 -0
  18. package/src/components/LocationSource.jsx +434 -0
  19. package/src/components/Logger.jsx +113 -0
  20. package/src/components/NavigationDebugApp.jsx +106 -0
  21. package/src/components/Others.jsx +121 -0
  22. package/src/components/RelativeAttitude.jsx +104 -0
  23. package/src/components/Utils.js +35 -0
  24. package/src/components/index.js +13 -0
  25. package/src/index.js +9 -0
  26. package/src/providers/FixedLocationImuLocationSource.js +66 -0
  27. package/src/providers/GnssLocationSource.js +118 -0
  28. package/src/providers/GnssPdrLocationSource.js +182 -0
  29. package/src/providers/IPLocationSource.js +96 -0
  30. package/src/providers/LocationSource.js +290 -0
  31. package/src/providers/PdrLocationSource.js +312 -0
  32. package/src/providers/ProvidersLogger.js +77 -0
  33. package/src/providers/pdr/HeadingUnlocker.js +41 -0
  34. package/src/providers/pdr/HeadingUnlocker.spec.js +26 -0
  35. package/src/providers/pdr/Smoother.js +90 -0
  36. package/src/providers/pdr/Smoother.spec.js +424 -0
  37. package/src/providers/pdr/ThugDetector.js +37 -0
  38. package/src/providers/steps/StepDetection.js +7 -0
  39. package/src/providers/steps/StepDetectionLadetto.js +67 -0
  40. package/src/providers/steps/StepDetectionMinMaxPeaks.js +80 -0
  41. package/src/providers/steps/StepDetectionMinMaxPeaks2.js +108 -0
  42. package/src/sensors/SensorsCompatibility.js +484 -0
  43. package/src/sensors/SensorsCompatibility.spec.js +270 -0
  44. package/src/sensors/SensorsLogger.js +94 -0
  45. package/src/sensors/SensorsLoggerUtils.js +35 -0
  46. package/src.new/NavigationHandler.js +62 -0
  47. package/src.new/index.js +3 -0
  48. package/src.new/providers/FakeLocationSource.js +39 -0
  49. package/webpack/webpack.common.js +20 -0
  50. package/webpack/webpack.dev.js +24 -0
  51. package/webpack/webpack.prod.js +15 -0
@@ -0,0 +1,424 @@
1
+ import chai from 'chai';
2
+ import chaiAlmost from 'chai-almost';
3
+
4
+ import Smoother from './Smoother';
5
+ import {
6
+ WGS84, WGS84UserPosition
7
+ } from '@wemap/geo';
8
+
9
+ const expect = chai.expect;
10
+ chai.use(chaiAlmost());
11
+
12
+ const positions = [[0, 0, 0, 0],
13
+ [1.2, 4.4915764205976071E-6, 1.7966305682390469E-6, 0],
14
+ [1.6, 6.2882069888366455E-6, 4.4915764205976266E-6, 0],
15
+ [2.2, 8.084837557075667E-6, 8.0848375570757466E-6, 0],
16
+ [2.3, 3.5932611364778505E-5, 3.5932611364785566E-5, 1],
17
+ [2.7, 4.0424187785375816E-5, 3.5932611364786826E-5, 0],
18
+ [8.5, 4.042418778537667E-5, 2.9644404375949124E-5, 0],
19
+ [9, 3.7729241933018592E-5, 2.6051143239469885E-5, 0],
20
+ [10, 3.4135980796541678E-5, 8.9831528411962763E-6, 0]];
21
+
22
+ const expectations = [
23
+ [0, 0, 0],
24
+ [1.2, 7.4775840697754848E-8, 2.9910336279101931E-8],
25
+ [1.2166666666666666, 1.495516813955097E-7, 5.9820672558203862E-8],
26
+ [1.2333333333333334, 2.2432752209326456E-7, 8.9731008837305807E-8],
27
+ [1.25, 2.9910336279101939E-7, 1.1964134511640772E-7],
28
+ [1.2666666666666666, 3.7387920348877425E-7, 1.4955168139550964E-7],
29
+ [1.2833333333333332, 4.4865504418652911E-7, 1.7946201767461161E-7],
30
+ [1.3, 5.23430884884284E-7, 2.0937235395371356E-7],
31
+ [1.3166666666666667, 5.9820672558203878E-7, 2.392826902328155E-7],
32
+ [1.3333333333333333, 6.7298256627979364E-7, 2.6919302651191745E-7],
33
+ [1.3499999999999999, 7.477584069775485E-7, 2.9910336279101934E-7],
34
+ [1.3666666666666667, 8.2253424767530315E-7, 3.2901369907012123E-7],
35
+ [1.3833333333333333, 8.9731008837305823E-7, 3.5892403534922328E-7],
36
+ [1.4, 9.72085929070813E-7, 3.8883437162832528E-7],
37
+ [1.4166666666666665, 1.0468617697685681E-6, 4.1874470790742717E-7],
38
+ [1.4333333333333333, 1.1216376104663228E-6, 4.4865504418652911E-7],
39
+ [1.45, 1.1964134511640774E-6, 4.785653804656309E-7],
40
+ [1.4666666666666666, 1.2711892918618325E-6, 5.08475716744733E-7],
41
+ [1.4833333333333334, 1.3459651325595873E-6, 5.3838605302383489E-7],
42
+ [1.5, 1.4207409732573425E-6, 5.6829638930293684E-7],
43
+ [1.5166666666666666, 1.495516813955097E-6, 5.9820672558203889E-7],
44
+ [1.5333333333333332, 1.5702926546528518E-6, 6.2811706186114073E-7],
45
+ [1.5499999999999998, 1.6450684953506063E-6, 6.5802739814024267E-7],
46
+ [1.5666666666666667, 1.7198443360483617E-6, 6.8793773441934483E-7],
47
+ [1.5833333333333333, 1.7946201767461169E-6, 7.1784807069844656E-7],
48
+ [1.6, 1.8693960174438714E-6, 7.4775840697754872E-7],
49
+ [1.6166666666666667, 1.9441718581416262E-6, 7.7766874325665055E-7],
50
+ [1.6333333333333333, 2.0189476988393807E-6, 8.075790795357525E-7],
51
+ [1.65, 2.0937235395371357E-6, 8.3748941581485455E-7],
52
+ [1.6666666666666665, 2.1684993802348902E-6, 8.673997520939566E-7],
53
+ [1.6833333333333333, 2.2432752209326456E-6, 8.9731008837305844E-7],
54
+ [1.7, 2.318051061630401E-6, 9.2722042465216059E-7],
55
+ [1.7166666666666668, 2.3928269023281551E-6, 9.5713076093126243E-7],
56
+ [1.7333333333333334, 2.46760274302591E-6, 9.8704109721036438E-7],
57
+ [1.75, 2.5423785837236642E-6, 1.0169514334894661E-6],
58
+ [1.7666666666666666, 2.6171544244214196E-6, 1.0468617697685685E-6],
59
+ [1.7833333333333332, 2.6919302651191746E-6, 1.0767721060476704E-6],
60
+ [1.7999999999999998, 2.7667061058169291E-6, 1.1066824423267722E-6],
61
+ [1.8166666666666667, 2.8414819465146841E-6, 1.1365927786058745E-6],
62
+ [1.8333333333333333, 2.916257787212439E-6, 1.1665031148849767E-6],
63
+ [1.85, 2.991033627910194E-6, 1.1964134511640782E-6],
64
+ [1.8666666666666667, 3.065809468607949E-6, 1.2263237874431804E-6],
65
+ [1.8833333333333333, 3.1405853093057035E-6, 1.2562341237222825E-6],
66
+ [1.9, 3.2153611500034581E-6, 1.2861444600013845E-6],
67
+ [1.9166666666666665, 3.2901369907012126E-6, 1.3160547962804864E-6],
68
+ [1.9333333333333331, 3.364912831398968E-6, 1.3459651325595886E-6],
69
+ [1.95, 3.4396886720967234E-6, 1.3758754688386907E-6],
70
+ [1.9666666666666668, 3.5144645127944775E-6, 1.4057858051177924E-6],
71
+ [1.9833333333333334, 3.5892403534922329E-6, 1.4356961413968948E-6],
72
+ [2, 3.6640161941899874E-6, 1.4656064776759965E-6],
73
+ [2.0166666666666666, 3.7387920348877424E-6, 1.4955168139550989E-6],
74
+ [2.0333333333333332, 3.8135678755854974E-6, 1.5254271502342006E-6],
75
+ [2.05, 3.8883437162832523E-6, 1.555337486513303E-6],
76
+ [2.0666666666666664, 3.9631195569810069E-6, 1.585247822792405E-6],
77
+ [2.083333333333333, 4.0378953976787606E-6, 1.6151581590715067E-6],
78
+ [2.1, 4.1126712383765168E-6, 1.6450684953506091E-6],
79
+ [2.1166666666666667, 4.1874470790742722E-6, 1.6749788316297112E-6],
80
+ [2.1333333333333333, 4.2622229197720259E-6, 1.7048891679088132E-6],
81
+ [2.15, 4.3369987604697805E-6, 1.7347995041879153E-6],
82
+ [2.1666666666666665, 4.411774601167535E-6, 1.7647098404670175E-6],
83
+ [2.1833333333333331, 4.48655044186529E-6, 1.7946201767461194E-6],
84
+ [2.1833333333333331, 4.5663522612953616E-6, 1.9087943292856796E-6],
85
+ [2.1999999999999997, 4.6411281019931179E-6, 2.0209580903323118E-6],
86
+ [2.2166666666666663, 4.7159039426908716E-6, 2.1331218513789445E-6],
87
+ [2.2333333333333329, 4.7906797833886261E-6, 2.2452856124255771E-6],
88
+ [2.25, 4.8654556240863815E-6, 2.3574493734722098E-6],
89
+ [2.2666666666666666, 4.940231464784136E-6, 2.4696131345188424E-6],
90
+ [2.2833333333333332, 5.0150073054818906E-6, 2.5817768955654751E-6],
91
+ [2.3, 5.089783146179646E-6, 2.6939406566121078E-6],
92
+ [2.3166666666666664, 5.1645589868774E-6, 2.8061044176587404E-6],
93
+ [2.333333333333333, 5.2393348275751551E-6, 2.9182681787053731E-6],
94
+ [2.3499999999999996, 5.31411066827291E-6, 3.0304319397520062E-6],
95
+ [2.3666666666666663, 5.3888865089706633E-6, 3.1425957007986388E-6],
96
+ [2.3833333333333333, 5.4636623496684178E-6, 3.2547594618452715E-6],
97
+ [2.4, 5.5384381903661732E-6, 3.366923222891905E-6],
98
+ [2.4166666666666665, 5.6132140310639278E-6, 3.4790869839385372E-6],
99
+ [2.4333333333333331, 5.6879898717616823E-6, 3.5912507449851695E-6],
100
+ [2.4499999999999997, 5.7627657124594377E-6, 3.703414506031803E-6],
101
+ [2.4666666666666663, 5.8375415531571922E-6, 3.8155782670784357E-6],
102
+ [2.4833333333333329, 5.9123173938549468E-6, 3.92774202812507E-6],
103
+ [2.5, 5.9870932345527E-6, 4.0399057891717018E-6],
104
+ [2.5166666666666666, 6.0618690752504559E-6, 4.1520695502183366E-6],
105
+ [2.5333333333333332, 6.1366449159482087E-6, 4.2642333112649688E-6],
106
+ [2.55, 6.2114207566459633E-6, 4.3763970723116019E-6],
107
+ [2.5666666666666664, 6.2861965973437187E-6, 4.4885608333582342E-6],
108
+ [2.5666666666666664, 6.2861965973437195E-6, 4.4885608333582359E-6],
109
+ [2.5666666666666664, 6.3380575493018143E-6, 4.5912775415279676E-6],
110
+ [2.583333333333333, 6.3879081097669849E-6, 4.6909786624583079E-6],
111
+ [2.5999999999999996, 6.4377586702321546E-6, 4.7906797833886481E-6],
112
+ [2.6166666666666663, 6.4876092306973243E-6, 4.8903809043189884E-6],
113
+ [2.6333333333333333, 6.537459791162494E-6, 4.9900820252493286E-6],
114
+ [2.65, 6.5873103516276628E-6, 5.0897831461796688E-6],
115
+ [2.6666666666666665, 6.6371609120928325E-6, 5.18948426711001E-6],
116
+ [2.6833333333333331, 6.6870114725580014E-6, 5.28918538804035E-6],
117
+ [2.6999999999999997, 6.7368620330231711E-6, 5.38888650897069E-6],
118
+ [2.7166666666666663, 6.7867125934883408E-6, 5.4885876299010306E-6],
119
+ [2.7333333333333329, 6.8365631539535113E-6, 5.5882887508313717E-6],
120
+ [2.7499999999999996, 6.88641371441868E-6, 5.687989871761712E-6],
121
+ [2.7666666666666666, 6.936264274883849E-6, 5.787690992692053E-6],
122
+ [2.7833333333333332, 6.9861148353490179E-6, 5.8873921136223941E-6],
123
+ [2.8, 7.0359653958141892E-6, 5.9870932345527335E-6],
124
+ [2.8166666666666664, 7.0858159562793581E-6, 6.0867943554830746E-6],
125
+ [2.833333333333333, 7.1356665167445269E-6, 6.1864954764134148E-6],
126
+ [2.8499999999999996, 7.1855170772096941E-6, 6.2861965973437559E-6],
127
+ [2.8666666666666663, 7.2353676376748663E-6, 6.385897718274097E-6],
128
+ [2.8833333333333329, 7.2852181981400352E-6, 6.4855988392044381E-6],
129
+ [2.9, 7.3350687586052032E-6, 6.58529996013478E-6],
130
+ [2.9166666666666665, 7.384919319070372E-6, 6.6850010810651186E-6],
131
+ [2.9333333333333331, 7.4347698795355426E-6, 6.78470220199546E-6],
132
+ [2.9499999999999997, 7.4846204400007123E-6, 6.8844033229258E-6],
133
+ [2.9666666666666663, 7.5344710004658794E-6, 6.9841044438561427E-6],
134
+ [2.9833333333333329, 7.58432156093105E-6, 7.0838055647864838E-6],
135
+ [3, 7.6341721213962188E-6, 7.1835066857168232E-6],
136
+ [3.0166666666666666, 7.6840226818613885E-6, 7.2832078066471642E-6],
137
+ [3.0333333333333332, 7.7338732423265548E-6, 7.3829089275775045E-6],
138
+ [3.05, 7.7837238027917262E-6, 7.4826100485078464E-6],
139
+ [3.0666666666666664, 7.8335743632568959E-6, 7.5823111694381866E-6],
140
+ [3.083333333333333, 7.8834249237220639E-6, 7.6820122903685286E-6],
141
+ [3.0999999999999996, 7.9332754841872336E-6, 7.78171341129887E-6],
142
+ [3.1166666666666663, 7.9831260446524016E-6, 7.88141453222921E-6],
143
+ [3.1333333333333329, 8.03297660511757E-6, 7.98111565315955E-6],
144
+ [3.15, 8.082827165582741E-6, 8.0808167740898946E-6],
145
+ [3.15, 8.082827165582741E-6, 8.0808167740898946E-6],
146
+ [3.15, 8.5484477694017419E-6, 8.5484477694018368E-6],
147
+ [3.1666666666666665, 9.0120579817278186E-6, 9.012057981727927E-6],
148
+ [3.1833333333333331, 9.4756681940538918E-6, 9.4756681940540189E-6],
149
+ [3.1999999999999997, 9.9392784063799668E-6, 9.9392784063801125E-6],
150
+ [3.2166666666666668, 1.0402888618706038E-5, 1.0402888618706206E-5],
151
+ [3.2333333333333334, 1.0866498831032112E-5, 1.0866498831032303E-5],
152
+ [3.25, 1.1330109043358183E-5, 1.13301090433584E-5],
153
+ [3.2666666666666666, 1.1793719255684253E-5, 1.1793719255684499E-5],
154
+ [3.2833333333333332, 1.2257329468010321E-5, 1.2257329468010597E-5],
155
+ [3.3, 1.2720939680336391E-5, 1.2720939680336701E-5],
156
+ [3.3166666666666664, 1.3184549892662456E-5, 1.3184549892662803E-5],
157
+ [3.333333333333333, 1.3648160104988527E-5, 1.3648160104988912E-5],
158
+ [3.35, 1.4111770317314592E-5, 1.4111770317315017E-5],
159
+ [3.3666666666666667, 1.4575380529640657E-5, 1.4575380529641123E-5],
160
+ [3.3833333333333333, 1.5038990741966722E-5, 1.5038990741967235E-5],
161
+ [3.4, 1.5502600954292787E-5, 1.5502600954293349E-5],
162
+ [3.4166666666666665, 1.5966211166618851E-5, 1.5966211166619465E-5],
163
+ [3.4333333333333331, 1.6429821378944909E-5, 1.642982137894558E-5],
164
+ [3.4499999999999997, 1.6893431591270971E-5, 1.68934315912717E-5],
165
+ [3.4666666666666668, 1.7357041803597029E-5, 1.7357041803597825E-5],
166
+ [3.4833333333333334, 1.782065201592309E-5, 1.7820652015923944E-5],
167
+ [3.5, 1.8284262228249145E-5, 1.8284262228250073E-5],
168
+ [3.5166666666666666, 1.87478724405752E-5, 1.87478724405762E-5],
169
+ [3.5333333333333332, 1.9211482652901257E-5, 1.9211482652902331E-5],
170
+ [3.55, 1.9675092865227305E-5, 1.9675092865228467E-5],
171
+ [3.5666666666666664, 2.0138703077553363E-5, 2.01387030775546E-5],
172
+ [3.583333333333333, 2.0602313289879414E-5, 2.0602313289880743E-5],
173
+ [3.6, 2.1065923502205462E-5, 2.1065923502206879E-5],
174
+ [3.6166666666666667, 2.152953371453151E-5, 2.1529533714533025E-5],
175
+ [3.6333333333333333, 2.1993143926857558E-5, 2.1993143926859171E-5],
176
+ [3.65, 2.2456754139183602E-5, 2.2456754139185324E-5],
177
+ [3.6666666666666665, 2.2920364351509644E-5, 2.292036435151147E-5],
178
+ [3.6833333333333331, 2.3383974563835688E-5, 2.3383974563837629E-5],
179
+ [3.7, 2.3847584776161732E-5, 2.3847584776163789E-5],
180
+ [3.7166666666666668, 2.431119498848777E-5, 2.4311194988489949E-5],
181
+ [3.7333333333333334, 2.4774805200813804E-5, 2.4774805200816112E-5],
182
+ [3.75, 2.5238415413139846E-5, 2.5238415413142282E-5],
183
+ [3.7666666666666666, 2.5702025625465876E-5, 2.5702025625468451E-5],
184
+ [3.7833333333333332, 2.6165635837791911E-5, 2.6165635837794625E-5],
185
+ [3.8, 2.6629246050117942E-5, 2.6629246050120808E-5],
186
+ [3.8166666666666664, 2.7092856262443973E-5, 2.7092856262446991E-5],
187
+ [3.833333333333333, 2.7556466474769997E-5, 2.7556466474773175E-5],
188
+ [3.8499999999999996, 2.8020076687096024E-5, 2.8020076687099358E-5],
189
+ [3.8666666666666667, 2.8483686899422038E-5, 2.8483686899425552E-5],
190
+ [3.8833333333333333, 2.8947297111748066E-5, 2.8947297111751752E-5],
191
+ [3.9, 2.941090732407408E-5, 2.9410907324077949E-5],
192
+ [3.9166666666666665, 2.9874517536400104E-5, 2.9874517536404153E-5],
193
+ [3.9333333333333331, 3.0338127748726121E-5, 3.033812774873037E-5],
194
+ [3.95, 3.0801737961052142E-5, 3.0801737961056574E-5],
195
+ [3.9666666666666668, 3.1265348173378149E-5, 3.1265348173382791E-5],
196
+ [3.9833333333333334, 3.1728958385704149E-5, 3.1728958385709008E-5],
197
+ [4, 3.2192568598030163E-5, 3.2192568598035239E-5],
198
+ [4.0166666666666666, 3.2656178810356164E-5, 3.2656178810361463E-5],
199
+ [4.0333333333333332, 3.3119789022682178E-5, 3.31197890226877E-5],
200
+ [4.05, 3.3583399235008171E-5, 3.3583399235013931E-5],
201
+ [4.0666666666666664, 3.4047009447334179E-5, 3.4047009447340169E-5],
202
+ [4.083333333333333, 3.4510619659660172E-5, 3.451061965966642E-5],
203
+ [4.1, 3.4974229871986166E-5, 3.4974229871992671E-5],
204
+ [4.1166666666666663, 3.5437840084312159E-5, 3.5437840084318929E-5],
205
+ [4.1333333333333329, 3.5901450296638146E-5, 3.5901450296645187E-5],
206
+ [4.1333333333333329, 3.6119550966522884E-5, 3.5932611364785614E-5],
207
+ [4.1499999999999995, 3.6306490568267264E-5, 3.5932611364785668E-5],
208
+ [4.1666666666666661, 3.6493430170011636E-5, 3.5932611364785722E-5],
209
+ [4.1833333333333327, 3.6680369771756008E-5, 3.5932611364785776E-5],
210
+ [4.1999999999999993, 3.6867309373500381E-5, 3.5932611364785824E-5],
211
+ [4.2166666666666659, 3.705424897524476E-5, 3.5932611364785878E-5],
212
+ [4.2333333333333325, 3.7241188576989132E-5, 3.5932611364785939E-5],
213
+ [4.2499999999999991, 3.7428128178733511E-5, 3.5932611364785986E-5],
214
+ [4.2666666666666666, 3.7615067780477877E-5, 3.5932611364786034E-5],
215
+ [4.2833333333333332, 3.7802007382222256E-5, 3.5932611364786088E-5],
216
+ [4.3, 3.7988946983966629E-5, 3.5932611364786135E-5],
217
+ [4.3166666666666664, 3.8175886585711008E-5, 3.5932611364786196E-5],
218
+ [4.333333333333333, 3.8362826187455387E-5, 3.5932611364786244E-5],
219
+ [4.35, 3.8549765789199752E-5, 3.59326113647863E-5],
220
+ [4.3666666666666663, 3.8736705390944125E-5, 3.5932611364786352E-5],
221
+ [4.3833333333333329, 3.8923644992688504E-5, 3.59326113647864E-5],
222
+ [4.3999999999999995, 3.9110584594432876E-5, 3.5932611364786461E-5],
223
+ [4.4166666666666661, 3.9297524196177242E-5, 3.5932611364786508E-5],
224
+ [4.4333333333333327, 3.9484463797921628E-5, 3.5932611364786555E-5],
225
+ [4.4499999999999993, 3.9671403399666014E-5, 3.593261136478661E-5],
226
+ [4.4666666666666659, 3.9858343001410379E-5, 3.5932611364786671E-5],
227
+ [4.4833333333333325, 4.0045282603154752E-5, 3.5932611364786718E-5],
228
+ [4.4999999999999991, 4.0232222204899124E-5, 3.5932611364786772E-5],
229
+ [4.5166666666666666, 4.0419161806643503E-5, 3.5932611364786826E-5],
230
+ [4.5166666666666666, 4.041916180664351E-5, 3.5932611364786826E-5],
231
+ [8.5, 4.0424187785375829E-5, 3.582792518780995E-5],
232
+ [8.5166666666666675, 4.042418778537585E-5, 3.5723239010833081E-5],
233
+ [8.5333333333333332, 4.0424187785375863E-5, 3.56185528338562E-5],
234
+ [8.55, 4.0424187785375884E-5, 3.5513866656879329E-5],
235
+ [8.5666666666666664, 4.04241877853759E-5, 3.5409180479902452E-5],
236
+ [8.5833333333333339, 4.0424187785375918E-5, 3.5304494302925583E-5],
237
+ [8.6, 4.0424187785375931E-5, 3.5199808125948707E-5],
238
+ [8.6166666666666671, 4.0424187785375951E-5, 3.5095121948971831E-5],
239
+ [8.6333333333333329, 4.0424187785375972E-5, 3.4990435771994961E-5],
240
+ [8.65, 4.0424187785375985E-5, 3.4885749595018085E-5],
241
+ [8.6666666666666661, 4.0424187785376006E-5, 3.4781063418041216E-5],
242
+ [8.6833333333333336, 4.0424187785376019E-5, 3.4676377241064333E-5],
243
+ [8.7, 4.0424187785376039E-5, 3.4571691064087456E-5],
244
+ [8.7166666666666668, 4.0424187785376053E-5, 3.4467004887110587E-5],
245
+ [8.7333333333333325, 4.0424187785376073E-5, 3.4362318710133711E-5],
246
+ [8.75, 4.042418778537608E-5, 3.4257632533156835E-5],
247
+ [8.7666666666666675, 4.04241877853761E-5, 3.4152946356179965E-5],
248
+ [8.7833333333333332, 4.0424187785376114E-5, 3.4048260179203089E-5],
249
+ [8.8, 4.0424187785376134E-5, 3.394357400222622E-5],
250
+ [8.8166666666666664, 4.0424187785376148E-5, 3.3838887825249344E-5],
251
+ [8.8333333333333339, 4.0424187785376161E-5, 3.3734201648272461E-5],
252
+ [8.85, 4.0424187785376182E-5, 3.3629515471295591E-5],
253
+ [8.8666666666666671, 4.0424187785376195E-5, 3.3524829294318715E-5],
254
+ [8.8833333333333329, 4.04241877853762E-5, 3.3420143117341846E-5],
255
+ [8.9, 4.0424187785376216E-5, 3.3315456940364969E-5],
256
+ [8.9166666666666661, 4.0424187785376243E-5, 3.3210770763388093E-5],
257
+ [8.9333333333333336, 4.0424187785376256E-5, 3.3106084586411224E-5],
258
+ [8.95, 4.0424187785376263E-5, 3.3001398409434348E-5],
259
+ [8.9666666666666668, 4.0424187785376277E-5, 3.2896712232457465E-5],
260
+ [8.9833333333333325, 4.04241877853763E-5, 3.2792026055480595E-5],
261
+ [9, 4.0424187785376311E-5, 3.2687339878503719E-5],
262
+ [9.0166666666666675, 4.0424187785376324E-5, 3.258265370152685E-5],
263
+ [9.0333333333333332, 4.0424187785376338E-5, 3.2477967524549974E-5],
264
+ [9.05, 4.0424187785376351E-5, 3.23732813475731E-5],
265
+ [9.0666666666666664, 4.0424187785376365E-5, 3.2268595170596221E-5],
266
+ [9.0833333333333339, 4.0424187785376385E-5, 3.2163908993619352E-5],
267
+ [9.1, 4.0424187785376385E-5, 3.2059222816642476E-5],
268
+ [9.1166666666666671, 4.0424187785376412E-5, 3.1954536639665606E-5],
269
+ [9.1333333333333329, 4.0424187785376419E-5, 3.184985046268873E-5],
270
+ [9.15, 4.0424187785376426E-5, 3.1745164285711854E-5],
271
+ [9.1666666666666661, 4.0424187785376453E-5, 3.1640478108734984E-5],
272
+ [9.1833333333333336, 4.0424187785376453E-5, 3.15357919317581E-5],
273
+ [9.2, 4.0424187785376466E-5, 3.1431105754781225E-5],
274
+ [9.2166666666666668, 4.0424187785376487E-5, 3.1326419577804356E-5],
275
+ [9.2333333333333325, 4.0424187785376493E-5, 3.122173340082748E-5],
276
+ [9.25, 4.0424187785376507E-5, 3.111704722385061E-5],
277
+ [9.2666666666666675, 4.0424187785376521E-5, 3.1012361046873734E-5],
278
+ [9.2833333333333332, 4.0424187785376527E-5, 3.0907674869896858E-5],
279
+ [9.3, 4.0424187785376541E-5, 3.0802988692919988E-5],
280
+ [9.3166666666666664, 4.0424187785376548E-5, 3.0698302515943112E-5],
281
+ [9.3333333333333339, 4.0424187785376561E-5, 3.0593616338966243E-5],
282
+ [9.35, 4.0424187785376575E-5, 3.048893016198936E-5],
283
+ [9.3666666666666671, 4.0424187785376588E-5, 3.0384243985012487E-5],
284
+ [9.3833333333333329, 4.0424187785376588E-5, 3.0279557808035614E-5],
285
+ [9.4, 4.0424187785376615E-5, 3.0174871631058742E-5],
286
+ [9.4166666666666661, 4.0424187785376615E-5, 3.0070185454081862E-5],
287
+ [9.4333333333333336, 4.0424187785376636E-5, 2.9965499277104989E-5],
288
+ [9.45, 4.0424187785376636E-5, 2.9860813100128116E-5],
289
+ [9.4666666666666668, 4.0424187785376649E-5, 2.9756126923151244E-5],
290
+ [9.4833333333333325, 4.0424187785376656E-5, 2.9651440746174371E-5],
291
+ [9.4833333333333325, 4.033445677653938E-5, 2.9524763030832678E-5],
292
+ [9.5, 4.02447257677021E-5, 2.9405121685716222E-5],
293
+ [9.5166666666666657, 4.01549947588648E-5, 2.9285480340599776E-5],
294
+ [9.5333333333333332, 4.0065263750027518E-5, 2.9165838995483323E-5],
295
+ [9.5499999999999989, 3.9975532741190229E-5, 2.9046197650366877E-5],
296
+ [9.5666666666666664, 3.9885801732352939E-5, 2.8926556305250432E-5],
297
+ [9.5833333333333321, 3.979607072351565E-5, 2.8806914960133976E-5],
298
+ [9.6, 3.9706339714678367E-5, 2.8687273615017526E-5],
299
+ [9.6166666666666654, 3.9616608705841077E-5, 2.856763226990108E-5],
300
+ [9.6333333333333329, 3.9526877697003795E-5, 2.8447990924784634E-5],
301
+ [9.6499999999999986, 3.9437146688166492E-5, 2.8328349579668185E-5],
302
+ [9.6666666666666661, 3.9347415679329216E-5, 2.8208708234551739E-5],
303
+ [9.6833333333333318, 3.9257684670491919E-5, 2.8089066889435293E-5],
304
+ [9.7, 3.9167953661654637E-5, 2.7969425544318844E-5],
305
+ [9.716666666666665, 3.907822265281734E-5, 2.7849784199202398E-5],
306
+ [9.7333333333333325, 3.8988491643980051E-5, 2.7730142854085952E-5],
307
+ [9.75, 3.8898760635142761E-5, 2.7610501508969503E-5],
308
+ [9.7666666666666657, 3.8809029626305472E-5, 2.7490860163853067E-5],
309
+ [9.7833333333333332, 3.8719298617468189E-5, 2.7371218818736618E-5],
310
+ [9.7999999999999989, 3.8629567608630893E-5, 2.7251577473620176E-5],
311
+ [9.8166666666666664, 3.85398365997936E-5, 2.713193612850373E-5],
312
+ [9.8333333333333321, 3.8450105590956314E-5, 2.7012294783387284E-5],
313
+ [9.85, 3.8360374582119017E-5, 2.6892653438270841E-5],
314
+ [9.8666666666666654, 3.8270643573281728E-5, 2.6773012093154395E-5],
315
+ [9.8833333333333329, 3.8180912564444445E-5, 2.6653370748037949E-5],
316
+ [9.8999999999999986, 3.8091181555607149E-5, 2.6533729402921507E-5],
317
+ [9.9166666666666661, 3.8001450546769859E-5, 2.6414088057805064E-5],
318
+ [9.9333333333333318, 3.7911719537932563E-5, 2.6294446712688622E-5],
319
+ [9.95, 3.782198852909528E-5, 2.6174805367572179E-5],
320
+ [9.966666666666665, 3.7732257520257977E-5, 2.6055164022455737E-5],
321
+ [10, 3.7669421260460435E-5, 2.5766995044818355E-5],
322
+ [10.016666666666667, 3.7609600587902279E-5, 2.5482846850166836E-5],
323
+ [10.033333333333333, 3.7549779915344115E-5, 2.5198698655515309E-5],
324
+ [10.05, 3.7489959242785958E-5, 2.491455046086379E-5],
325
+ [10.066666666666666, 3.7430138570227794E-5, 2.4630402266212263E-5],
326
+ [10.083333333333334, 3.7370317897669631E-5, 2.434625407156074E-5],
327
+ [10.1, 3.7310497225111474E-5, 2.4062105876909217E-5],
328
+ [10.116666666666667, 3.725067655255331E-5, 2.3777957682257698E-5],
329
+ [10.133333333333333, 3.7190855879995147E-5, 2.3493809487606178E-5],
330
+ [10.15, 3.7131035207436969E-5, 2.3209661292954655E-5],
331
+ [10.166666666666666, 3.7071214534878806E-5, 2.2925513098303135E-5],
332
+ [10.183333333333334, 3.7011393862320635E-5, 2.2641364903651616E-5],
333
+ [10.2, 3.6951573189762465E-5, 2.2357216709000096E-5],
334
+ [10.216666666666667, 3.68917525172043E-5, 2.207306851434857E-5],
335
+ [10.233333333333333, 3.6831931844646131E-5, 2.1788920319697057E-5],
336
+ [10.25, 3.677211117208796E-5, 2.1504772125045537E-5],
337
+ [10.266666666666667, 3.671229049952979E-5, 2.1220623930394021E-5],
338
+ [10.283333333333333, 3.6652469826971613E-5, 2.09364757357425E-5],
339
+ [10.3, 3.6592649154413435E-5, 2.0652327541090982E-5],
340
+ [10.316666666666666, 3.6532828481855265E-5, 2.0368179346439466E-5],
341
+ [10.333333333333334, 3.6473007809297088E-5, 2.0084031151787949E-5],
342
+ [10.35, 3.6413187136738904E-5, 1.979988295713643E-5],
343
+ [10.366666666666667, 3.6353366464180733E-5, 1.9515734762484917E-5],
344
+ [10.383333333333333, 3.6293545791622549E-5, 1.9231586567833397E-5],
345
+ [10.4, 3.6233725119064372E-5, 1.8947438373181884E-5],
346
+ [10.416666666666666, 3.6173904446506188E-5, 1.8663290178530365E-5],
347
+ [10.433333333333334, 3.6114083773948011E-5, 1.8379141983878855E-5],
348
+ [10.45, 3.6054263101389827E-5, 1.8094993789227339E-5],
349
+ [10.466666666666667, 3.599444242883165E-5, 1.7810845594575826E-5],
350
+ [10.483333333333333, 3.5934621756273459E-5, 1.7526697399924314E-5],
351
+ [10.5, 3.5874801083715275E-5, 1.72425492052728E-5],
352
+ [10.516666666666667, 3.5814980411157091E-5, 1.6958401010621288E-5],
353
+ [10.533333333333333, 3.5755159738598907E-5, 1.6674252815969775E-5],
354
+ [10.55, 3.5695339066040716E-5, 1.6390104621318262E-5],
355
+ [10.566666666666666, 3.5635518393482532E-5, 1.6105956426666749E-5],
356
+ [10.583333333333334, 3.5575697720924335E-5, 1.582180823201524E-5],
357
+ [10.6, 3.5515877048366151E-5, 1.553766003736373E-5],
358
+ [10.616666666666667, 3.5456056375807967E-5, 1.5253511842712221E-5],
359
+ [10.633333333333333, 3.5396235703249763E-5, 1.496936364806071E-5],
360
+ [10.65, 3.5336415030691572E-5, 1.4685215453409197E-5],
361
+ [10.666666666666666, 3.5276594358133374E-5, 1.4401067258757691E-5],
362
+ [10.683333333333334, 3.5216773685575183E-5, 1.411691906410618E-5],
363
+ [10.7, 3.5156953013016986E-5, 1.3832770869454672E-5],
364
+ [10.716666666666667, 3.5097132340458788E-5, 1.3548622674803166E-5],
365
+ [10.733333333333333, 3.5037311667900591E-5, 1.3264474480151657E-5],
366
+ [10.75, 3.49774909953424E-5, 1.2980326285500149E-5],
367
+ [10.766666666666667, 3.4917670322784196E-5, 1.2696178090848638E-5],
368
+ [10.783333333333333, 3.4857849650225991E-5, 1.2412029896197132E-5],
369
+ [10.8, 3.4798028977667794E-5, 1.2127881701545627E-5],
370
+ [10.816666666666666, 3.4738208305109596E-5, 1.1843733506894125E-5],
371
+ [10.833333333333334, 3.4678387632551392E-5, 1.1559585312242615E-5],
372
+ [10.85, 3.4618566959993181E-5, 1.1275437117591106E-5],
373
+ [10.866666666666667, 3.4558746287434983E-5, 1.0991288922939605E-5],
374
+ [10.883333333333333, 3.4498925614876779E-5, 1.0707140728288104E-5],
375
+ [10.9, 3.4439104942318575E-5, 1.0422992533636598E-5],
376
+ [10.916666666666666, 3.4379284269760364E-5, 1.013884433898509E-5],
377
+ [10.933333333333334, 3.4319463597202159E-5, 9.8546961443335889E-6],
378
+ [10.95, 3.4259642924643948E-5, 9.5705479496820846E-6],
379
+ [10.966666666666667, 3.4199822252085737E-5, 9.2863997550305819E-6],
380
+ [10.983333333333333, 3.414000157952754E-5, 9.0022515603790826E-6]];
381
+
382
+ describe('validSmoother', () => {
383
+
384
+
385
+ it('Should return the good value', () => {
386
+ const smoother = new Smoother();
387
+
388
+ for (let i = 0; i < positions.length; i++) {
389
+ const pos = new WGS84UserPosition(positions[i][1], positions[i][2]);
390
+ pos.time = positions[i][0];
391
+ smoother.generateNextLocations(pos, positions[i][3]);
392
+ }
393
+
394
+ const predicted = smoother.locationsQueue;
395
+ expect(predicted.length).to.equal(expectations.length);
396
+
397
+ for (let i = 0; i < predicted.length; i++) {
398
+ const dist = predicted[i].distanceTo(new WGS84(expectations[i][1], expectations[i][2]));
399
+ const timeDiff = predicted[i].time - expectations[i][0];
400
+ expect(dist).to.almost.equal(0);
401
+ expect(timeDiff).to.almost.equal(0);
402
+ }
403
+
404
+ const locationAt10 = smoother.pullLocation(10);
405
+ expect(locationAt10.distanceTo(new WGS84(3.7669421260460435E-5, 2.5766995044818355E-5))).to.almost.equal(0);
406
+ });
407
+ });
408
+
409
+ describe('smoother return same value if unique', () => {
410
+
411
+
412
+ it('Should return the good value', () => {
413
+ const smoother = new Smoother();
414
+
415
+ const pos = new WGS84UserPosition(positions[0][1], positions[0][2]);
416
+ smoother.generateNextLocations(pos);
417
+ const posExpected = smoother.pullLocation();
418
+
419
+ expect(posExpected).to.be.an.instanceof(WGS84UserPosition);
420
+ expect(posExpected.distanceTo(pos)).to.almost.equal(0);
421
+ expect(smoother.locationsQueue).to.be.an('array').that.is.empty;
422
+ });
423
+ });
424
+
@@ -0,0 +1,37 @@
1
+ import { Constants as GeoConstants } from '@wemap/geo';
2
+ import { Vector3 } from '@wemap/maths';
3
+
4
+ // in seconds
5
+ const MIN_TIME_BETWEEN_DETECTIONS = 0.5;
6
+
7
+ // in m.s^-2
8
+ const EXT_ACC_NORM_THRESHOLD = 4;
9
+
10
+
11
+ class ThugDetector {
12
+
13
+ constructor() {
14
+ this.lastDetectionTimestamp = 0;
15
+ }
16
+
17
+ compute(timestamp, acceleration) {
18
+
19
+ let detection = false;
20
+
21
+ if (timestamp - this.lastDetectionTimestamp < MIN_TIME_BETWEEN_DETECTIONS) {
22
+ return detection;
23
+ }
24
+
25
+ const extAccNorm = Vector3.norm(acceleration) - GeoConstants.EARTH_GRAVITY;
26
+ if (Math.abs(extAccNorm) > EXT_ACC_NORM_THRESHOLD) {
27
+ detection = true;
28
+ this.lastDetectionTimestamp = timestamp;
29
+ }
30
+
31
+ return detection;
32
+ }
33
+
34
+
35
+ }
36
+
37
+ export default ThugDetector;
@@ -0,0 +1,7 @@
1
+ import StepDetectionMinMaxPeaks2 from './StepDetectionMinMaxPeaks2';
2
+
3
+ class StepDetection extends StepDetectionMinMaxPeaks2 {
4
+
5
+ }
6
+
7
+ export default StepDetection;
@@ -0,0 +1,67 @@
1
+
2
+ // in seconds
3
+ const MIN_TIME_BETWEEN_STEPS = 0.4;
4
+
5
+ // in Hz
6
+ const MAX_FRENQUENCY = 4;
7
+ const MIN_FRENQUENCY = 1;
8
+
9
+ // in m.s-2
10
+ const VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD = 1;
11
+
12
+
13
+ class StepDetectionLadetto {
14
+
15
+ lastVerticalAcc = 0;
16
+ maxAcceleration = 0;
17
+ lastStepTimestamp = -MIN_TIME_BETWEEN_STEPS;
18
+
19
+ compute(timestamp, linearAcc) {
20
+
21
+ let stepDetected = false;
22
+
23
+ const verticalAcc = linearAcc[2];
24
+ const timeInterval = timestamp - this.lastStepTimestamp;
25
+
26
+ const upfront = verticalAcc > this.lastVerticalAcc;
27
+
28
+ if (upfront) {
29
+ if (verticalAcc > this.maxAcceleration) {
30
+ this.maxAcceleration = verticalAcc;
31
+ }
32
+ } else if (this.maxAcceleration > VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD
33
+ && timeInterval > MIN_TIME_BETWEEN_STEPS) {
34
+ this.maxAcceleration = 0;
35
+
36
+ const diffTime = timestamp - this.lastStepTimestamp;
37
+ this.frequency = Math.min(Math.max((1 / diffTime), MIN_FRENQUENCY), MAX_FRENQUENCY);
38
+
39
+ stepDetected = true;
40
+ this.lastStepTimestamp = timestamp;
41
+ } else {
42
+ this.maxAcceleration = 0;
43
+ }
44
+
45
+ this.lastVerticalAcc = verticalAcc;
46
+
47
+ return stepDetected;
48
+ }
49
+
50
+ get lastStepSize() {
51
+
52
+ if (!this.frequency) {
53
+ return 0;
54
+ }
55
+
56
+ const kParamA = 0.45;
57
+ const kParamB = 0.2;
58
+ return kParamA + kParamB * this.frequency;
59
+ }
60
+
61
+ get speed() {
62
+ return this.lastStepTimestamp ? this.lastStepSize * this.frequency : 0;
63
+ }
64
+
65
+ }
66
+
67
+ export default StepDetectionLadetto;
@@ -0,0 +1,80 @@
1
+
2
+ // in seconds
3
+ const WINDOW_TIME = 0.3;
4
+
5
+ // in seconds
6
+ const MIN_TIME_BETWEEN_STEPS = 0.4;
7
+
8
+ // in Hz
9
+ const MAX_FRENQUENCY = 4;
10
+ const MIN_FRENQUENCY = 1;
11
+
12
+ // in m.s-2
13
+ const VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD = 1.5;
14
+ const VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD = -1;
15
+
16
+
17
+ class StepDetectionMinMaxPeaks {
18
+
19
+ constructor() {
20
+ this.slidingWindow = [];
21
+
22
+ this.lastStepTimestamp = -MIN_TIME_BETWEEN_STEPS;
23
+ }
24
+
25
+
26
+ compute(timestamp, linearAcc) {
27
+
28
+ if (this.lastStepTimestamp && this.lastStepTimestamp + MIN_TIME_BETWEEN_STEPS > timestamp) {
29
+ return false;
30
+ }
31
+
32
+ let maxValue = Number.MIN_SAFE_INTEGER;
33
+ let minValue = Number.MAX_SAFE_INTEGER;
34
+
35
+ const windowTime = WINDOW_TIME;
36
+ this.slidingWindow.forEach(function(item, index, object) {
37
+ if (item.timestamp < timestamp - windowTime) {
38
+ object.splice(index, 1);
39
+ } else {
40
+ maxValue = Math.max(item.verticalAcc, maxValue);
41
+ minValue = Math.min(item.verticalAcc, minValue);
42
+ }
43
+ });
44
+ this.slidingWindow.push({
45
+ timestamp: timestamp,
46
+ verticalAcc: linearAcc[2]
47
+ });
48
+
49
+
50
+ if (maxValue > VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD
51
+ && minValue < VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD) {
52
+
53
+ const timeInterval = this.lastStepTimestamp ? timestamp - this.lastStepTimestamp : 1;
54
+ this.frequency = Math.min(Math.max((1 / timeInterval), MIN_FRENQUENCY), MAX_FRENQUENCY);
55
+
56
+ this.lastStepTimestamp = timestamp;
57
+ return true;
58
+ }
59
+
60
+ return false;
61
+ }
62
+
63
+ get lastStepSize() {
64
+
65
+ if (!this.frequency) {
66
+ return 0;
67
+ }
68
+
69
+ const kParamA = 0.45;
70
+ const kParamB = 0.2;
71
+ return kParamA + kParamB * this.frequency;
72
+ }
73
+
74
+ get speed() {
75
+ return this.lastStepTimestamp ? this.lastStepSize * this.frequency : 0;
76
+ }
77
+
78
+ }
79
+
80
+ export default StepDetectionMinMaxPeaks;