Компас: от 359 до 0 градусов - PullRequest
6 голосов
/ 05 апреля 2011

Я пытаюсь переместить робота с помощью компаса. Мы используем компас, чтобы робот двигался по прямой линии, он использует 2 колеса, и они двигаются немного по-другому. Поэтому мы устанавливаем значение от 0 до 359 в качестве направления, а затем проверяем текущее направление, вычисляем ошибку и исправляем ее. Как ошибка = current_direction - фактическое направление.

Проблема в том, что если, например, наше направление инициализации составляет 90 градусов, а наш робот - в 45, ошибка будет 45, и она исправит это. Если это 0, ошибка будет 90, и это исправит это. Проблема в том, что если он перемещается чуть больше 0 и, например, достигает 359, ошибка будет -269, поэтому вместо перемещения в одном направлении на 90 он будет двигаться в -269 в другом.

Я использую знак ошибки, чтобы решить, какое колесо двигаться, чтобы зафиксировать направление. есть идеи как это исправить?

Ответы [ 4 ]

6 голосов
/ 05 апреля 2011
if (error > 180) {
   error -= 360;
}

if (error < -180) {
   error += 360;
}
2 голосов
/ 05 апреля 2011

, если ваша ошибка больше 180 °, вы должны увеличить ее с 360 и инвертировать знак. При этом вы можете быть уверены, что ваш робот всегда будет двигаться в кратчайшем направлении.

1 голос
/ 05 апреля 2011

Я мало что знаю о NXT и Mindstorm, но в основном это распространенная проблема при круговых движениях. Вы можете просто использовать две разные системы координат и переводить между ними, это самый элегантный способ. В противном случае вы можете вычесть 360 из вашей ошибки, если знак отрицательный, но это взломанный и не элегантный способ решения проблемы; -)

1 голос
/ 05 апреля 2011

Если ваша ошибка> 180 градусов, просто переключите алгоритм коррекции, чтобы рассчитать коррекцию, двигаясь в противоположном направлении. Простое выражение if-else должно подойти.

...