вторник, 2 ноября 2010 г.

NXT-G: один нюанс при использовании блоков Move/Motor и Wait

NXT-G можно воистину считать языком программирования очень высокого уровня - уровень абстракции на нем очень высок. Каждая инструкция/команда на этом языке помимо возможности выполнять свою основную задачу, имеет несколько особенностей и нюансов.

Примером является семейство блоков Wait.
Точнее, ему лучше подходит название Wait Until. Что по-русски, можно перевести как "ждать до тех пор, пока не ...".
Т.е. конструкция типа

может быть проинтепретирована, как "двигаться бесконечно до тех пор, пока не истечет одна секунда".
А что произойдет, когда секунда истечет? Вот здесь и сокрыт нюанс.

Когда блок Wait находит, что в ходе движения условие ожидания достигнуто, он дает команду отключить от моторов питание. На практике это означает, что робот все еще продолжает двигаться по инерции после того, как условие выполнилось. Чем выше была скорость передвижения, тем дальше проедет.

Очевидно, что есть такие задачи, где движение после выполнения условия ожидания является излишним и даже вредным. Например, при пересечении линии, робот должен был остановиться на ней, чтобы продолжить движение уже по ней, на самом же деле он по инерции пролетает за линию, и движение по ней уже становиться невозможным.

Поэтому, в такой ситуации рекомендуется всегда явно останавливать моторы робота (и использовать Brake торможение, а не Coast):

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...