Вычитание и fabs работают, затем не работают при запуске программы - PullRequest
1 голос
/ 22 января 2012

О.К., я схожу с ума, пытаясь выяснить, что происходит. У меня есть инструкция case в основном цикле (состояние 6 относится к регистру в примере вывода ниже). Какое-то время все работает нормально, затем я начинаю получать результаты с ошибками, где простое вычитание дает неправильный результат. Вот фрагмент кода:

  case turning:
Serial.print("state: ");
Serial.print(state);
Serial.print("Waypoint: ");
Serial.print(waypointIndex);
Serial.print(" Location: ");
Serial.print(location.x);
Serial.print("   ");
Serial.print(location.y);
Serial.print(" heading: ");
Serial.print(heading);
Serial.print("target heading: ");
Serial.print(targetHeading);
Serial.print(" heading delta: ");
headingDelta = fabs(heading-targetHeading);
Serial.print(headingDelta);
Serial.print("small? ");
Serial.print((headingDelta<0.25));
Serial.print("\n");

if (headingDelta < 0.25) {
  Stop();
  state = travel;
}
else {
  if (turn>=0) {
    Left(255,255);  // turn left
  }
  else {
    Right(255,255);  // turn right
  }
}
break;

Вот часть вывода:

state: 6Waypoint: 2 Location: 111.98   18.12 heading: 0.95target heading: 1.57 heading delta: 0.62small? 0

state: 6Waypoint: 2 Location: 111.98   18.12 heading: 0.95target heading: 1.57 heading delta: 0.62small? 0

state: 6Waypoint: 2 Location: 111.98   18.12 heading: 1.35target heading: 1.57 heading delta: 0.22small? 1

state: 6Waypoint: 3 Location: 142.73   47.69 heading: 0.55target heading: 0.00 heading delta: 0.00small? 0

state: 6Waypoint: 3 Location: 142.73   47.69 heading: 0.55target heading: 0.00 heading delta: 0.00small? 0

state: 6Waypoint: 3 Location: 142.73   47.69 heading: 0.55target heading: 0.00 heading delta: 0.00small? 0

С 4-м выходом внезапно мой headingDelta печатает как ноль, когда ясно, что это не так, и все же логическая проверка того, является ли она маленькой, говорит, что она не мала!

Я вырываю волосы. В чем дело? Это на плате Romeo, которая является платой ATmega328, совместимой с Arduino.

1 Ответ

1 голос
/ 22 января 2012

Похоже, что targetHeading стало NaN или +/-Inf и что Serial.print(...) просто выводит 0.0, когда встречает одно из этих значений. Возможно, вы где-то делите на 0 при расчете targetHeading.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...