[Positioning] Fix FBCM with autocalibration

Regenerate Friis indexes at each call of the algorithm when
autocalibration is used (without this fix, FBCM given always the same
result autocalibration activated, because of the Friis indexes equal to
zero).
This commit is contained in:
Matteo Cypriani 2011-08-01 20:28:43 +02:00
parent 6167f664e8
commit 2c887899b3
5 changed files with 25 additions and 3 deletions

1
TODO
View File

@ -69,7 +69,6 @@
* Positioning
- Known bugs
° FBCM always gives the same result.
° Cannot compute the error (Real) with autocalibration requests.
- Algorithms

View File

@ -298,7 +298,9 @@ $(OBJ_DIR)/minmax.o: \
$(OBJ_DIR)/interlinknetworks.o: \
$(OBJ_DIR)/multilaterationalgorithm.o
$(OBJ_DIR)/fbcm.o: \
$(OBJ_DIR)/multilaterationalgorithm.o
$(OBJ_DIR)/multilaterationalgorithm.o \
$(OBJ_DIR)/configuration.o \
$(OBJ_DIR)/stock.o
$(OBJ_DIR)/frbhmbasic.o: \
$(OBJ_DIR)/radar.o \
$(OBJ_DIR)/fbcm.o

View File

@ -1,7 +1,19 @@
#include "fbcm.hh"
#include "stock.hh"
#include "configuration.hh"
Result FBCM::compute(const Request &_request)
{
// If the autocalibration is activated, we have to regenerate the
// Friis indexes each time we calculate a position
if (Configuration::bool_value("positioning.generate-reference-points"))
Stock::update_all_friis_indexes() ;
return MultilaterationAlgorithm::compute(_request) ;
}
float FBCM::estimate_distance(const Measurement &measurement)
{
double constant_term = make_constant_term(measurement) ;

View File

@ -13,7 +13,11 @@ public:
FBCM(void): PositioningAlgorithm("FBCM") {}
~FBCM(void) {}
/** @name Operations */
//@{
Result compute(const Request &_request) ;
float estimate_distance(const Measurement &measurement) ;
//@}
} ;
#endif // _OWLPS_POSITIONING_FBCM_HH_

View File

@ -61,7 +61,12 @@ void Positioning::initialise_algorithms()
else if (*i == "FBCM")
{
Stock::update_all_friis_indexes() ;
// Generate the Friis indexes only if the autocalibration is
// not activated (if it is, Friis indexes will be regenerated
// each time FBCM wants to computes a position)
if (! Configuration::
bool_value("positioning.generate-reference-points"))
Stock::update_all_friis_indexes() ;
algorithms.push_back(new FBCM) ;
}