Sanify the format posedge+negedge values are passed in.
Previously, everything which dealt with them either had to combine the
three separate sources or split them apart, which made no sense.
Change-Id: Ibcd9dc48f83ab7372fe46dc5d0a6483b281a08f0
diff --git a/y2014/control_loops/claw/claw.cc b/y2014/control_loops/claw/claw.cc
index 4f9fe2b..00c4341 100644
--- a/y2014/control_loops/claw/claw.cc
+++ b/y2014/control_loops/claw/claw.cc
@@ -211,8 +211,6 @@
name_(name),
motor_(motor),
zeroing_state_(UNKNOWN_POSITION),
- posedge_value_(0.0),
- negedge_value_(0.0),
encoder_(0.0),
last_encoder_(0.0) {}
@@ -234,18 +232,52 @@
::std::min(min_hall_effect_off_angle_, claw.position);
max_hall_effect_off_angle_ =
::std::max(max_hall_effect_off_angle_, claw.position);
- } else if (any_sensor_triggered && !any_triggered_last_) {
- // Saw a posedge on the hall effect. Reset the limits.
- min_hall_effect_on_angle_ = ::std::min(claw.posedge_value, claw.position);
- max_hall_effect_on_angle_ = ::std::max(claw.posedge_value, claw.position);
- } else if (!any_sensor_triggered && any_triggered_last_) {
- // Saw a negedge on the hall effect. Reset the limits.
- min_hall_effect_off_angle_ = ::std::min(claw.negedge_value, claw.position);
- max_hall_effect_off_angle_ = ::std::max(claw.negedge_value, claw.position);
}
- posedge_value_ = claw.posedge_value;
- negedge_value_ = claw.negedge_value;
+ if (front_.is_posedge()) {
+ // Saw a posedge on the hall effect. Reset the limits.
+ min_hall_effect_on_angle_ =
+ ::std::min(claw.front.posedge_value, claw.position);
+ max_hall_effect_on_angle_ =
+ ::std::max(claw.front.posedge_value, claw.position);
+ }
+ if (calibration_.is_posedge()) {
+ // Saw a posedge on the hall effect. Reset the limits.
+ min_hall_effect_on_angle_ =
+ ::std::min(claw.calibration.posedge_value, claw.position);
+ max_hall_effect_on_angle_ =
+ ::std::max(claw.calibration.posedge_value, claw.position);
+ }
+ if (back_.is_posedge()) {
+ // Saw a posedge on the hall effect. Reset the limits.
+ min_hall_effect_on_angle_ =
+ ::std::min(claw.back.posedge_value, claw.position);
+ max_hall_effect_on_angle_ =
+ ::std::max(claw.back.posedge_value, claw.position);
+ }
+
+ if (front_.is_negedge()) {
+ // Saw a negedge on the hall effect. Reset the limits.
+ min_hall_effect_off_angle_ =
+ ::std::min(claw.front.negedge_value, claw.position);
+ max_hall_effect_off_angle_ =
+ ::std::max(claw.front.negedge_value, claw.position);
+ }
+ if (calibration_.is_negedge()) {
+ // Saw a negedge on the hall effect. Reset the limits.
+ min_hall_effect_off_angle_ =
+ ::std::min(claw.calibration.negedge_value, claw.position);
+ max_hall_effect_off_angle_ =
+ ::std::max(claw.calibration.negedge_value, claw.position);
+ }
+ if (back_.is_negedge()) {
+ // Saw a negedge on the hall effect. Reset the limits.
+ min_hall_effect_off_angle_ =
+ ::std::min(claw.back.negedge_value, claw.position);
+ max_hall_effect_off_angle_ =
+ ::std::max(claw.back.negedge_value, claw.position);
+ }
+
last_encoder_ = encoder_;
if (front().value() || calibration().value() || back().value()) {
last_on_encoder_ = encoder_;
@@ -399,18 +431,18 @@
} else {
const double average_last_encoder =
(min_hall_effect_off_angle_ + max_hall_effect_off_angle_) / 2.0;
- if (posedge_value_ < average_last_encoder) {
+ if (this_sensor.posedge_value() < average_last_encoder) {
*edge_angle = angles.upper_decreasing_angle;
LOG(INFO, "%s Posedge upper of %s -> %f posedge: %f avg_encoder: %f\n",
- name_, hall_effect_name, *edge_angle, posedge_value_,
+ name_, hall_effect_name, *edge_angle, this_sensor.posedge_value(),
average_last_encoder);
} else {
*edge_angle = angles.lower_angle;
LOG(INFO, "%s Posedge lower of %s -> %f posedge: %f avg_encoder: %f\n",
- name_, hall_effect_name, *edge_angle, posedge_value_,
+ name_, hall_effect_name, *edge_angle, this_sensor.posedge_value(),
average_last_encoder);
}
- *edge_encoder = posedge_value_;
+ *edge_encoder = this_sensor.posedge_value();
found_edge = true;
}
}
@@ -421,18 +453,18 @@
} else {
const double average_last_encoder =
(min_hall_effect_on_angle_ + max_hall_effect_on_angle_) / 2.0;
- if (negedge_value_ > average_last_encoder) {
+ if (this_sensor.negedge_value() > average_last_encoder) {
*edge_angle = angles.upper_angle;
LOG(INFO, "%s Negedge upper of %s -> %f negedge: %f avg_encoder: %f\n",
- name_, hall_effect_name, *edge_angle, negedge_value_,
+ name_, hall_effect_name, *edge_angle, this_sensor.negedge_value(),
average_last_encoder);
} else {
*edge_angle = angles.lower_decreasing_angle;
LOG(INFO, "%s Negedge lower of %s -> %f negedge: %f avg_encoder: %f\n",
- name_, hall_effect_name, *edge_angle, negedge_value_,
+ name_, hall_effect_name, *edge_angle, this_sensor.negedge_value(),
average_last_encoder);
}
- *edge_encoder = negedge_value_;
+ *edge_encoder = this_sensor.negedge_value();
found_edge = true;
}
}
@@ -716,7 +748,7 @@
bottom_claw_.back())) {
// do calibration
bottom_claw_.SetCalibration(
- position->bottom.posedge_value,
+ position->bottom.calibration.posedge_value,
values.claw.lower_claw.calibration.lower_angle);
bottom_claw_.set_zeroing_state(ZeroedStateFeedbackLoop::CALIBRATED);
// calibrated so we are done fine tuning bottom
@@ -772,7 +804,7 @@
top_claw_.front(), top_claw_.back())) {
// do calibration
top_claw_.SetCalibration(
- position->top.posedge_value,
+ position->top.calibration.posedge_value,
values.claw.upper_claw.calibration.lower_angle);
top_claw_.set_zeroing_state(ZeroedStateFeedbackLoop::CALIBRATED);
// calibrated so we are done fine tuning top