From eb61dfc0e0e3c9954691486ff2e8d96c34bd62c4 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Wed, 27 Apr 2011 18:57:00 +0200 Subject: [PATCH] [Positioning] Add minmax-start & minmax-stop opts. The start and stop coordinates for the MinMax multilateration method used to be hard-coded. One should now provide the good coordinates using the new options positioning.minmax-start and positioning.minmax-stop. --- owlps-positioning/Makefile | 4 +++- owlps-positioning/TODO | 1 - owlps-positioning/cfg/owlps-positioning.cfg | 8 ++++++++ owlps-positioning/cfg/topology.csv | 13 ++++++++---- .../src/multilaterationalgorithm.cc | 20 +++++++++++++++---- owlps-positioning/src/userinterface.cc | 6 ++++++ 6 files changed, 42 insertions(+), 10 deletions(-) diff --git a/owlps-positioning/Makefile b/owlps-positioning/Makefile index 09aaef1..669bca9 100644 --- a/owlps-positioning/Makefile +++ b/owlps-positioning/Makefile @@ -245,7 +245,9 @@ $(OBJ_DIR)/output.o: \ $(OBJ_DIR)/multilaterationalgorithm.o: \ $(SRC_DIR)/positioningalgorithm.hh \ $(OBJ_DIR)/minmax.o \ - $(OBJ_DIR)/mobile.o + $(OBJ_DIR)/mobile.o \ + $(OBJ_DIR)/configuration.o \ + $(OBJ_DIR)/posexcept.o $(OBJ_DIR)/cartographyalgorithm.o: \ $(SRC_DIR)/positioningalgorithm.hh \ $(OBJ_DIR)/referencepoint.o diff --git a/owlps-positioning/TODO b/owlps-positioning/TODO index edec94a..363af60 100644 --- a/owlps-positioning/TODO +++ b/owlps-positioning/TODO @@ -33,7 +33,6 @@ - MinMax ° Différencier le pas pour X, Y et Z ? - ° Régler le start & stop dans MultilaterationAlgorithm. - Renommages de membres ° InputMedium : diff --git a/owlps-positioning/cfg/owlps-positioning.cfg b/owlps-positioning/cfg/owlps-positioning.cfg index 3ee1204..5ad76b5 100644 --- a/owlps-positioning/cfg/owlps-positioning.cfg +++ b/owlps-positioning/cfg/owlps-positioning.cfg @@ -45,6 +45,14 @@ csv-file = /tmp/owlps-positioning.log #algorithm = RADAR #algorithm = FRBHMBasic +# Start and stop coordinates for the MinMax multilateration method. +# Since MinMax is currently the only multilateration method implemented +# in OwlPS, you should define these parameters if you use any of the +# multilateration-based algorithms (InterlinkNetworks, FBCM, FRBHM). +# They are declared as strings (X;Y;Z). Do not quote! +#minmax-start = -2;-2;0 +#minmax-stop = 20;30;6 + [output] # This is the default output if none is specified. diff --git a/owlps-positioning/cfg/topology.csv b/owlps-positioning/cfg/topology.csv index 6c5d32c..9eac23f 100644 --- a/owlps-positioning/cfg/topology.csv +++ b/owlps-positioning/cfg/topology.csv @@ -2,10 +2,15 @@ # # IMPORTANT: # You need a precise topology description if you use algorithms that -# handle it. Since none of them are currenty implemented, you probably -# can save a lot of time by only providing a pseudo-area containing -# the whole deployment area in this file (in this case you will not -# declare any waypoint in the waypoints' definition file). +# handle it. Since none of them are currently implemented, you +# probably can save a lot of time by skipping the topology (and +# waypoints) description. +# +# ALSO IMPORTANT (EVEN IF YOU DON'T DESCRIBE THE TOPOLOGY): +# If you use the MinMax multilateration method, you should provide +# minmax-start and minmax-stop parameters that match the deployment +# area. That is, the cuboid formed by these two points should include +# the whole deployment area. # # This file lists the buildings and their "homogeneous areas" (rooms). # diff --git a/owlps-positioning/src/multilaterationalgorithm.cc b/owlps-positioning/src/multilaterationalgorithm.cc index 3dae101..85d5fba 100644 --- a/owlps-positioning/src/multilaterationalgorithm.cc +++ b/owlps-positioning/src/multilaterationalgorithm.cc @@ -1,6 +1,8 @@ #include "multilaterationalgorithm.hh" #include "minmax.hh" #include "mobile.hh" +#include "configuration.hh" +#include "posexcept.hh" using namespace std ; using std::tr1::unordered_map ; @@ -14,10 +16,20 @@ MultilaterationAlgorithm::MultilaterationAlgorithm(): request(NULL) { // Will be changed when other multilateration methods will be - // implemented - multilateration_method = new MinMax(Point3D(-0.5, -0.5, 0), - Point3D(10, 31.5, 6)) ; - // FIXME: minmax start and stop + // implemented. + + if (! Configuration::is_configured("positioning.minmax-start") || + ! Configuration::is_configured("positioning.minmax-stop")) + throw missing_configuration( + "You want to use MinMax, but either positioning.minmax-start or" + " positioning.minmax-stop is not defined!") ; + + Point3D minmax_start( + Configuration::string_value("positioning.minmax-start")) ; + Point3D minmax_stop( + Configuration::string_value("positioning.minmax-stop")) ; + + multilateration_method = new MinMax(minmax_start, minmax_stop) ; } diff --git a/owlps-positioning/src/userinterface.cc b/owlps-positioning/src/userinterface.cc index 5ac3f73..ed1c7e5 100644 --- a/owlps-positioning/src/userinterface.cc +++ b/owlps-positioning/src/userinterface.cc @@ -172,6 +172,12 @@ void UserInterface::fill_positioning_options() "Algorithms used to compute positions. You can specify \ this option more than once (but at least once). Allowed: Real, FBCM, \ FRBHMBasic, InterlinkNetworks, RADAR.") + ("positioning.minmax-start", po::value(), + "Coordinates of the start point of the MinMax multilateration \ +method (string format: \"X;Y;Z\").") + ("positioning.minmax-stop", po::value(), + "Coordinates of the stop point of the MinMax multilateration \ +method (string format: \"X;Y;Z\").") ; file_options->add(options) ;