В предыдущем параграфе Вы узнали о программировании движения робота. Но робот может двигаться не только по прямой линии. Часто возникает необходимость в программировании поворотов, например, при прохождении роботом лабиринта или при движении по квадратному полю. В зависимости от задачи необходимо определиться, какая колесная база будет лучше подходить для ее выполнения. Если рассматривать сборку робота по танковой схеме, то перемещением робота занимаются как минимум два двигателя, отвечающих за движение колес каждый со своей стороны: один отвечает за вращение колес/гусениц на левой стороне, другой - на правой. При такой сборке для разработчиков доступны два способа разворота (для простоты, рассмотрим разворот на месте): - вращая колеса/гусеницы, расположенные с одной стороны, робот вращается вокруг оси, проходящей через «неподвижную» сторону; - вращая колеса/гусеницы с обеих сторон, с левой стороны в одну сторону, с правой - в другую, робот вращается вокруг оси, проходящей через его центр. Каждый из способов имеет свои преимущества и недостатки, которые можно оценивать по разному. То есть в зависимости от анализа конкретного задания, необходимо определять, какие преимущества важны для конкретного робота и какими недостатками можно пренебречь.
Рис. 113 Расчет пройденного расстояния в зависимости от траектории движения колес Скорость выполнения разворота. Если рассматривать одного и того же робота, то скорость разворота двумя моторами будет быстрее. Это связано с тем, что в случае с разворотом одним колесом, колесу нужно проехать большее расстояние (в 2 раза), чем при развороте двумя колесами. Т.е. в первом случае роботу придется включать двигатели на больший промежуток времени (рис 113). Точность выполнения разворота. Отчасти, это покрывает правильный выбор колесной базы. Но, тем не менее, следует добавить, что при развороте одним колесом генерируется (создается) ошибка вращения только на нем. В то время как при развороте двумя колесами, когда каждое из них будет источником ошибок, они могут как компенсировать друг друга, так и усиливать. Например, при недовороте обоих колес, робот будет еще больше удален от предполагаемого направления движения. Следовательно, можно сказать, что разворот одним колесом - более точен по сравнению с поворотом сразу двумя колесами. Пространство разворота. Если еще раз взглянуть на схемы, приведенные выше, то можно заметить, что при развороте одним колесом следующее после разворота движение прямо смещено относительно места начала поворота. Т.е. для выполнения разворота роботу нужно свободное пространство впереди него. Конечно, если места нет, всегда можно использовать разворот движением вперед, а не назад. Но это, в общем случае, приводит к усложнению программы. Разворот же двумя колесами почти лишен этого недостатка, поскольку разворот робота происходит вокруг его оси - места до разворота и после практически совпадают. Как итог, можно дать такую рекомендацию: если развороты нужно выполнять быстро, и неточности в выполнении разворота несущественны, то разворачиваться лучше двумя моторами; если для разворотов всегда есть место и при их выполнении важна скорее точность, чем скорость, то следует обдумать разворот только одним мотором. Еще одним важным моментом является скорость движения робота до, во время и после выполнения разворота. В разобранных ранее примерах программ мощность моторов, и, соответственно, скорость робота была постоянной (за исключением плавной остановки при помощи параметра NextAction). Это не всегда удобно, поскольку на большой скорости робот может неточно пройти поворот, а если скорость будет изначально мала, робот будет двигаться слишком медленно. Решить эту задачу поможет программирование движения с ускорением. Отметим также, что для программирования поворота достаточно рассинхронизировать моторы, т.е. снизить мощность на одном из них, оставив мощность второго без изменения. Тогда робот совершит поворот в сторону замедленного мотора. Рассмотрим подробнее вопрос об ускорении. Ускорение – это величина, показывающая изменение скорости в единицу времени (например, за 1 секунду). При равноускоренном движении ускорение – постоянная величина, на которую увеличивается (при разгоне) или уменьшается (при торможении) скорость робота. Движение с ускорением можно запрограммировать, соединив в программе последовательно несколько блоков Move (Движение), на каждом из которых задать мощность большую (меньшую), чем на предыдущем. Но есть и другой способ, более простой – программный код будет выглядеть короче, а ускорение будет всегда равномерным. В этом случае используем блок Motor (Мотор), параметр Action (Действие) которого как раз отвечает за тип работы мотора. Однако следует помнить, что команда Motor позволяет контролировать одновременно только один мотор робота. Вам придется использовать в программе два одинаковых блока Motor с той лишь разницей, что один из них будет отвечать за контроль правого мотора, а второй – левого. Составим программу прямолинейного движения робота с ускорением. Пусть робот начинает движение и постепенно наращивает мощность моторов от 0 до 100, а затем плавно останавливается. Вам придется учесть несколько важных моментов. Во-первых, команды начала движения должны быть поданы на моторы одновременно, как и команды увеличения мощности. Если этого не сделать, робот не будет двигаться по прямой линии, а начнет уклоняться от курса. Чтобы избежать отклонений, необходимо в первом установленном в программу блоке Motor (Мотор) убрать флажок «Wait for Completion» (Ждать завершения), о назначении которого говорилось ранее. Во-вторых, поскольку моторами управляют разные командные блоки, необходимо синхронизировать их работу. Иными словами, нужно установить контроль наращивания мощности на обоих моторах, чтобы оно происходило равномерно. В этом Вам поможет параметр Control, в котором необходимо установить флажок «MotorPower» (Мощность мотора). Запустите программное обеспечение LegoMindstormsNXT и создайте новый документ. Назовите его PrMove2.rbt. Затем перенесите на рабочее поле два блока Motor (Мотор) и установите значения параметров так, как показано на рисунке 114. Обратите внимание на порядок следования блоков в программе. А. В. С. Рис. 114 Программа равноускоренного движения робота Загрузите полученную программу на микроконтроллер NXT. Запустите программу и пронаблюдайте ее работу.
Итак, Вы познакомились с программированием ускоренного движения. Но до сих пор Ваш робот двигался только по прямой линии. Изменим это обстоятельство, заставив робота разворачиваться в конце пути и следовать в обратном направлении. Стоит заметить, что робот может двигаться назад, если установить соответствующее значение в параметре Direction (Направление). Но иногда возникают ситуации, когда необходимо развернуть робота, чтобы он двигался вперед своей лицевой частью. Применим полученные при изучении данного параграфа знания. Ранее упоминалось, что для совершения поворота роботу достаточно снизить мощность на одном из моторов. Проверим данную гипотезу. Создайте новый документ с именем PrMove3.rbt и скопируйте в него программу из файла PrMove2.rbt. Теперь добавим блок, который будет отвечать за разворот робота. Пусть в данном случае робот выполнит разворот на месте, для чего достаточно просто отключить подачу мощности на один из двигателей. Это удобнее всего сделать в блоке Move (Движение), передвинув бегунок в параметре Steering (Управление рулем) до упора влево или вправо (рис. 116). Рис. 116 Настройка параметров блока Move Чтобы после разворота робот продолжил движение и вернулся в исходную точку, скопируйте два первых блока Motor (Мотор) и поместите их после команды Move (Движение) в программу. В итоге получится цепочка блоков, изображенная на рисунке 117. Рис. 117 Общий вид программы движения «Бумеранг»
Примечание: С тех пор, как мы начали рассматривать более-менее сложные программы, возникла необходимость запоминать назначение каждого блока и весь алгоритм в целом. Однако проще и удобнее было бы записать все это так, чтобы подсказки были внутри каждой программы, и их не приходилось искать в случае надобности. Это возможно благодаря комментированию кода. Комментарии могут содержать абсолютно любой текст, который никак не повлияет на работу программы. Для добавления комментария в NXT-G достаточно дважды щелкнуть мышью на свободной части поля и ввести текст с клавиатуры. Итак, Вы узнали, каким образом заставить робота совершить разворот. Но если изменить его конструкцию, поворачивать он будет иначе. Угол поворота зависит от расстояния между колесами, от используемых шин либо гусениц. Поэтому в разных случаях программирование поворотов должно быть разным. Представьте, что Ваш робот проходит узкий лабиринт с поворотами. Чтобы он не врезался в стену, необходимо предусмотреть правильный угол поворота. Варианты программирования могут быть следующими: снижение мощности на одном моторе, выключение одного мотора, вращение моторов в разные стороны. Соберите несколько различных конструкций и проверьте все варианты поворотов на каждой из них.
Практическая работа №2 – «Квадрат»: Составьте программу движения робота по квадрату. Для этого он должен проезжать равные расстояния по прямым линиям (сторонам квадрата) и совершать повороты в одном и том же направлении на угол 90 градусов. Перед совершением поворота робот должен снижать скорость движения до 30%, а при движении по прямой – наращивать ее до 70%. Комментарии к заданию Чтобы не копировать в программе четыре одинаковых последовательности команд, можно поместить эти команды в блок Loop (Цикл) и установить следующие параметры цикла: - тип - счетчик; - количество повторений – 4; Протестируйте созданную программу. При необходимости внесите в нее изменения.
Практическая работа №3 – «Движение по траектории»: Составьте программу движения по замкнутой кривой линии. Например, по «восьмерке» (рис. 118). Рис. 118 Траектория движения робота Комментарии к заданию Чтобы робот двигался по кривой, изменяйте значения параметра Steering (Управление рулем) блока Move (Движение) либо воспользуйтесь возможностью команды Motor (Мотор), устанавливая на каждый мотор свое значение мощности. Протестируйте созданную программу. При необходимости внесите в нее изменения.
Практическая работа №4 – «Змейка»: Составьте программу движения по линии «змейка». Эта программа может быть выполнена в двух вариантах (рис. 119). Рис. 119 Траектория движения робота Комментарии к заданию Составьте оба варианта программы, чтобы убедиться, что Вы усвоили приемы работы с разворотами. Во втором случае для программирования резкого разворота попробуйте отключить подачу мощности на один из моторов. Тогда робот повернется вокруг своей оси практически на одном месте. Протестируйте созданные программы. При необходимости внесите в них изменения. |
Поделиться с друзьями: