0.3.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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 {
100 ECEF,
101 LLA,
102 };
105
107 enum class SolutionMode : uint8_t
108 {
109 LSQ,
110 KF,
111 };
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 };
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 {
187 meter2,
188 meter,
189 };
192
194 double _measurementNoise = 10;
195
196 // ###########################################################################################################
197
199 enum class ProcessNoiseUnit : uint8_t
200 {
201 meter2,
202 meter,
203 };
206
208 double _processNoise = 10;
209
210 // ###########################################################################################################
211
213 enum class InitCovariancePositionUnit : uint8_t
214 {
215 meter2,
216 meter,
217 };
220
222 Eigen::Vector3d _initCovariancePosition{ 100, 100, 100 };
223
224 // ###########################################################################################################
225
227 enum class InitCovarianceVelocityUnit : uint8_t
228 {
229 m2_s2,
230 m_s,
231 };
234
236 Eigen::Vector3d _initCovarianceVelocity{ 10, 10, 10 };
237
238 // ###########################################################################################################
239
241 enum class InitCovarianceBiasUnit : uint8_t
242 {
243 meter2,
244 meter,
245 };
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, Velocity and Attitude Storage Class.
Position Storage Class.
Espressif Observation Class.
The class is responsible for all time-related tasks.
Definition InsTime.hpp:668
Generalized Kalman Filter class.
Definition KalmanFilter.hpp:25
Abstract parent class for all nodes.
Definition Node.hpp:86
Numerically integrates Imu data.
Definition WiFiPositioning.hpp:33
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
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].
json save() const override
Saves the node into a json object.
Frame
Available Frames.
Definition WiFiPositioning.hpp:99
@ LLA
Latitude-Longitude-Altitude frame.
@ ECEF
Earth-Centered Earth-Fixed frame.
InitCovarianceVelocityUnit
Possible Units for the initial covariance for the velocity (standard deviation σ or Variance σ²)
Definition WiFiPositioning.hpp:228
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].
@ meter
Standard deviation NED [m, m, m].
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
~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].
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