[Positioner] Autocalib.: weight angle/coverage
In Stock::generate_reference_point(), the coverage percentage is now used along the angle to select the better APs.
This commit is contained in:
parent
5f26d7a28e
commit
427c88fd99
|
@ -513,23 +513,31 @@ void Stock::generate_reference_point(const Point3D &point)
|
||||||
|
|
||||||
/* Choose the 2 nearest APs in angle */
|
/* Choose the 2 nearest APs in angle */
|
||||||
const Point3D &rx_coord = rx->second.get_coordinates() ;
|
const Point3D &rx_coord = rx->second.get_coordinates() ;
|
||||||
multimap<double,
|
multimap<double, pair<double,
|
||||||
unordered_map<string, AccessPoint>::const_iterator>
|
unordered_map<string, AccessPoint>::const_iterator> >
|
||||||
sorted_angles ;
|
sorted_angles ;
|
||||||
for (unordered_map<string, AccessPoint>::const_iterator
|
for (unordered_map<string, AccessPoint>::const_iterator
|
||||||
ref = aps.begin() ; ref != aps.end() ; ++ref)
|
ref = aps.begin() ; ref != aps.end() ; ++ref)
|
||||||
{
|
{
|
||||||
if (ref == rx)
|
if (ref == rx)
|
||||||
continue ;
|
continue ;
|
||||||
|
|
||||||
|
float coverage =
|
||||||
|
rx->second.received_calibration_from_ap(ref->second) ;
|
||||||
// Skip the AP if it is not in coverage with the receiver AP:
|
// 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 ;
|
continue ;
|
||||||
|
|
||||||
double angle =
|
double angle =
|
||||||
rx_coord.angle(point, ref->second.get_coordinates()) ;
|
rx_coord.angle(point, ref->second.get_coordinates()) ;
|
||||||
|
double weight = angle / coverage ;
|
||||||
pair<double,
|
pair<double,
|
||||||
unordered_map<string, AccessPoint>::const_iterator>
|
unordered_map<string, AccessPoint>::const_iterator>
|
||||||
angle_ap(angle, ref) ;
|
angle_ap(angle, ref) ;
|
||||||
sorted_angles.insert(angle_ap) ;
|
pair<double, pair<double,
|
||||||
|
unordered_map<string, AccessPoint>::const_iterator> >
|
||||||
|
weight_angle_ap(weight, angle_ap) ;
|
||||||
|
sorted_angles.insert(weight_angle_ap) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sorted_angles.size() < 2)
|
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 */
|
/* Compute the angle weight of the 2 reference APs */
|
||||||
map<double,
|
map<double, pair<double,
|
||||||
unordered_map<string, AccessPoint>::const_iterator>
|
unordered_map<string, AccessPoint>::const_iterator> >
|
||||||
::const_iterator s = sorted_angles.begin() ;
|
::const_iterator s = sorted_angles.begin() ;
|
||||||
// Angle REF1-RX-P
|
// Angle REF1-RX-P
|
||||||
double ref1_angle = s->first ;
|
double ref1_angle = s->second.first ;
|
||||||
const AccessPoint &ref1 = s->second->second ;
|
const AccessPoint &ref1 = s->second.second->second ;
|
||||||
++s ;
|
++s ;
|
||||||
const AccessPoint &ref2 = s->second->second ;
|
const AccessPoint &ref2 = s->second.second->second ;
|
||||||
|
|
||||||
// Angle REF1-RX-REF2
|
// Angle REF1-RX-REF2
|
||||||
const Point3D &ref1_coord = ref1.get_coordinates() ;
|
const Point3D &ref1_coord = ref1.get_coordinates() ;
|
||||||
|
|
Loading…
Reference in New Issue