вторник, 2 августа 2016 г.

5.9. Реализация релейного алгоритма

Урок: 5.9. Реализация релейного алгоритма

Транскрибация урока: И прежде, чем поставить датчики на робота, давайте снова вернемся к нашей схеме, где зафиксируем, что у нас теперь в качестве устройства восприятия есть датчик линии, который отличает белое, черное и все промежуточные оттенки, которые он воспринимает серыми, который считывается как обычный аналоговый сигнал. И у нас будет функция, которая будет сообщать, черное или белое сейчас находится под данным датчиком. И тот алгоритм, который мы представили когда рассуждали о езде по линии, мы реализуем: свяжем вот эту и вот эту функции. Итак, мы снова в студии, и мы знаем все, что нужно для того чтобы робот поехал. Теперь нам нужно доработать робота, нам нужна трасса и нам нужен код. Что касается робота. Я просто установил 2 датчика линии таким образом, чтобы они были как можно ближе к краям линии, потому что если мы их разнесем далеко, вспомните, как он будет ехать: он будет ехать пока не упрется одним из датчиков в линию, да, он вот так вот перекосится. Зачем нам это? Потом он перекосится обратно, и так вот он зигзагами будет ехать. Не надо. Поэтому они располагаются рядом с линией. Что касается трассы. Я нарисовал вот такую вот трассу в обычном графическом редакторе. Мне хотелось, чтобы она была похожа на гоночную трассу с прямым отрезком, с плавными поворотами, с крутыми поворотами и так далее. Вы можете взять этот макет в дополнительных материалах или нарисовать свою трассу, а затем забить в поисковике «широкоформатная печать», найти типографию, позвонить им, спросить, печатают ли они на баннерной ткани. Они напечатают, и у вас будет трасса. Теперь давайте разберемся с кодом. За основу я взял один из скетчей, где мы экспериментировали с ездой, и стал редактировать. Во-первых, добавил макроопределения для пинов датчиков и несколько еще макроопределений, которые сделают код более читаемым. Вот эти мы будем передавать в качестве параметров в функцию чтения датчиков, это у нас обозначает границу между черным и белым, а вот это — заданные скорости, возможные скорости для моторов вперед и назад. Помните, как у нас было на схеме? Затем я определил функцию для чтения датчиков. Конечно, могли бы обойтись и без нее, но при дальнейшем развитии программы, код стал бы нечитаемым, поэтому я решил вынести это в отдельную функцию. Вот она. Она будет возвращать "булево" значение, истину или ложь, в зависимости от того, черное или белое сейчас находится под датчиком. В качестве параметра она принимает те самые left и right для определения того, какой датчик сейчас нужно считывать. Что, собственно, и происходит: если пришло left — будем считывать значение с того пина, куда подключен левый датчик, и, если оно больше порогового значения, возвращать «ложь», а в противном случае — «истину». И ровно то же самое происходит, если пришло right, только для правого датчика. Теперь, у нас есть функция для управления моторами, функция для чтения датчиков, у нас есть представление о том, как их связать, и мы реализуем это в коде. Согласно нашей табличке, если оба датчика показывают «белое», то есть функция lineSensor возвращает «истину», мы просто едем вперед. В противном случае, если под правым датчиком «черное», то есть lineSensor (right) возвращает «ложь», мы будем поворачивать направо, крутить правое колесо назад, а левое — вперед. И третий случай, который мы рассмотрели: когда правый датчик показывает «белое», а левый — «черное». В этом случае мы поворачиваем влево. Ну, и если каким-то чудесным образом под обоими датчиками оказалось «черное», или случилась еще какая-то непредвиденная ситуация, то мы просто останавливаемся. Вот и все. Давайте смотреть, как это работает, только прежде почитаем еще раз датчик чтобы определить ту самую границу между черным и белым. Посмотрим, что мы видим. В моей программке для визуализации есть удобные поля «минимум» и «максимум», поэтому я вижу, что здесь значения изменяются от 37 до 485. Я даже не буду работать с подстроечными резисторами, а просто буду считать, что переход между белым и черным случается в районе 200, собственно, как в коде и было написано. Если бы у меня получилось 400, я бы заменил одно из макроопределений. Теперь давайте посмотрим, действительно ли робот поедет, как мы задумывали. Перед загрузкой программы с ездой не забудьте закрыть монитор порта или визуализатор монитора порта, потому что иначе у вас будут проблемы с загрузкой. [МУЗЫКА] Посмотрим, что получилось. [МУЗЫКА] [МУЗЫКА] [МУЗЫКА] [МУЗЫКА] [МУЗЫКА] Итак, задача езды по линии в первом приближении решена. Однако, мы у данного способа видим ряд недостатков. Во-первых, на поворотах робот совершает порывистые движения. Во-вторых, очевидно, что при разном уровне заряда батарей одни и те же жестко заданные значения будут приводить к различному результату, то есть придется постоянно менять константы, определяющие скорости, к примеру. Ну, а кроме этого, у другого способа, о котором мы будем говорить далее, есть свои отдельные преимущества. [КОНЕЦ] [КОНЕЦ] [КОНЕЦ]

Часть: Видео

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

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

Курс: Строим роботов и другие устройства на 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