0.3.0
Loading...
Searching...
No Matches
WiFiPositioning.hpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
13
14#pragma once
15
16#include "util/Eigen.hpp"
18#include <vector>
19
24
28
29namespace NAV
30{
32class WiFiPositioning : public Node
33{
34 public:
38 ~WiFiPositioning() override;
47
49 [[nodiscard]] static std::string typeStatic();
50
52 [[nodiscard]] std::string type() const override;
53
55 [[nodiscard]] static std::string category();
56
59 void guiConfig() override;
60
62 [[nodiscard]] json save() const override;
63
66 void restore(const json& j) override;
67
68 private:
69 constexpr static size_t INPUT_PORT_INDEX_WIFI_OBS = 0;
70 constexpr static size_t OUTPUT_PORT_INDEX_WIFISOL = 0;
71
73 uint8_t _numStates = 6;
74
76 uint8_t _numMeasurements = 1;
77
79 KalmanFilter _kalmanFilter{ _numStates, _numMeasurements }; // TODO: Change to KeyedKalmanFilter
80
81 // --------------------------------------------------------------- Gui -----------------------------------------------------------------
82
84 bool initialize() override;
85
87 void deinitialize() override;
88
90 size_t _nWifiInputPins = 1;
91
94
95 // ------------------------------------------------------------ Algorithm --------------------------------------------------------------
96
98 enum class Frame : uint8_t
99 {
102 };
103
105
107 enum class SolutionMode : uint8_t
108 {
111 };
112
114
116 bool _estimateBias = false;
117
119 bool _weightedSolution = false;
120
122 bool _useInitialValues = false;
123
125 struct State
126 {
128 Eigen::Vector3d e_position = Eigen::Vector3d::Zero();
130 Eigen::Vector3d e_velocity = Eigen::Vector3d::Zero();
132 double bias = 0;
133 };
134
137
140
142 std::vector<std::string> _deviceMacAddresses{ 1 };
143
145 std::vector<Eigen::Vector3d> _devicePositions{ 1 };
146
148 std::vector<double> _deviceBias{ 1, 0.0 };
149
151 std::vector<double> _deviceScale{ 1, 0.0 };
152
154 size_t _numOfDevices = 0;
155
157 struct Device
158 {
159 Eigen::Vector3d position{ Eigen::Vector3d::Zero() };
161 double distance{ 0.0 };
162 double distanceStd{ 0.0 };
163 };
164
165 std::vector<Device> _devices{ 1 };
166
169
173 void recvWiFiObs(InputPin::NodeDataQueue& queue, size_t pinIdx);
174
178
181
182 // ###########################################################################################################
183
185 enum class MeasurementNoiseUnit : uint8_t
186 {
189 };
190
192
194 double _measurementNoise = 10;
195
196 // ###########################################################################################################
197
199 enum class ProcessNoiseUnit : uint8_t
200 {
203 };
204
206
208 double _processNoise = 10;
209
210 // ###########################################################################################################
211
213 enum class InitCovariancePositionUnit : uint8_t
214 {
217 };
218
220
222 Eigen::Vector3d _initCovariancePosition{ 100, 100, 100 };
223
224 // ###########################################################################################################
225
227 enum class InitCovarianceVelocityUnit : uint8_t
228 {
231 };
232
234
236 Eigen::Vector3d _initCovarianceVelocity{ 10, 10, 10 };
237
238 // ###########################################################################################################
239
241 enum class InitCovarianceBiasUnit : uint8_t
242 {
245 };
246
248
251};
252} // namespace NAV
Starts a Periodic Timer.
Vector space operations.
nlohmann::json json
json namespace
Definition FlowManager.hpp:21
Kalman Filter with keyed states.
Least Squares Algorithm.
Generalized Kalman Filter class.
Node Class.
Position and Velocity Storage Class.
Position Storage Class.
Espressif Observation Class.
TsDeque< std::shared_ptr< const NAV::NodeData > > NodeDataQueue
Node data queue type.
Definition Pin.hpp:707
The class is responsible for all time-related tasks.
Definition InsTime.hpp:710
Generalized Kalman Filter class.
Definition KalmanFilter.hpp:25
Node(std::string name)
Constructor.
std::vector< double > _deviceBias
Input of biases.
Definition WiFiPositioning.hpp:148
uint8_t _numStates
Number of states.
Definition WiFiPositioning.hpp:73
SolutionMode
Available Solution Modes.
Definition WiFiPositioning.hpp:108
@ LSQ
Least Squares.
Definition WiFiPositioning.hpp:109
@ KF
Kalman Filter.
Definition WiFiPositioning.hpp:110
LeastSquaresResult< Eigen::VectorXd, Eigen::MatrixXd > lsqSolution()
Calculate the position using the least squares method.
double _measurementNoise
GUI selection of the process noise (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:194
KalmanFilter _kalmanFilter
Kalman Filter representation - States: 3xVel, 3xPos, (1xBias) - Measurements: 1xDist.
Definition WiFiPositioning.hpp:79
std::vector< Device > _devices
Devices which are used for the positioning.
Definition WiFiPositioning.hpp:165
Frame _frame
Frame to calculate the position in.
Definition WiFiPositioning.hpp:104
size_t _nWifiInputPins
Amount of wifi input pins.
Definition WiFiPositioning.hpp:90
Eigen::Vector3d _initCovarianceVelocity
GUI selection of the initial covariance diagonal values for velocity (standard deviation σ or Varianc...
Definition WiFiPositioning.hpp:236
std::string type() const override
String representation of the Class Type.
void restore(const json &j) override
Restores the node from a json object.
uint8_t _numMeasurements
Number of measurements.
Definition WiFiPositioning.hpp:76
InitCovariancePositionUnit
Possible Units for the initial covariance for the position (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:214
@ meter
Standard deviation NED [m, m, m].
Definition WiFiPositioning.hpp:216
json save() const override
Saves the node into a json object.
Frame
Available Frames.
Definition WiFiPositioning.hpp:99
@ LLA
Latitude-Longitude-Altitude frame.
Definition WiFiPositioning.hpp:101
@ ECEF
Earth-Centered Earth-Fixed frame.
Definition WiFiPositioning.hpp:100
InitCovarianceVelocityUnit
Possible Units for the initial covariance for the velocity (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:228
@ m_s
Standard deviation [m/s].
Definition WiFiPositioning.hpp:230
@ m2_s2
Variance [m^2/s^2].
Definition WiFiPositioning.hpp:229
Eigen::Vector3d _initCovariancePosition
GUI selection of the initial covariance diagonal values for position (standard deviation σ or Varianc...
Definition WiFiPositioning.hpp:222
WiFiPositioning(const WiFiPositioning &)=delete
Copy constructor.
WiFiPositioning()
Default constructor.
void guiConfig() override
ImGui config window which is shown on double click.
MeasurementNoiseUnit
Possible Units for the measurement noise (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:186
@ meter2
Variance NED [m^2, m^2, m^2].
Definition WiFiPositioning.hpp:187
@ meter
Standard deviation NED [m, m, m].
Definition WiFiPositioning.hpp:188
std::vector< double > _deviceScale
Input of scales.
Definition WiFiPositioning.hpp:151
std::vector< std::string > _deviceMacAddresses
Input of mac addresses.
Definition WiFiPositioning.hpp:142
InitCovarianceVelocityUnit _initCovarianceVelocityUnit
Gui selection for the Unit of the initial covariance for the velocity.
Definition WiFiPositioning.hpp:233
bool _estimateBias
Selection of whether the bias will be additionally estimated.
Definition WiFiPositioning.hpp:116
void deinitialize() override
Deinitialize the node.
double _processNoise
GUI selection of the process noise (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:208
static constexpr size_t INPUT_PORT_INDEX_WIFI_OBS
WiFiObs.
Definition WiFiPositioning.hpp:69
void updateNumberOfInputPins()
Adds/Deletes Input Pins depending on the variable _nNavInfoPins.
bool initialize() override
Initialize the node.
static std::string typeStatic()
String representation of the Class Type.
SolutionMode _solutionMode
Solution Mode.
Definition WiFiPositioning.hpp:113
InsTime _lastPredictTime
Time when the last prediction was triggered.
Definition WiFiPositioning.hpp:168
InitCovarianceBiasUnit
Possible Units for the initial covariance for the bias (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:242
@ meter
Standard deviation [m].
Definition WiFiPositioning.hpp:244
~WiFiPositioning() override
Destructor.
WiFiPositioning & operator=(WiFiPositioning &&)=delete
Move assignment operator.
WiFiPositioning & operator=(const WiFiPositioning &)=delete
Copy assignment operator.
bool _useInitialValues
Selection of whether the initial values should always be used or those of the last position.
Definition WiFiPositioning.hpp:122
double _initCovarianceBias
GUI selection of the initial covariance diagonal values for bias (standard deviation σ or Variance σ²...
Definition WiFiPositioning.hpp:250
InitCovariancePositionUnit _initCovariancePositionUnit
Gui selection for the Unit of the initial covariance for the position.
Definition WiFiPositioning.hpp:219
State _initialState
Initial state.
Definition WiFiPositioning.hpp:139
bool _weightedSolution
Selection of whether the solution will be weighted.
Definition WiFiPositioning.hpp:119
WiFiPositioning(WiFiPositioning &&)=delete
Move constructor.
ProcessNoiseUnit
Possible Units for the process noise (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:200
@ meter
Standard deviation NED [m, m, m].
Definition WiFiPositioning.hpp:202
void kfSolution()
Calculate the position.
static std::string category()
String representation of the Class Category.
ProcessNoiseUnit _processNoiseUnit
Gui selection for the Unit of the initial covariance for the position.
Definition WiFiPositioning.hpp:205
InitCovarianceBiasUnit _initCovarianceBiasUnit
Gui selection for the Unit of the initial covariance for the bias.
Definition WiFiPositioning.hpp:247
std::vector< Eigen::Vector3d > _devicePositions
Input of positions.
Definition WiFiPositioning.hpp:145
void recvWiFiObs(InputPin::NodeDataQueue &queue, size_t pinIdx)
Receive Function for the WiFi Observations.
State _state
State estimated by the algorithm.
Definition WiFiPositioning.hpp:136
static constexpr size_t OUTPUT_PORT_INDEX_WIFISOL
WiFiPositioningSolution.
Definition WiFiPositioning.hpp:70
MeasurementNoiseUnit _measurementNoiseUnit
Gui selection for the Unit of the initial covariance for the position.
Definition WiFiPositioning.hpp:191
size_t _numOfDevices
Number of devices.
Definition WiFiPositioning.hpp:154
Least Squares Uncertainties return value.
Definition LeastSquares.hpp:28
Device struct.
Definition WiFiPositioning.hpp:158
Eigen::Vector3d position
Position vector.
Definition WiFiPositioning.hpp:159
double distance
Distance.
Definition WiFiPositioning.hpp:161
InsTime time
Time.
Definition WiFiPositioning.hpp:160
double distanceStd
Standard deviation of distance measurement.
Definition WiFiPositioning.hpp:162
State estimated by the positioning algorithm.
Definition WiFiPositioning.hpp:126
double bias
Estimated bias [m].
Definition WiFiPositioning.hpp:132
Eigen::Vector3d e_velocity
Estimated velocity in ECEF frame [m/s].
Definition WiFiPositioning.hpp:130
Eigen::Vector3d e_position
Estimated position in ECEF frame [m].
Definition WiFiPositioning.hpp:128