From dd9116086d8de390a741d02fa14e7d26cbcf3bd3 Mon Sep 17 00:00:00 2001 From: k-a-z-u Date: Tue, 10 Jul 2018 17:27:18 +0200 Subject: [PATCH 1/3] added some sanity checks --- geo/Triangle3.h | 8 ++++++++ wifi/estimate/ray3/ModelFactory.h | 7 +++++++ wifi/estimate/ray3/Obstacle3.h | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/geo/Triangle3.h b/geo/Triangle3.h index f86c4b4..ca09888 100644 --- a/geo/Triangle3.h +++ b/geo/Triangle3.h @@ -136,6 +136,14 @@ public: } + /** perform some sanity checks */ + bool isValid() const { + if (p1 == p2) {return false;} + if (p1 == p3) {return false;} + if (p2 == p3) {return false;} + return true; + } + /* int rayIntersectsTriangle(float *p, float *d, float *v0, float *v1, float *v2) { diff --git a/wifi/estimate/ray3/ModelFactory.h b/wifi/estimate/ray3/ModelFactory.h index 234c433..adbe864 100644 --- a/wifi/estimate/ray3/ModelFactory.h +++ b/wifi/estimate/ray3/ModelFactory.h @@ -339,6 +339,13 @@ namespace Ray3D { const std::string& name = foo->file; Obstacle3D obs = OBJPool::get().getObject(name); + + // perform sanity checks + if (!obs.isValid()) { + throw std::runtime_error("invalid obstacle-data detected"); + } + + // apply scaling/rotation/translation obs = obs.scaled(foo->scale); obs = obs.rotated_deg( Point3(foo->rot.x, foo->rot.y, foo->rot.z) ); obs = obs.translated(foo->pos + Point3(0,0,fpos.z1)); diff --git a/wifi/estimate/ray3/Obstacle3.h b/wifi/estimate/ray3/Obstacle3.h index ff84594..cfbfc71 100644 --- a/wifi/estimate/ray3/Obstacle3.h +++ b/wifi/estimate/ray3/Obstacle3.h @@ -89,6 +89,14 @@ namespace Ray3D { return res; } + /** perform sanity checks */ + bool isValid() const { + for (const Triangle3& t : triangles) { + if (!t.isValid()) {return false;} + } + return true; + } + }; } From 6456e579cfad2d67e9362565b042704d30f717c5 Mon Sep 17 00:00:00 2001 From: k-a-z-u Date: Wed, 11 Jul 2018 12:28:23 +0200 Subject: [PATCH 2/3] std::experimental fix for android --- data/File.h | 115 +++++++++++++++++++++++++++++++++++ wifi/estimate/ray3/OBJPool.h | 17 +++--- 2 files changed, 124 insertions(+), 8 deletions(-) create mode 100644 data/File.h diff --git a/data/File.h b/data/File.h new file mode 100644 index 0000000..0f6d48f --- /dev/null +++ b/data/File.h @@ -0,0 +1,115 @@ +#ifndef FS_FILE_H +#define FS_FILE_H + +#include +#include + + + + +#if __cplusplus > 201103L + + // use new cross-platform std::experimental stuff + #include + +namespace FS { + + class File { + + std::experimental::filesystem::path path; + + public: + + File(const std::string& fileOrFolder) : path(fileOrFolder) { + + } + + bool exists() const { + return std::experimental::filesystem::exists(path); + } + + std::vector listFiles() const { + std::vector res; + for (std::experimental::filesystem::directory_entry entry : std::experimental::filesystem::directory_iterator(path)) { + const std::string abs = entry.path().string(); + res.push_back(File(abs)); + } + return res; + } + + std::string getPath() const { + return path.string(); + } + + std::string getFilename() const { + return path.filename().string(); + } + + }; + +} + +#else + + // use linux-only fallback + + #include + #include + +namespace FS { + + class File { + + std::string path; + + public: + + File(const std::string& fileOrFolder) : path(fileOrFolder) { + + } + + bool exists() const { + struct stat st; + int res = stat(path.c_str(), &st ); + return res == 0; + } + + /** list of all files/folders within the current folder */ + std::vector listFiles() const { + + std::vector res; + + DIR* dir; + + dir = opendir(path.c_str()); + if (!dir) {throw Exception("failed to open folder " + path);} + + // fetch all entries + while(true) { + dirent* entry = readdir(dir); + if (!entry) {break;} + const std::string abs = path + "/" + entry->d_name; + res.push_back(File(abs)); + } + + return res; + + } + + const std::string& getPath() const { + return path; + } + + const std::string getFilename() const { + const size_t lastSlash = path.find_last_of("/"); + if (std::string::npos == lastSlash) {return path;} + std::string name = path.substr(lastSlash+1); + return name; + } + + }; + +} +#endif + +#endif // FS_FILE_H diff --git a/wifi/estimate/ray3/OBJPool.h b/wifi/estimate/ray3/OBJPool.h index a10c2d7..037dd5b 100644 --- a/wifi/estimate/ray3/OBJPool.h +++ b/wifi/estimate/ray3/OBJPool.h @@ -11,7 +11,8 @@ // LINUX ONLY //#include //#include -#include +#include "../../../data/File.h" + #include "../../../misc/Debug.h" @@ -83,17 +84,17 @@ namespace Ray3D { /** scan the given folder for all *.obj files */ void scanFolder(const std::string& folder) { - std::experimental::filesystem::path d(folder); - if (!std::experimental::filesystem::exists(d)) { + FS::File d(folder); + if (!d.exists()) { throw Exception("OBJPool: folder not found: " + folder); } - for (std::experimental::filesystem::directory_entry entry : std::experimental::filesystem::directory_iterator(d)) { - const std::string absFile = entry.path().string(); - if (endsWith(absFile, ".obj")) { - std::string name = entry.path().filename().string(); + for (const FS::File& f : d.listFiles()) { + std::string name = f.getFilename(); + if (endsWith(name, ".obj")) { + //std::string name = entry.path().filename().string(); name = name.substr(0, name.length() - 4); // without extension - load(absFile, name); + load(f.getPath(), name); } } From 94e53613ba18260037c4224b37cd3b008aaaf444 Mon Sep 17 00:00:00 2001 From: k-a-z-u Date: Wed, 11 Jul 2018 19:08:48 +0200 Subject: [PATCH 3/3] adjusted distribution includes --- grid/walk/v2/GridWalker.h | 2 +- grid/walk/v2/modules/WalkModuleActivityControl.h | 2 +- grid/walk/v2/modules/WalkModuleFavorZ.h | 2 +- grid/walk/v2/modules/WalkModuleFollowDestination.h | 2 +- grid/walk/v2/modules/WalkModuleHeadingControl.h | 5 +++-- sensors/radio/WiFiProbabilityFree.h | 4 +++- sensors/radio/WiFiProbabilityGrid.h | 2 +- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/grid/walk/v2/GridWalker.h b/grid/walk/v2/GridWalker.h index 737caa6..b0154fd 100644 --- a/grid/walk/v2/GridWalker.h +++ b/grid/walk/v2/GridWalker.h @@ -5,7 +5,7 @@ #include "../../Grid.h" #include "../../../math/DrawList.h" #include "modules/WalkModule.h" -#include "../../../math/Distributions.h" +#include "../../../math/distribution/Normal.h" #include "../../../math/Stats.h" /** diff --git a/grid/walk/v2/modules/WalkModuleActivityControl.h b/grid/walk/v2/modules/WalkModuleActivityControl.h index 075f54b..a5645fc 100644 --- a/grid/walk/v2/modules/WalkModuleActivityControl.h +++ b/grid/walk/v2/modules/WalkModuleActivityControl.h @@ -4,7 +4,7 @@ #include "WalkModule.h" #include "../../../../geo/Heading.h" -#include "../../../../math/Distributions.h" +#include "../../../../math/distribution/Normal.h" #include "../../../../sensors/activity/ActivityButterPressure.h" diff --git a/grid/walk/v2/modules/WalkModuleFavorZ.h b/grid/walk/v2/modules/WalkModuleFavorZ.h index eacc910..3893329 100644 --- a/grid/walk/v2/modules/WalkModuleFavorZ.h +++ b/grid/walk/v2/modules/WalkModuleFavorZ.h @@ -5,7 +5,7 @@ #include "WalkStateHeading.h" #include "../../../../geo/Heading.h" -#include "../../../../math/Distributions.h" +#include "../../../../math/distribution/Normal.h" #include "../../../../Assertions.h" diff --git a/grid/walk/v2/modules/WalkModuleFollowDestination.h b/grid/walk/v2/modules/WalkModuleFollowDestination.h index b92be94..9f66641 100644 --- a/grid/walk/v2/modules/WalkModuleFollowDestination.h +++ b/grid/walk/v2/modules/WalkModuleFollowDestination.h @@ -7,7 +7,7 @@ #include "../../../../nav/dijkstra/Dijkstra.h" #include "../../../../nav/dijkstra/DijkstraPath.h" -#include "../../../../math/Distributions.h" +#include "../../../../math/distribution/Normal.h" #include "../../../../Assertions.h" diff --git a/grid/walk/v2/modules/WalkModuleHeadingControl.h b/grid/walk/v2/modules/WalkModuleHeadingControl.h index a79cdad..0eb0651 100644 --- a/grid/walk/v2/modules/WalkModuleHeadingControl.h +++ b/grid/walk/v2/modules/WalkModuleHeadingControl.h @@ -5,8 +5,9 @@ #include "WalkStateHeading.h" #include "../../../../geo/Heading.h" -#include "../../../../math/Distributions.h" - +#include "../../../../math/distribution/Normal.h" +#include "../../../../math/distribution/LUT.h" +#include "../../../../math/distribution/VonMises.h" /** keep the state's heading */ template class WalkModuleHeadingControl : public WalkModule { diff --git a/sensors/radio/WiFiProbabilityFree.h b/sensors/radio/WiFiProbabilityFree.h index 7f4a02a..c7ae6c5 100644 --- a/sensors/radio/WiFiProbabilityFree.h +++ b/sensors/radio/WiFiProbabilityFree.h @@ -3,7 +3,9 @@ #include "WiFiProbability.h" #include "model/WiFiModel.h" -#include "../../math/Distributions.h" +#include "../../math/distribution/Normal.h" +#include "../../math/distribution/Region.h" +#include "../../math/distribution/Exponential.h" #include "VAPGrouper.h" #include "../../floorplan/v2/Floorplan.h" diff --git a/sensors/radio/WiFiProbabilityGrid.h b/sensors/radio/WiFiProbabilityGrid.h index 840d1dd..d6aff4e 100644 --- a/sensors/radio/WiFiProbabilityGrid.h +++ b/sensors/radio/WiFiProbabilityGrid.h @@ -3,7 +3,7 @@ #include -#include "../../math/Distributions.h" +#include "../../math/distribution/Normal.h" #include "../../data/Timestamp.h" #include "WiFiGridNode.h"