пятница, 1 июля 2016 г.

3.12. Картография с Processing

Урок: 3.12. Картография с Processing

Транскрибация урока: Вообще, инструмент этот довольно мощный, и подробно про него можно снять целый курс. Сейчас мы только затронем начало его работы, и если вас это заинтересует, пожалуйста, идите на сайт processing.org. Здесь тоже есть разделы для обучения. [БЕЗ_ЗВУКА] И в виде теста, и в виде видео. И можете продолжать изучение. А мы сейчас будем строить карту. Сейчас мы рассмотрим скетч на processing, но прежде давайте поймем, каким образом сам радар будет передавать данные для этого скетча. Что происходит на стороне Arduino? Какие сведения о пространстве нам позволяет радар получить? Расстояние до какой-то точки и угол, в котором сейчас находится сервомотор и, соответственно, дальномер. То есть мы про каждое положение знаем вот этот вот угол и расстояние до точки. Таким образом, мы можем найти координаты в каждой из вот этих вот точек, которые в конце концов складываются в объекты, вспомнив про то, что по углу и стороне можно решить треугольник. То есть координаты каждой из этих точек вычислить. Соответственно, для нашего радара будет достаточно передавать угол и соответствующее ему расстояние, что мы, собственно, и делаем в скетче. Я его немножко трансформировал, теперь сохраняю в переменную distance результаты измерений и вывожу на экран эту переменную. Кроме этого, я решил, что для разделения вот этих данных я буду использовать двоеточие, и в конце каждой пары ставить точку с запятой. Обратите внимание, что я использую метод print, а не println, потому что перевод строки мне в данном случае не нужен, и я буду не глазами читать эти данные, а их будет разбирать скетч на processing. Итого, мы отправляем угол, двоеточие, расстояние, точка с запятой. И все то же самое на обратном пути, когда серво крутится от 180 до 0. Теперь давайте перейдем к processing, и на примере вот этого построителя карты познакомимся с тем, каким образом можно с ним работать. Я сразу буду разбирать написанный скетч. Здесь я подключаю библиотеку для работы с последовательным портом, потому что нам нужно в этом скетче получать данные от Arduino. И создаю соответствующий объект. В отличии от Arduino здесь нет готового объекта Serial, поэтому мы его создаем. Затем создаю все переменные, которые пригодятся в работе. Угол, расстояние, данные – это те данные, которые мы будем получать с Arduino. Index – это некая служебная переменная, до которой сейчас дойдем; и xpos и ypos – это координаты той точки, которую мы будем строить. Теперь посмотрим дальше и увидим уже знакомое слово, точнее, пару слов – void setup. Действительно, среды Processing и Arduino родственные, именно поэтому в обоих из них есть такой раздел. Здесь тоже делаются всякие настройки, и в частности, мы создаем окошко размером 600 на 300 пикселей. Затем устанавливаем соединение с Arduino. Здесь мы указываем скорость, здесь мы указываем порт, который можно посмотреть в диспетчере устройств, и скорость соединения, которая должна совпадать с таковой в скетче в радаре. Затем вот эта инструкция определяет, до какого символа будет буферизоваться сообщение, прежде чем вызовется некая функция, о которой мы посмотрим дальше. Затем идет строчка background и 3 цифры – это мы задаем цвет фона в виде RGB, то есть (255, 255, 255) – это белый фон. Что мы видим далее? void draw. Здесь это на месте loop, который мы всегда видим в Arduino. То есть ваше окошко постоянно будет перерисовываться в связи с тем, что написано внутри этой функции. Как я уже упоминал, processing – это инструмент, в первую очередь для визуализации, и я действительно рекомендую вам покопаться на сайте, посмотреть примеры, там есть много мощных инструментов для визуализации данных, для работы с картинками, анимациями и так далее. Что происходит внутри draw здесь? Здесь я устанавливаю цвет заливки фигуры, которую я буду рисовать. 255,0,0 – это красный цвет. И функцией noStroke говорю, что у нее не будет контура, будет только заливка без обводки. И, собственно, указываю что за фигуру мне нужно нарисовать – это эллипс, координаты которой записаны в переменной (xpos, ypos). И это размеры эллипса, ну размером 3 пикселя. Осталось разобраться с тем, как мы расшифровываем данные, которые приходят от радара. Это происходит в функции Serial event. То есть по наступлении некого события в последовательном порту будут обрабатываться, будут происходить вот эти инструкции. Как вы помните, мы в setup написали, что ожидаться будет символ точки с запятой, то есть как раз, когда мы окончили передачу пары угол-расстояние. Здесь мы в созданную ранее переменную data считываем данные до точки с запятой, и затем в эту же переменную сохраняем подстроку, то есть кусок этой же самой строки с позиции 0 до позиции, которая равна длине этой строки минус 1. Затем в переменную index – служебную переменную, про которую я в начале упоминал, – сохраняем позицию двоеточие, то есть разделительного символа в нашей строке. И в переменную angle (угол) сохраняем ту подстроку, которая идет от начала полученных данных до index, то есть до позиции двоеточие. А в переменную distance сохраняем подстроку от позиции двоеточие плюс 1, то есть начало расстояния, до позиции, которая равняется размеру самой переменой, то есть до конца. Затем мы преобразуем эту пару в координаты, здесь есть еще несколько вычислений, связанных с выходом за пределы нашего поля. И остается одна функция... А, да, вот здесь еще есть две строчки, которые преобразуют немножко полученные координаты, потому что в рисовании карты, как вы скоро увидите, мы нулем будем считать вот это место, ну что бы как бы смотреть из глаз радара. И последнее что остается — это функция для очистки карты. Ну периодически нам захочется ее почистить, чтобы радар построил ее заново, и поэтому по событию «мышка нажата», экран будет очищаться, то есть просто заливаться белым. Вот и все. Давайте теперь посмотрим, как это работает, и тем, кому показалось использование процессинга интересным, я рекомендую в первую очередь посмотреть на тот скетч, который вы уже давно скачали, который используется для визуализации аналогового сигнала. Может быть, вы его как-то улучшите для себя. Может быть, предложите улучшение нам. Ну, естественно, можете изучать предмет дальше, делать какие-то другие инструменты визуализации и связывать с вашими устройствами, чтобы по мановению руки, у вас, например, происходила какая-нибудь крутая трехмерная анимация. Впрочем, вернемся к рисованию карты радаром. Мы соорудили импровизированную полосу препятствий для радара из того, что нашли в студии. Здесь есть картонная коробка, пластмассовая коробка с какой-то электроникой внутри и угол комнаты. Я сейчас обнулю карту, и мы посмотрим, как они отображаются. Это дальняя стена, это коробка с электроникой, это картонная коробка. И обратно. И вот мы дошли до угла и видим вторую стену. Угол выглядит таким вот странным образом, но это довольно предсказуемо. Все шумы и погрешности связаны с тем, что, во-первых, мы не применяем никакую фильтрацию; во-вторых, могут быть какие-то погрешности вычислений. Ну а самая главная причина – это то, что у каждого датчика есть свои особенности, в частности, у ультразвукового дальномера. Мы об этом уже немного говорили. Тем не менее карта строится.

Часть: Видео

Модуль: Цель обнаружена

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

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

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

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

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

Материал: