Рис. 8.45. Пример самодельного поля для движения по линии. На рис. 8.46 приведен пример траектории для состязаний по прави- лам Открытого турнира на кубок Политехнического музея (г. Москва). Ширина линии составляет 5 см, а минимальный радиус кривизны ¾ 30 см. Актуальные регламенты состязаний размещены на сайте https://railab.ru. Регламент состязаний «Гонки по линии» и само поле в векторном формате можно найти на сайте https://myrobot.ru 1 Рис. 8.46. Поле для состязаний «Гонки по линии». 1 https://myrobot.ru/sport/index.php?n=Reglaments.LineFollowing 250 Путешествие по комнате Маленький исследователь Естественно, нормальная среда обитания для робота, построенного из домашнего конструктора, — это комната с мебелью. И для начала неплохо было бы научиться путешествовать по ней, по возможности не натыкаясь на предметы и не застревая. Подходящая конструкция для такого робота — это трех- колесная тележка с установ- ленным ультразвуковым дат- чиком наверху (рис. 8.78). Данный датчик следует распо- ложить строго горизонтально относительно пола, иначе лю- бая соринка может быть вос- принята как непреодолимое препятствие или, наоборот, что-то серьезное не будет за- мечено. Более простой вариант конструкции (рис. 8.79) можно построить на основе тележки, которая рассматривалась в главе 3. Программа очень похожа алгоритм на путешествия в круге. Меняется лишь датчик (рис. 8.80). Рис. 8.79. Датчик, прикрепленный к корпусу тележки, должен смотреть стро- го горизонтально. Рис. 8.78. Маленький исследователь из набора 9797 с ультразвуковым датчиком.
251 Рис. 8.80. Алгоритм путешествия по комнате. Можно сделать несколько короче, если заменить отъезд назад с по- воротом на месте одним действием: плавным поворотом задним ходом (рис. 8.81). Рис. 8.81. Алгоритм путешествия по комнате с поворотом задним ходом. Правда, в некоторых условиях такой поворот может привести к не- большой аварии, так что будьте с ним осторожнее. Кстати, и в первой и во второй программах следует подобрать свои параметры для расстоя- ния до предметов и длительности поворотов. Защита от застреваний Присмортревшись к поведению робота повнимательнее, можно за- метить, что не все предметы на пути попадают в его поле зрения. На- пример, если препятствие достаточно низкое, то ультразвуковой датчик его может не заметить. Или покрытая тканевой обивкой поверхность вовсе поглощает ультразвуковые сигналы, т. е. не отражает их на чувст- вительный элемент. Не увидев препятствие (тапок или ножку стула), робот может за- стрять и будет бесконечно пытаться продолжать движение вперед. Од- нако если поразмыслить, можно прийти к выводу, что в комнате движе- ние не должно быть бесконечным. Скажем, от одной стенки до другой робот может доехать за 10 с. Если за это время он не увидит ни одного препятствия, можно с уверенностью утверждать, что произошло застре- вание и надо предпринять экстренные меры. Что же делать? Ничего особенного. Просто отъехать назад и развернуться. Поможет в этом «сторожевой таймер» (рис. 8.82). Такие устройства применяются в мик- роконтроллерах и защищают их от зависаний. 252 Рис. 8.82. Если на сторожевом таймере «натикает» 10 с, включается защита от застреваний. Можно заметить в нашей программе повторяющиеся группы бло- ков. Их стоит объединить в подпрограмму, которая будет осуществлять отъезд назад с разворотом (рис. 8.83). Таким образом, подпрограмма отъезда будет вызываться в двух случаях: 1) при наличии препятствия, 2) при срабатывании сторожевого таймера. Рис. 8.83. Защита от застреваний с использованием подпрограмм. Но в этой программе есть один существенный недостаток. Из двух параллельных задач происходит обращение к одним и тем же моторам. Если эти обращения совпадут во времени, может возникнуть непредви- денное поведение робота. В чем-то это даже интересно. Но наиболее корректная программа описана в следующем разделе.
256 ОбъездпредметовНовая конструкция Первые шаги к объезду предметов сделаны в главе «Алгоритмы управления». Движение вдоль стены с небольшими отклонениями воз- можно с помощью ПД-регулятора. Однако описанный робот сможет объезжать стены только при малых отклонениях от прямой линии. При резких изгибах робот может потерять контакт со стеной и начать кру- титься на месте. Эту проблему можно отчасти разрешить конструктивно. Рассмотрим вариант, при котором на пути движения будут возникать серьезные повороты, вплоть до пря- мых углов. Потребуется внести моди- фикации и в конструкцию, и в про- грамму. Во-первых, робот должен будет смотреть не только направо, но и впе- ред. Ставить второй дальномер до- вольно затратно. Однако можно вос- пользоваться эффектом того, что ультразвуковой датчик имеет расши- ряющуюся область видимости (рис. 8.89). Это напоминает перифе- рийное зрение человека: кое-что он может увидеть краем глаза. Учитывая это свойство, разместим датчик рас- стояния не перпендикулярно курсу движения, а под острым углом (рис. 8.90 ¾8.91). Так можно «убить сразу двух зайцев». Во-первых, робот будет видеть препятствия спереди; во-вторых, более стабильно будет придерживаться курса вдоль стены, постоянно находясь на грани види- мости. Таким образом без добавления новых устройств можно более эффективно использовать возможности дальномера. Важное замечание. При старте робота его надо будет направлять датчиком строго на стену, чтобы считывание начального значения про- шло без помех. Рис. 8.89. Датчик расстояния ус-танавливается под острым углом к направлению движения. 257 Рис. 8.90. Крепление размещается на левой стороне. Как и в первой конст- рукции, датчик располагается вертикально. Рис. 8.91. Увеличенное за счет корпуса робота расстояние до стены способст- вует расширению области обзора. Очевидно, что изменение конструкции влечет изменение коэффи- циентов регулятора k1 и k2. Обычно подбор начинается с пропорцио- нального коэффициента при нулевом дифференциальном. Когда дос- тигнута некоторая стабильность на небольших отклонениях, добавляет- ся дифференциальная составляющая. Поворот за угол Следующим шагом необходимо ограничить реакцию робота на «бесконечность». Как известно, когда в поле видимости нет объекта, показания датчика расстояния NXT равны 250 или 255 см. Если это число попадает на пропорциональный регулятор, робот начинает кру-
258 титься на месте. А в ситуации, когда роботу следует завернуть за угол, именно это и произойдет. Для объезда предметов потребуется ввести контроль показаний датчика расстояния: при резком изменении робот должен делать вывод о возможном повороте, который надо будет производить с другими ко- эффициентами или просто с постоянным значением управляющего воз- действия. Рассмотрим пример поворота направо «за угол» (рис. 8.92). Если робот движется на расстоянии L от стены, то и поворот, очевидно, он будет выполнять по окружности с радиусом L. Рис. 8.92. Выполнение поворота при потере контакта со стенкой. Нетрудно рассчитать, каким должно быть отношение скоростей колес, чтобы радиус поворота оказался равен L. Для этого достаточно измерить расстояние между передними колесами. Пусть в нашем робо- те оно будет равно k = 16 см, а его половина d = 16 / 2 = 8 см. Тогда ле- вое и правое колеса движутся по окружностям радиусов, соответствен- но, R 1 = L + d и R 2 = L – d. Пройденные ими пути за единицу времени должны быть пропорциональны радиусам, следовательно, скорости то- чек крепления колес v 1 и v 2 связаны следующим отношением: 2 1 2 1 R R v v = Выражая скорости перемещения колес через базовую скорость v и неизвестную x, а радиусы через L, получаем следующее: d L d L x v x v - + = - + , xd xL vd vL xd vd xL vL - - + = - - + , vd xL 2 2 = , L vd x = , ) 1 ( 1 L d v L vd v v + = + = , ) 1 ( 2 L d v L vd v v - = - =
259 Линейная скорость v пропорциональнаугловой скорости колеса ω, которая в свою очередь пропорциональна мощности, подаваемой на мо- торы (в режиме торможения). Мы привели закон управления к стан- дартному виду, что позволяет задать управляющее воздействие на вре- мя поворота за угол. Таким образом, получаем расчет для управления моторами нашего робота. u=v*8/L; motor[motorB]=v+u; motor[motorC]=v-u; Когда расстояние до стены становится больше 2L (используем та- кой порог видимости), т. е. открывается поворот за угол, управляющее воздействие начинает вычисляться по приведенным формулам (рис. 8.93). Рис. 8.93. Объезд предметов на заданном расстоянии по правилу правой руки. task main() { float u, k1=2, k2=10; int v=50, d=8, Sold, L, Snew; Sold=L=SensorValue[S1]; // Запомнили начальное состояние while(true) { Snew=SensorValue[S1]; // Получили показания датчика if (Snew>L*2) { u=v*d/L; Sold=L*2; } else { u = k1*(Snew-L) + k2*(Snew-Sold); Sold=Snew; } motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1); } }
262 task main() { float u, k1=2, k2=10, a=0.2, Snew; int v=50, d=8, Sold, L; Snew=Sold=L=SensorValue[S1]; while(true) { Snew=(1-a)*Snew+a*SensorValue[S1]; if (Snew>L*2) { u=v*d/L; Sold=L*2; } else { u = k1*(Snew-L) + k2*(Snew-Sold); Sold=Snew; } motor[motorB]=v+u; motor[motorC]=v-u; wait1Msec(1); } } Фильтрация данных становится особенно актуальной, если на их основе требуется принимать решение о дальнейших действиях в долго- срочной перспективе. Например, увидев проем, остановиться или по- вернуть назад. Достаточно одной помехи, чтобы робот остановился не в том месте. Поэтому фильтры, хоть и затормаживают реакцию робота, но делают ее более стабильной и предсказуемой. Роботы-барабанщикиПредыстория Идея построить робота-барабанщика из Lego появилась в 2009 году на кружке робототехники физико-математического лицея № 239 г. Санкт-Петербурга. Ребятам она понравилась и вскоре было создано несколько моделей, которые запоминали и воспроизводили ритм, им- провизировали, управлялись удаленно, играли заранее записанные ме- лодии и даже аккомпанировали компьютеру в проигрывании midi- файлов. Через 10 месяцев робот-барабанщик получил бронзовую ме- даль на Всемирной олимпиаде роботов в Южной Корее (фотография награждения команды лицея «Старый барабанщик» на задней стороне обложки). Впоследствии он много путешествовал по России от Москвы до Сибири, выступая на фестивалях, выставках и форумах. 263 Рис. 8.96. Первые версии робота-барабанщика с игрушечным и пионерским барабанами. Первые версии робота были сделаны целиком из деталей Lego и программировались через Robolab. Основой служил игрушечный бара- бан (рис. 8.96). Андроид-барабанщик был построен из пластиковых во- допроводных труб (рис. 8.97), перед ним стояла целая барабанная уста- новка, а программировался он на языках RobotC и Java. Рис. 8.97. Андроид-барабанщик. Алгоритмы управления роботами-барабанщиками основаны на П-регуляторах, что дает возможность повысить точность позициониро- вания барабанных палочек. Это описано далее. Калибровка и удар Конструкция для барабанщика с одной палочкой изображена на рис. 7.1. Ничего особенного, разве что балку стоит сделать подлиннее (рис. 8.98). Барабанить он будет по столу. Однако прежде чем нанести
264 удар, надо определиться, где именно находится поверхность «бараба- на». Для этого необходимо выполнить калибровку. Простейший ее ва- риант заключается в следующем. Рис. 8.98. Движения «барабанной палочки». Робот опускает «палочку» на низкой скорости в течение достаточ- но большого промежутка времени, около 2 с (рис. 8.99). Поскольку ско- рость и мощность моторов взаимосвязаны, то, упершись в поверхность, палочка не причинит роботу никакого вреда и просто остановится. По- лученное положение мотора запоминается как нулевое. Калибровка произведена. Рис. 8.99. Простейшая импровизация одной палочкой. Удар будет представлять из себя поднятие палочки в абсолютное положение под углом 15 градусов (замах) и опускание в нулевое поло- жение (удар). Однако, учитывая люфт моторов Lego, а также инерцию их движения, следует прекращать опускание не в нулевом положении, а значительно раньше, например при достижении угла 10 градусов. Это позволит сократить длительность соприкосновения с поверхностью и воспользоваться энергией отскока, что значительно ускорит движение палочек. Робот получит возможность воспроизводить довольно быст- рый ритм.
265 Управление с помощью датчика Заменив ожидание таймера ожиданием нажатия датчика касания, можно получить управляемую игрушку (рис. 8.100). Человек будет на- жимать на кнопку, а робот ¾ послушно выполнять удар. Рис. 8.100. Управление палочкой с помощью датчика касания. В этом алгоритме стоит естественная защита от слишком частого нажимания датчика: робот будет барабанить с той скоростью, с которой успевает (рис. 8.101). Рис. 8.101. Датчики можно прикрепить на робота или вынести отдельно. Чтобы настроить управление двумя палочками, потребуется помес- тить калибровку второго мотора и удар в параллельный процесс. Вытя- нем алгоритм в цепочку и сдублируем его. Единственное незначитель- ное изменение — это изменение типа и мощности управления моторами при калибровке. Поскольку уже два двигателя будут прижимать палоч- ки к полу, то во избежание поднятия всего робота стоит понизить их мощность до 5—10 %. Дублируя часть алгоритма, постарайтесь внимательно заменить все команды мотору A на команды мотору B (рис. 8.102). 266 Рис. 8.102. Алгоритм управления палочками с помощью двух датчиков. Рис. 8.103. Конструкции для управления роботом-барабанщиком: слева — на датчиках касания, справа — на гироскопических датчиках. Ребята из команды «Старый барабанщик» сконструировали специ- альную перчатку с закрепленным на ней двумя датчиками касания (рис. 8.103, слева). Быть может, и читатель придумает нечто подобное. А при наличии пары гироскопических датчиков не составит труда на- строить управление роботом с помощью настоящих барабанных (рис. 8.103, справа). Создаем свой ритм Вернемся к одномоторному барабанщику. Преобразуем удар в процедуру, которая вызывается через определенные промежутки вре- мени. Задавая длительность этих промежутков, создадим ритмический рисунок (рис. 8.104). Лучше будет использовать длительности, кратные 0.2 секунды: 20 сотых, 40 сотых, 60 сотых и т. д. Если задать чересчур малую длительность, то либо робот не успеет произвести удар, либо удар будет слишком тихим. Эту особенность можно использовать для регулирования громкости. Очевидно, что для повышения точности процесса надо поднимать палочку не до удара, а сразу после него.
267 Рис. 8.104. Создаем собственный ритимический рисунок. Удар обладает некоторой длительностью, и ее тоже надо учитывать при определении пауз. Удобнее всего это сделать с помощью системно- го таймера. Команда «Жди таймер» будет предшествовать каждому удару, а очередное ожидаемое значение задаваться непосредственно перед ней (рис. 8.105). Рис. 8.105. Ритмический рисунок соответствует реальному времени. В приведенном алгоритме много умолчаний: на энкодере исполь- зуется мотор A, значение ожидания обнуляется и добавляется в крас- ный контейнер, да и таймер тоже используется по умолчанию красный.
272 ЛабиринтВиртуальные исполнители Перед решением задачи прохождения лабиринта стоит познако- миться со средой «Исполнители» 1 , созданной проф. К. Ю. Поляковым из Санкт-Петербургского Государственного морского технического университета. Исполнитель робот, реализованный в ней, очень подхо- дит для начального освоения алгоритмики. Среда полностью русифи- цирована и содержит Си-ориентированный язык программирования с русской и английской лексикой. Задача поиска выхода из лабиринта решается в этой среде различными способами. Наиболее интересный набор задач2 для робота разработан учителем информатики Д. М. Ушаковым из физико-математического лицея № 239 Центральнго района Санкт-Петербурга. Среда «Исполнители» особенно актуальна для желающих в будущем освоить язык RobotC. Также можно порекомендовать систему программирования «Ку- Мир» 3 , в которой есть исполнитель робот, способный найти выход из лабиринта. В системе «КуМир» используется школьный алгоритмиче- ский язык с русской лексикой, ориентированный на язык Паскаль. Сис- тема «КуМир» разработана в Научно-исследовательском институте системных исследований (НИИСИ) РАН по заказу Российской Акаде- мии Наук. Обе среды распространяются бесплатно. Полигон На первый взгляд, построение поля лабиринта может вызвать за- труднения, однако вложенные усилия вполне окупаются результатом. Поиск выхода из лабиринта является классической задачей, которую решают не только робототехники, но и программисты. Одно из самых ярких соревнований — состязания роботов Micromouse — проводится среди студентов. В нем участвуют разные роботы, совсем не из Lego, оборудованные большим числом датчиков и сложными алгоритмами. И размеры лабиринта составляют 16 ´ 16 квадратных ячеек. Наш лабиринт может быть поменьше, например, размером 5 ´ 5 ячеек, а размер ячейки специально подобран для Lego-роботов: около 30 ´ 30 см. С учетом толщины стенок, как правило, сторона квадрата ячейки колеблется в диапазоне от 28 до 30 см. Число ячеек и структура 1 https://kpolyakov.narod.ru/school/robots/robots.htm 2 https://inform239.narod.ru/robot.html 3 https://www.niisi.ru/kumir/ 273 лабиринта могут быть любыми. Распространена столешница 150 ´ 150 см, что и соответствует размеру 5 ´ 5 ячеек. Обеспечим ее съемными внутренними стенками. Стенки лабиринта желательно сде- лать повыше, до 16 см, однако подойдут и стандартные, высотой 10 см (рис. 8.110). Итак, особенность лабиринта в том, что его можно в любой момент изменить, сделав задачу более интересной. перейти в каталог файлов | Образовательный портал
Как узнать результаты егэ
Стихи про летний лагерь
3агадки для детей |