воскресенье, 7 августа 2016 г.

5.12. Куб ошибки и альтернативный регулятор

Урок: 5.12. Куб ошибки и альтернативный регулятор

Транскрибация урока: Итак, мы увидели, что с пропорциональным регулятором робот стал ехать гораздо более плавно, чем с релейным. Однако так случается не всегда. Может получиться так, что с вашим коэффициентом робот будет отлично проходить плавные дуги, но убегать с трассы на крутых поворотах. Вы начнете увеличивать коэффициент, и робот будет вести себя все более резко. В конце концов вы придете к варианту еще худшему, чем получилось с релейным алгоритмом. Тогда я рекомендую вам сделать следующее. Должно быть, вы заметили, что рисую я не очень здорово, поэтому я пошел на сайт Wolfram Alfa, для того чтобы напомнить вам, как выглядит график кубической функции. Вот это кубическая парабола. Почему она нам нужна? Дело в том, что вы можете добавить в свой регулятор еще один канал: взять ошибку в кубе. Улучшенный регулятор будет иметь следующий вид: ошибку мы будем получать таким же образом, а вот управляющее воздействие рассчитывать иначе: берем ошибку с коэффициентом 1 и берем еще один новый коэффициент, который будет принадлежать к кубической части нашего регулятора. В среде Arduino возведение в степень записывается иначе. Это будет выглядеть вот так вот. {{ПИШЕТ НА ГРАФИКЕ}} Зачем это нужно? Понять поможет график. Мы видим, как изменяется куб ошибки. Допустим, что ошибка мала, то есть робот отклонился от линии совсем ненамного. Ее куб будет также ничтожно мал. Мы не забываем, что мы введем еще один коэффициент, он будет очень маленький: сто тысячные, миллионные. И с этим коэффициентом куб ошибки вообще не будет играть никакой роли в происходящем. Однако стоит ошибке вырасти, куб ее также стремительно вырастет и, взятый даже с таким малым коэффициентом, начнет влиять на то, как изменяются скорости моторов. Мы можем посмотреть на то, как будет выглядеть график всей функции, если мы возьмем, например, 0,1 x и прибавим к ней 0,00001 x в кубе. Это будет выглядеть следующим образом: нам даже подсказывают, что в диапазоне от- 1 до 1 это будет линия, а вот в этом диапазоне график будет выглядеть вот таким вот образом. Поэтому пропорциональная составляющая у вас будет работать тогда, когда изгиб трассы невелик, а как только вы встретите резкий поворот, у вас сыграет роль кубическая составляющая. Можете воспользоваться этим советом. Итак, в данной части мы познакомились с пропорциональным регулятором. Давайте вспомним нашу схему, уберем из нее релейный алгоритм и поставим на его место регулятор. Естественно, вы можете использовать регулятор не только в мобильном роботе. Им существует масса приложений, это одна из базовых вещей в теории автоматического управления. И те, кому интересно, могут посмотреть в дополнительных материалах про пропорциональный интегральный дифференциальный регулятор — ПИД-регулятор, который учитывает еще больше вещей и позволяет сделать работу многих устройств оптимальной. А теперь я вам хочу предложить еще один вариант регулятора. Он может пригодиться в других задачах. Допустим, что у вас робот едет по прерывистой линии. Нарисую ее условно: вот это ее сплошная часть, а дальше начинается что-то такое. Если мы будем пользоваться единственным датчиком, когда мы дойдем до конца отрезка, произойдет что-то непредвиденное. Поэтому предлагаю вам следующий вариант: вы можете вновь взять 2 датчика, расположить их таким же образом, как делали когда работали с релейным алгоритмом, и отслеживать несколько другую вещь, нежели граница линии. Вы можете считывать значения с обоих датчиков и стремиться к тому, чтобы разница всегда была нулевой. То есть теперь ваша задача не стремиться к какому-то заранее определенному значению, а добиваться такой ситуации, чтобы под обоими датчиками был одинаковый фон. То есть если вы едете по линии, у вас оба датчика видят ее границу. Если вы отклоняетесь от линии, то один датчик оказывается на белом, другой оказывается на черном. Между ними возникает разница, соответственно, вы можете вновь регулировать разницу между скоростями колес. Вы вернетесь вновь на линию, и, когда дойдете до ее конца, ничего страшного не случится. Вот здесь будет последний серый отрезок, затем оба датчика окажутся на белом. С точки зрения робота, ничего страшного не произошло, потому что белое и белое — одинаковы. Затем один из датчиков снова окажется на черном пятне, и снова возникнет ситуация, когда роботу нужно скорректироваться. Он вновь скорректируется и окажется обоими датчиками на неком сером поле, на границе между черным пятном и белым фоном. Причем уровень насыщенности серого будет увеличиваться, уменьшаться в зависимости от того, в каком месте вот этих вот пятен вы находитесь. Никакой беды нету, потому что главное для вас — отсутствие разницы между значениями датчиков. С точки зрения кода, ничего радикально не изменится, кроме того что ошибку вы будете вычислять не так, как мы это делали раньше, считывая значение текущее и вычитая из него заранее определенное — так мы делали раньше. А теперь вы можете делать вот так: считывать оба датчика и искать разницу между ними. То есть старый способ нам уже в этом случае не пригодится. Обратите внимание на экранчик. [ШУМ] Я добавил в основной цикл одну строчку, которая постоянно выводит на него показания датчика. И как только они отклоняются от установленной нормы, робот начинает сильно корректировать свое положение. Итак, мы добились гораздо более удовлетворительного результата, чем получалось с релейным алгоритмом. Конечно, есть к чему еще стремиться: можно сделать проходы поворотов еще более плавными, и один из способов я вам подскажу чуть дальше. Однако в целом задача езды по линии решена, и вы можете использовать ее как основу для каких-то прикладных задач.

Часть: Видео

Модуль: Мобильный робот

Описание модуля: Сначала крутим одно колесо, затем крутим два колеса и тележка едет, затем тележка едет по линии или под управлением или просто дразнит вашу руку.

Курс: Строим роботов и другие устройства на Arduino. От светофора до 3D-принтера

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

Наш курс состоит из серии практических задач про создание вещей, которые работают сами: изучают мир, принимают решения и действуют – двигаются, обмениваются данными друг с другом и с человеком, управляют другими устройствами. Мы покажем, как собирать эти устройства и программировать их, используя в качестве основы платформу Arduino.

Пройдя этот курс, вы сможете создавать устройства, которые считывают данные о внешнем мире с разнообразных датчиков, обрабатывают информацию, получают и отправляют данные на ПК, в Интернет, на мобильные устройства, управляют индикацией и движением. Создание устройств будет включать проектирование, изучение компонентов, сборку схем, написание программ, диагностику. Попутно с созданием самих устройств вы сделаете визуализацию на ПК, создадите веб-страницу, которую будет демонстрировать одно из ваших устройств, а также разберетесь с устройством и работой FDM 3D-принтера.

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

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

Весь курс посвящен практике и самым лучшим решением для вас будет раздобыть электронику, повторять показанные примеры и экспериментировать самостоятельно.

Программа:
  • Неделя 1 Один старый и много новых знакомых
  • Неделя 2 Контроллер изучает мир
  • Неделя 3 Цель обнаружена
  • Неделя 4 Как полить цветок из другого города
  • Неделя 5 Мобильный робот
  • Неделя 6 Как создать новый предмет за час
Преподаватель: Алексей Перепелкин (1), Дмитрий Савицкий (2)

Описание преподавателя: (1) Алексей Перепёлкин занимается развитием робототехники на базе ЛИОТ МФТИ. В 2012 году открыл для себя новое захватывающее чувство – когда устройство, которое сам построил и запрограммировал, работает. Свернул с финансовой дорожки и создал кружок робототехники для подростков. Готовил их к соревнованиям. Стал посещать конференции, а затем проводил мастер-классы для тех, кто тоже хочет организовать занятия. Совместно с коллегами в 2013 году разработал новые соревнования – Робопрофи – для конкурса Робот для жизни и провел их. В 2014 году впервые провел Arduino-номинацию на фестивале Робофест, а для российского финала Russian Robot Olympiad 2014 сделал творческую категорию. С тех пор эти соревнования стали регулярными. Летом 2014 провел двухнедельную мастерскую в детском лагере Никола-Ленивца, а затем преподавал в выездной школе, посвященной программированию и робототехнике, которую провели ABBYY и Яндекс. В 2015 году стал руководителем направления робототехники в GoTo Camp, выездных школах, где участники создали десятки проектов, от прототипов умных домов и операторских тележек до робота-бубниста и принтера для незрячих. В 2014 году с коллегами начал проект Роболабы: мероприятия для школьников и студентов, где участники параллельно решают усложненные задачи, а затем проводят рефлексию сделанной работы и оценивают чужие в ходе серии мероприятий.

(2) Физик, научный сотрудник, выпускник МФТИ. Запустил кружок робототехники в 2011 году. Рассказал Алексею Перепелкину о том, как здорово вести кружок робототехники. Рассказал об этом еще целому ряду людей. Побеждал со своими командами на соревнованиях. Проводил проектную работу с участниками исследовательской выездной школы МКШ с 2013 года, где руководил реализацией физических и робототехнических проектов, например, «Вслед за солнцем», в котором изучалась эффективность динамической ориентации солнечных батарей на солнце. Вместе с коллегами разрабатывал и был судьей Робопрофи. Участвовал в подготовке проекта Роболабы. Вновь пришел в МФТИ для проведения факультативного курса «Основы создания киберфизических устройств»

Организатор: Лаборатория инновационных образовательных технологий МФТИ (1), Лаборатория инновационных образовательных технологий МФТИ (2)

Описание организатора: (2) Московский физико-технический институт (неофициально известный как МФТИ или Физтех) является одним из самых престижных в мире учебных и научно-исследовательских институтов. Он готовит высококвалифицированных специалистов в области теоретической и прикладной физики, прикладной математики, информатики, биотехнологии и смежных дисциплин. Физтех был основан в 1951 году Нобелевской премии лауреатами Петром Капицей, Николаем Семеновым, Левом Ландау и Сергеем Христиановичем. Основой образования в МФТИ является уникальная «система Физтеха»: кропотливое воспитание и отбор самых талантливых абитуриентов, фундаментальное образование высшего класса и раннее вовлечение студентов в реальную научно-исследовательскую работу. Среди выпускников МФТИ есть Нобелевские лауреаты, основатели всемирно известных компаний, известные космонавты, изобретатели, инженеры.

Категория: Компьютерные науки

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

Тематика: Разработка ПО

Материал:



Практика
Программы
Скетчи, показанные на этой неделе, лежат в архиве w5_sketches.zip https://drive.google.com/open?id=0B6zopUwNtrV0VHFWLS1qRUttaVE
Сборка устройств
Собрать все варианты роботов можно с использованием дополнения Киберфизика.Мобильный робот к набору Киберфизика.Фундамент
В съемке видео этой недели использовались колеса и некоторые прототипы деталей корпуса, которые в дополнении Мобильный робот были заменены детали другого вида но с тем же функционалом.

Ссылки на материалы
Коллекторные моторы: кратко http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BC%D0%BE%D1%82%D0%BE%D1%80, подробнее http://wiki.amperka.ru/%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0:%D0%BC%D0%BE%D1%82%D0%BE%D1%80%D1%8B
Фильм Электрические двигатели http://www.youtube.com/watch?v=l7lx9-c3Po0
Принцип работы и классификация электродвигателей http://engineering-solutions.ru/motorcontrol/motor/
Редукторы http://cncnc.ru/documentation/detalimashin_lecture/book/book9.htm
Драйвер двигателей L293D http://www.myrobot.ru/stepbystep/el_driver.php datasheet http://www.ti.com/lit/ds/symlink/l293.pdf
Описание Motor Shield http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:motor-shield
Вариант списка необходимого для проверки устройства https://drive.google.com/open?id=0B6zopUwNtrV0NUpmdGVmZWI0RDQ
Макет трассы для робота, показанной в видео https://drive.google.com/open?id=0B6zopUwNtrV0UkQzVFctQklZUFk
ПИД-регулятор http://www.bookasutp.ru/Chapter5_2.aspx
Приложения-"джойстик" ArduinoRC https://play.google.com/store/apps/details?id=eu.jahnestacado.arduinorc
RemoteXY: приложение https://play.google.com/store/search?q=remotexy, сайт http://remotexy.com/
Внешние прерывания http://www.arduino.cc/en/Reference/AttachInterrupt