- worked on about everything - grid walker using plugable modules - wifi models - new distributions - worked on geometric data-structures - added typesafe timestamps - worked on grid-building - added sensor-classes - added sensor analysis (step-detection, turn-detection) - offline data reader - many test-cases
103 lines
3.1 KiB
C++
103 lines
3.1 KiB
C++
#ifdef WITH_TESTS
|
|
|
|
#include "../../Tests.h"
|
|
#include "../../../sensors/radio/model/WiFiModelLogDist.h"
|
|
|
|
#include "../../../sensors/radio/WiFiGridEstimator.h"
|
|
#include "../../../sensors/radio/WiFiMeasurements.h"
|
|
#include "../../../sensors/radio/WiFiProbability.h"
|
|
#include "../../../sensors/radio/WiFiProbabilityFree.h"
|
|
#include "../../../sensors/radio/WiFiProbabilityGrid.h"
|
|
|
|
#include "../../../grid/Grid.h"
|
|
|
|
struct MyNode : GridNode, GridPoint, WiFiGridNode<10> {
|
|
|
|
MyNode(const int x_cm, const int y_cm, const int z_cm) : GridPoint(x_cm, y_cm, z_cm) {;}
|
|
|
|
};
|
|
|
|
/** test the RSSI storage. [we use only a single byte due to memory constraints, but allow 0.25 dB steps!] */
|
|
TEST(WiFiGridNodeAP, rssi) {
|
|
|
|
for (float rssi = -40; rssi > -103; rssi -= 0.1f) {
|
|
WiFiGridNodeAP ap(0, rssi);
|
|
ASSERT_NEAR(rssi, ap.getRSSI(), 0.2f); // max 0.2 dB variation from what it should be
|
|
}
|
|
|
|
}
|
|
|
|
/** test the signal-strength limit: [-40: -103] */
|
|
TEST(WiFiGridNodeAP, rssiLimits) {
|
|
|
|
// limit 1
|
|
WiFiGridNodeAP ap1(0, -10);
|
|
ASSERT_EQ(-40, ap1.getRSSI());
|
|
|
|
// limit 2
|
|
WiFiGridNodeAP ap2(0, -200);
|
|
ASSERT_EQ(-103, ap2.getRSSI());
|
|
|
|
}
|
|
|
|
|
|
|
|
/** gnuplot debug dumps */
|
|
TEST(WiFiGridModelLogDist, create) {
|
|
|
|
int gs = 20;
|
|
Grid<MyNode> grid(gs);
|
|
|
|
for (int x = 0; x < 2000; x += gs) {
|
|
for (int y = 0; y < 2000; y += gs) {
|
|
grid.add(MyNode(x,y,0));
|
|
}
|
|
}
|
|
|
|
std::cout << "GridNodeSize: " << sizeof(MyNode) << std::endl;
|
|
|
|
LocatedAccessPoint ap1("00:00:00:00:00:01", Point3( 0, 0,0));
|
|
LocatedAccessPoint ap2("00:00:00:00:00:02", Point3(20, 0,0));
|
|
LocatedAccessPoint ap3("00:00:00:00:00:03", Point3( 0,20,0));
|
|
LocatedAccessPoint ap4("00:00:00:00:00:04", Point3(20,20,0));
|
|
|
|
std::vector<LocatedAccessPoint> aps = {ap1, ap2, ap3, ap4};
|
|
|
|
ASSERT_EQ(0, grid[0].getNumVisibleAPs());
|
|
|
|
WiFiModelLogDist model(-40, 1.5);
|
|
WiFiGridEstimator::estimate(grid, model, aps);
|
|
|
|
|
|
ASSERT_EQ(4, grid[0].getNumVisibleAPs()); // 4 APs visible at this node
|
|
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:01")); // non-zero RSSI
|
|
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:02")); // non-zero RSSI
|
|
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:03")); // non-zero RSSI
|
|
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:04")); // non-zero RSSI
|
|
ASSERT_EQ(0, grid[0].getRSSI("00:00:00:00:00:05")); // unknown AP -> 0 RSSI
|
|
|
|
WiFiGridEstimator::dump(grid, "00:00:00:00:00:01", "/tmp/ap1.gp");
|
|
WiFiGridEstimator::dump(grid, "00:00:00:00:00:02", "/tmp/ap2.gp");
|
|
WiFiGridEstimator::dump(grid, "00:00:00:00:00:03", "/tmp/ap3.gp");
|
|
WiFiGridEstimator::dump(grid, "00:00:00:00:00:04", "/tmp/ap4.gp");
|
|
|
|
Timestamp ts = Timestamp::fromMS(10);
|
|
|
|
WiFiMeasurements obs;
|
|
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:01"), -55, ts));
|
|
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:02"), -55, ts));
|
|
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:03"), -55, ts));
|
|
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:04"), -55, ts));
|
|
|
|
WiFiObserverGrid observer(5.0f);
|
|
const MyNode& gn = grid.getNodeFor(GridPoint(1000,1000,0));
|
|
const float p = observer.getProbability(gn, ts, obs);
|
|
|
|
observer.dump(grid, ts, obs, "/tmp/eval1.gp");
|
|
|
|
int i = 0; (void) i;
|
|
|
|
}
|
|
|
|
#endif
|