четверг, 7 октября 2010 г.

NXT-G: тонкости использования блоков Move и Motor

Несколько практических советов об использовании блоков Move и Motor.

За основу взята дискуссия на www.legoleaguecoaching.org.

Когда вы программируете вашего робота, блок Motor будет самым используемым в вашей программе. У вас есть несколько вариантов относительно того, как запрограммировать расстояние, на которое будет двигаться ваш робот. Т.е. вы можете выбрать: количество оборотов двигателя (rotations), количество градусов для поворота двигателя (degrees) или же количество секунд (seconds).

Вопрос первый: Задавать ли количество секунд для движения на заданное расстояние?

Простого ответа нет. Все зависит от того, что вы хотите достичь.

Очевидный минус - каждый раз, когда вы будете запускать робота, он будет проезжать за то же количество секунд меньше расстояние.
Например, пусть вы запускаете моторы на 5 секунд, за которые робот может проехать 30 см. в первой попытке. Но чем чаще вы будете запускать робота, тем скорее обнаружите, что робот проезжает 27 см., потом 25 см, а затем и того меньше. Причиной является зарад батарей. Так как с каждым запуском, заряд батарей тратится на движение, и в следующие попытки все меньше и меньше энергии передается на моторы, т.е. моторы могут выполнить меньшее количество оборотов за то же время.

В то же время есть определенный плюс. Например, робот двигается в сложных условиях (часты преграды, неровные поверхности). В таком случае, использование времени в качестве меры вращения двигателя позволит вам на усложнять программу дополнительыми проверками на столкновения робота с препятствиями - моторы просто сами остановятся через некоторое время после столкновения. Иначе же ваши моторы пи столкновении просто перестанут вращаться и момент когда они провернуться на нужное количество оборотов или градусов может не наступить никогда - ваша программа застрянет.

Вопрос второй: что использовать - количество оборотов или градусов?

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

Тогда в таких случаях можно указывать угол поворота двигателя в градусах. Т.е. вместо дробных значений можно будет использовать целые числа. К тому же обычно вам не нужно указывать угол с точностью до одного градуса - округление до ближайшего значения кратного 5 будет достаточно.
Следует также отметить, что градусы в тайне от вас используются даже тогда когда вы указываете количество оборотов - конвертация происходит автоматически в ходе компиляции программы.
И наконец, если вы используете каналы данных (data wires), то вы просто не сможете использовать обороты. Соответствующий вход отвечающий за продолжительность движения в блоках Move и Motor. всегда подразумевает, что продолжительность задается в градусах. Даже если вы явно выставите обороты в качестве продолжительности движения и через канал данных придет 1, то мотор сдвинется на один градус, а не на один оборот. Примите во внимание, что сенсор поворота, также возвращает градусы. Т.е. если вы в своей программы последовательны и везде используете градусы, вам не нужно будет изменять что-то, чтобы начать использовать сенсоры поворота и каналы данных.

1 комментарий:

  1. Спасибо, прояснили ситуацию с градусами в каналах данных, я никак не мог понять, почему мотор не ехал

    ОтветитьУдалить

Related Posts Plugin for WordPress, Blogger...