From 427c88fd9956a3561d8b67bfec3f95cb2f9a6e2a Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Thu, 29 Dec 2011 17:09:25 +0100 Subject: [PATCH] [Positioner] Autocalib.: weight angle/coverage In Stock::generate_reference_point(), the coverage percentage is now used along the angle to select the better APs. --- owlps-positioner/src/stock.cc | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/owlps-positioner/src/stock.cc b/owlps-positioner/src/stock.cc index 77461bb..07fd0be 100644 --- a/owlps-positioner/src/stock.cc +++ b/owlps-positioner/src/stock.cc @@ -513,23 +513,31 @@ void Stock::generate_reference_point(const Point3D &point) /* Choose the 2 nearest APs in angle */ const Point3D &rx_coord = rx->second.get_coordinates() ; - multimap::const_iterator> + multimap::const_iterator> > sorted_angles ; for (unordered_map::const_iterator ref = aps.begin() ; ref != aps.end() ; ++ref) { if (ref == rx) continue ; + + float coverage = + rx->second.received_calibration_from_ap(ref->second) ; // Skip the AP if it is not in coverage with the receiver AP: - if (! rx->second.received_calibration_from_ap(ref->second)) + if (coverage < 1) // Less than 1% coverage is ridiculous! continue ; + double angle = rx_coord.angle(point, ref->second.get_coordinates()) ; + double weight = angle / coverage ; pair::const_iterator> angle_ap(angle, ref) ; - sorted_angles.insert(angle_ap) ; + pair::const_iterator> > + weight_angle_ap(weight, angle_ap) ; + sorted_angles.insert(weight_angle_ap) ; } if (sorted_angles.size() < 2) @@ -541,14 +549,14 @@ void Stock::generate_reference_point(const Point3D &point) } /* Compute the angle weight of the 2 reference APs */ - map::const_iterator> + map::const_iterator> > ::const_iterator s = sorted_angles.begin() ; // Angle REF1-RX-P - double ref1_angle = s->first ; - const AccessPoint &ref1 = s->second->second ; + double ref1_angle = s->second.first ; + const AccessPoint &ref1 = s->second.second->second ; ++s ; - const AccessPoint &ref2 = s->second->second ; + const AccessPoint &ref2 = s->second.second->second ; // Angle REF1-RX-REF2 const Point3D &ref1_coord = ref1.get_coordinates() ;