Расширение возможностей стандартных робототехнических конструкторов с использованием LabView
И снова здравствуйте, уважаемые хабравчане! Вы собрали уже все возможные модели из вашего конструктора? Вам надоело «ездить по линии», «управлять с пульта» и «определять расстояние до объекта»? Вы уже забыли, когда последний раз доставали ваш конструктор с дальней полки? Пора смахнуть с него пыль и вдохнуть в него новую жизнь! Как это сделать? Читаем под катом!
1. ВведениеНаписать данный пост меня побудили абитуриенты, поступающие в МГТУ им. Н.Э. Баумана на робототехнические специальности, и заявляющие, что «они крутые робототехники», но на деле отказывающимися понимать, что робототехника гораздо сложнее и интереснее, чем собрать стандартную машинку из конструктора и научить ее ездить по линии. Далее будет немного лирики и размышлений, и поэтому тех, кто желает сразу ознакомиться с технической частью — прошу в раздел 3.2. Лирика, или зачем я все это начал За последнее время я в составе нашей команды (все выпускники МГТУ им. Н.Э. Баумана с кафедр робототехнических специальностей) много работал со школьниками различного возраста — с 4 го по 11й класс, причем уровень у ребят был совершенно разный: от 5ти-классников — призеров соревнований по LEGO и VEXiQ, до 11ти-классников, первый раз увидевших «вживую» сервопривод. И ситуация во всех случаях складывается приблизительно одинаковая — школьник «загорается» идеей, начинает много работать, добивается неких результатов и «гаснет». Причем гаснет не в смысле «надоело роботов собирать», а в том, что он не может найти, (или не хочет искать, или некому направить в нужную сторону) идеи, как и в каком направлении дальше развиваться. Самое обидное случается в том случае, когда школьники, с которыми мы занимались класса с 9 го, реализовавшие несколько самостоятельных проектов, и поступившие в МГТУ на робототехническое направление вдруг на первом курсе теряет интерес к робототехнике и идет «торговать пылесосами». С одной стороны, их можно понять — сильный перегруз и полное отсутствие специальных предметов (которые кстати не всегда разжигают интерес). Но с другой стороны чаще всего у них возникает извечный вопрос — когда же мне расскажут, как собирать другие прикольные машинки из других прикольных конструкторов? К чему я это все — основная проблема развития робототехники как направления, заключается в отсутствии у обучаемых школьников (да и студентов) творческого мышления, направленного на постановку и решение нетривиальных задач по конструированию и макетированию различных робототехнических систем. Обучающие программы, которые мы проводим со школьниками рассчитаны не только на весь период обучения в школе, а также и на дошкольное образование (программа предварительного уровня рассчитана на детей возрастом 5–8 лет) и с интересующимся и прогрессирующими ребятами мы можем проводить обучение по программам различного уровня сложности: — Начальный уровень (9–12 лет)— базовый уровень (8–14 лет)— базовый соревновательный уровень (12–15 лет)— профессиональный уровень (14+)— исследовательский и экспертный уровни (14+).Но так или иначе, несмотря на то, что в рамках последних двух уровней (исследовательский и экспертный) мы пытаемся привить творческий подход к макетированию робототехнических систем, выполняемые в рамках обучения проекты основываются на стандартных макетах, процесс сборки и программирования которых подробно описан в методических пособиях. В результате у большинства обучаемых складывается следующие стереотипы: во-первых, из каждого набора можно собрать определенное количество определенного типа моделей, и во-вторых — робототехника заключается в сборке этих самых моделей. Несмотря на наши попытки объяснить ребятам обратное на словах это не всегда удается. Поэтому в данной статье я бы хотел предложить некоторые нетривиальные способы расширения стандартных робототехнических конструкторов, девайсами, изначально для этого не предназначавшимися и описать полученные на сегодняшний день результаты. Итак, поехали.3. Использование датчиков Vernier совместно с микроконтроллером VEX ARM® Cortex®-based 3.1 Микроконтроллер VEX ARM® Cortex®-based, или инструкция по применению Конструкторы экспертного уровня скомплектованы на основе железного конструктора VEX, в состав которого входит микроконтроллер VEX ARM® Cortex®-based. Микроконтроллер VEX ARM® Cortex®-based является последним микроконтроллером в линейке микроконтроллеров VEX. Основной задачей данного микроконтроллера является координация потока данных и обеспечение питания робота. Отличительной особенностью данного микроконтроллера является возможность подключения к нему беспроводного Wi-Fi адаптера и возможность организации обмена данными через него, используя пульт управления или персональный компьютер.Микроконтроллер VEX ARM® Cortex®-based Технические характеристики микроконтроллера: • Тип источника питания: 6 батарей типа АА, или батарея на 7.2В• Токопотребление: 150 мА• Порты ввода-вывода: — 8 шт 3х проводных выводов для приводов VEX— 2 шт 2х проводных выводов для приводов VEX— 1 шт I2C «Smart Sensor»— 2 шт UART Serial Port— 8 шт 12-битных аналоговых входов— 12 шт цифровых линий— 1 шт DAC Speaker— 2 шт Rx1 & Rx2• Микроконтроллер: — Тип: STMicroelectronics ARM® Cortex® M3— Скорость: 90 MIPS— RAM: 64Кб— Flash: 384 Кб• Среда программирования: — easyC V4— ROBOTC for VEX Robotics v4.x
Схема расположения портов на контроллере
3.2 Что за зверь такой — эти датчики Vernier? Компания Vernier является лидером среди изготовителей датчиков для проведения измерений. В настоящее время Vernier создает простые в использовании и доступные интерфейсы, датчики и программное обеспечение для графического анализа. На сегодняшний день Vernier производит порядка 60 различных датчиков для измерения различных физических величин. В это число входят датчики измерения как классических параметров — температура, сила, влажность, напряжение, так и для очень нетривильных измерений — ЭКГ, сердечных сокращений и т.д. В данном примере будет рассматриваться взаимодействие с датчиком температуры (термопара) широкого диапазона. Датчик предназначен для измерения температуры различных объектов в очень широком диапазоне температур (- 200 до + 1400 ºС). Его можно использовать для проведения исследований в агрессивных средах, не разрушающих корпус датчика.Датчик Vernier для измерения температуры в широком диапазоне Технические характеристики датчика: • Диапазон измерений: от — 200 до + 1400 ºС• Точность: — ± 5,0 ºС при температуре от — 200 до + 1400 ºС— ± 2,2 ºС при температуре от 0 до + 900 ºС— ± 15,0 ºС при температуре от + 900 до + 1400 ºС• Тип термопары: К тип• Параметры источника питания— Токопотребление: 11 мА— Напряжение: 5 В DC ± 25 мВ• Диапазон выходного напряжения: 0 — 4 В• Разрешение: 12 бит• Масса: 0,12 кг• Габариты: — согласующее устройство: 73 × 52 × 26 мм— длина чувствительного элемента: 200 мм— диаметр чувствительного элемента: 4 мм
3.3 Рабочий макет Микроконтроллер VEX по умолчанию не поддерживает подключение датчиков Vernier и поэтому пришлось придумывать адаптер. Он получился очень простой — макетная плата с распаянными на ней переходником USB — UART и коннектором для аналогового датчика Vernier.Плата с распаянными коннектором для датчика Vernier и переходником с USB — UART С помощью такого адаптера и подключим нашу термопару к микроконтроллеру. В результате собранный макет выглядит следующим образом:
3.4 Разработка прошивки для микроконтроллера в среде easyC Традиционно для программирования микроконтроллеров VEX используется среда RobotC, и именно поэтому я не стал использовать стандартную среду, а предложил освоить альтернативную среду для программирования робототехнических контроллеров на базе процессоров Cortex от Intelitek — EasyC.Среда разработки easyC EasyC по сути, представляет собой сильно упрощенную версию языка С. Отличительной особенностью данный среды является возможность разработки как в графическом, так и текстовом режиме, причем оба эти режима доступны параллельно. Основными элементами интерфейса данной среды являются следующие окна:
Start Page — стартовый экран, который появляется при запуске среды. На этом экране происходит процесс создания нового проекта, либо же открытие старого.Function Block — в данном окне содержатся основные функции-блоки для графического программирования микроконтроллера. Для добавления какой-либо функции в блок-диаграмму достаточно перетащить ее мышью на блок-диаграмму и связать с другими блоками.Main — основное окно разработки. По умолчанию открывается панель с блок-диаграммой. При необходимости можно переключиться на панель языка С, выбрав соответствующий пункт в меню Window.Project Explorer — окно, содержащее информацию о текущем проекте.
При запуске среды easyC появляется окно в котором нам предлагается создать новый проект. Для этого необходимо нажать на New Standalone Project, после чего в появившемся окне необходимо выбрать тип проекта — либо для взаимодействия с контроллером по Wi-Fi (Joystick Project (WiFi), либо для автономной работы контроллера (Autonomous Only Project). В данной работе используется последний тип проекта. По нажатию кнопки ОК открывается окно Main с типовой структурой проекта.
Среда разработки easyC с открытым проектом По завершении разработки для компилирования и загрузки прошивки в память микроконтроллера необходимо подключить микроконтроллер к ПК с помощью входящего в комплект с микроконтроллером USB-кабеля, дождаться его идентификации в системе, и в меню Build and Download выбрать пункт Build and Download, либо же нажать на клавиатуре F7. Отдельно хочу отметить что не рекомендуется подключать микроконтроллер к портам USB 3.0 в связи с возможностью возникновения ошибок при идентификации микроконтроллера системой Windows. В случае успешного завершения загрузки прошивки вы увидите соответствующее сообщение. После этого контроллер можно отключать от ПК. Он будет работать автономно по загруженной в него прошивке.
Подключение микроконтроллера VEX к ПК Успешное завершение загрузки прошивки Напишем прошивку для микроконтроллера VEX, чтобы в последствии использовать ее для сбора данных с термодатчика и передачи этих данных на ПК. Работа прошивки заключается в следующем: как только по uart передается на микроконтроллер код »110» происходит считывание значение температуры с термопары. Затем по uart микроконтроллером передается код »111», означающий начало передачи данных, и после передаются полученные результаты. После завершения передачи микроконтроллер снова устанавливается в режим ожидания команды на проведение измерения. Я не буду подробно расписывать процесс разработки прошивки, т.к. он довольно прост и не вызывает проблем. В результате получается код изображенный на рисунке.
Соответствующая этому коду блок-диаграмма выглядит следующим образом:
3.5 Разработка приложения для сбора данных в среде LabView Задачей приложения является отправка команды на начало измерения на микроконтроллер, и последующий сбор данных, получаемых с микроконтроллера. Для написания приложения выполним следующие шаги:1. Создадим новый проект в среде LabVew.2. Перейдем на блок-диаграмму.3. Поместим на блок-диаграмму структуру Case Structure из палитры Programming — Structures.4. Поместим на блок-диаграмму элемент Visa Configure Serial Port VI из палитры Instrument I/O — Serial.5. Нажав на входе VISA resource name элемента Visa Configure Serial Port VI правой кнопкой мыши создадим контрол (Create — Control) с именем COM-порт. Аналогично ко входам timeout, baud rate создадим константы со значениями: 10000 и 9200 соответственно. Соединим выходы элемента Visa Configure Serial Port VI: error out со входом case Selector структуры Case Structure, а VISA resource name out с границей структуры Case Structure. На данном этапе мы задали параметры инициализации COM — порта. На данном моменте блок-диаграмма у нас будет выглядеть приблизительно, как на рисунке.
6. Добавим внутрь структуры Case Structure в кейс «No Error» структуру While Loop из палитры Programming — Structures. Внутрь структуры While Loop поместим структуру Event Structure. На вход timeout структуры Event Structure подадим значение 10.7. Перейдем в окно Front Panel. В данном окне, нажав правую кнопку мыши, выберем из палитры Silver — Boolean — Buttons элемент Blank Button (Silver). Переименуем его в Измерение.8. Перейдем в окно блок-диаграммы. Нажмем правой кнопкой на структуре Event Structure и выберем пункт Add Event Case. В появившемся окне выберем из списка Event Sources нашу кнопку — Измерение, и в списке Events выберем значение Value Change. Нажмем Ок. Перенесем нашу кнопку Измерение внутрь кейса «Измерение» структуры Event Structure. Теперь содержимое структуры Event Sources будет выполняться при нажатии кнопки Измерение. На текущем этапе наша блок-диаграмма выглядит следующим образом:
9. Поместим внутрь структуры Event Structure элементы Visa Write и Visa Read из палитры Instrument I/O — Serial. Соединим входы элемента Visa Write VISA resource name и error in с терминалами, образованными в результате выполнения пункта 5. Входы элемента Visa Read соединим соответственно с выходами Visa Write. На вход write buffer элемента Visa Write подадим unsigned bite array с единственным значением »110» преобразованный с помощью функции Byte Array To String Function из палитры Programming — String — Conversion. На вход byte count элемента Visa Read подадим константу »1». Выход read buffer соединим с String To Byte Array Function из палитры Programming — String — Conversion. Извлечем из полученного массива с помощью функции Index Array (Programming — Array) первый элемент и проверим равен ли этот элемент (Programming — Comparison) значению »111».10. Добавим внутрь структуры Event Structure структуру Case Structure из палитры Programming — Structures. Соединим case Selector выходом функции equal?. На данном этапе мы реализовали отправку команды на микроконтроллер и считывание отклика с микроконтроллера, означающего готовность к передачи данных. На текущем моменте блок-диаграмма выглядит следующим образом:
11. Внутрь кейса «True» новой структуры Case Structure поместим элемент Visa Read и аналогично как мы делали в пункте 9 выполним считывание 2х однобайтовых чисел из буфера и преобразуем полученные данные в исходное значение. Добавим элемент Visa Close вне цикла While Loop и соединим его входы с выходами функции Visa Read путем проведения проводников через границы всех структур.12. Перейдем в окно Front Panel. Аналогично пункту 7 создадим кнопку Stop. Так же добавим на лицевую панель WaveForm Chart с названием График температуры из палитры Silver — Graph.13. Перейдем в окно блок-диаграммы. Соединим вход добавленного графика температуры с выходом результата преобразования. Кнопку Stop поместим в кейс Timeout структуры Event Structure, и через границу этой структуры соединим с выходом цикла While Loop. Убедимся в отсутствии разрывов проводников на блок диаграмме.
На этом блок-диаграмма готова. Лицевая панель получившегося приложения должно выглядеть приблизительно как на следующем рисунке:
3.6 Процесс проведения измерений Прежде чем выполнять измерения необходимо выполнить калибровку. Калибровку будем проводить вблизи нуля градусов. Обозначим калибровочный коэффициент К. Тогда, K=174.17-T0, где T0 — значение, получаемое с термопары при 0 С.Тогда реальное значение температуры будет вычисляться по формуле: T=((T'+K)∙159100–27710000)/100000, где T» — получаемое значение с термопары.Добавим данную формулу к блок-диаграмме: Программа полностью готова к работе. Результаты работы представлены ниже на рисунках. Коэффициент К = 50.17.
10 последовательных включений при комнатной температуре 10 последовательных включений при нахождении термопары в горячем чае и после извлечения термопары из него 12 последовательных включений при нахождении термопары в воде, охлажденной в морозилке, но еще не замерзшей. 3.7 Подведение итогов На основе представленных здесь материалов была разработана лабораторная работа для студентов кафедры РК10 факультета робототехники и комплексной автоматизации в качестве дополнительных, факультативных занятий. Сама идея и лабораторная работа была положительно воспринята на кафедре, как преподавателями, так и студентами, в первую очередь теми, кому не хватало стандартных датчиков в работе над своими курсовыми и бакалаврскими проектами, но, в связи с последними кафедральными событиями, выполнили эту работу лишь несколько человек — преимущественно студенты 3 го и 4 го курсов. В процессе ее выполнения студентами были предложены идеи по ее развитию и улучшению, которые на сегодняшний день в связи с расформированием кафедры РК10 воплотить в жизнь не удалось. В настоящее время данную работу я планирую адаптировать для школьников, занимающихся с наборами экспертного и исследовательского уровней.4. Использование мобильного телефона в качестве основы для технического зрения. Как правило в робототехнические конструкторы в первую очередь входят различные датчики — дальномеры, фотосенсоры, гироскопы. Но редко, когда в состав набора входят системы для организации технического зрения и в связи с этим у меня возникла мысль использовать имеющийся у каждого мобильный телефон в качестве основы для системы технического зрения. Идея состоит в следующем — телефон по Wi-Fi связывается с ПК, где написанная на LabView программа использует камеру телефона в качестве веб-камеры.4.1 Как это было реализовано? В качестве камеры я использовал телефон с яблоком на логотипе, установив на него приложение PocketCam от Senstic. В AppStore существует как бесплатная, так и платная версии этого приложения. Отличаются они тем, что бесплатная версия вещает картинку в черно-белом виде, а так же отсутствием передачи звука. Затем на ПК я установил приложение PocketControl, которое съэмулировало подключенную к ПК веб камеру.
Затем, используя LabView с установленным NI Vision без проблем удалось подключиться к этой съэмулированной камере и начать граббинг видео.
Как можно увидеть, картинка передается в разрешении 640×480 с частотой 30 кадров в секунду. Также работает автофокус. Но хочется отметить один интересный момент — такого разрешения удается добиться только в случае использования Windows 8.1. Попытка повторить то же самое на Win7 приводит к вещанию картинки в разрешении 320×240 и сильным «фризам». В чем может быть дело я пока не понял — если у вас есть предположения или сталкивались с чем то подобным просьба написать в комментариях. В результате мы получаем простое решение для организации технического зрения.
4.2 Как это можно использовать На прошедшей летней физико-математической школе инновационных проектов «Сотворение будущего» Ссылка я предложил одному из своих учеников — десятикласснику придумать проект где можно было бы применить подобный подход. В результате родился проект «Робот-исследователь с дистанционным управлением по каналу ZigBee». Результатом этого проекта стал макет робота, который управлялся в полуавтоматическом режиме — оператор с компьютера задает точку назначения и робот в процессе движения передает видеокартинку, а так же объезжает препятствия. Так же в процессе движения робот по ZigBee передает данные о своем состоянии (направление движения, наличие препятствия). Реализовано это было на основе конструктора профессионального уровня, а именно двухколесной машинки из Bioloid Stem.
Управляющая программа была разработана на LabView на основе примеров, которые я подробно описал в первом своем посте LabView в робототехнике — создание SCADA системы для управления роботом. В результате получилось следующее (программа разрабатывалась школьником практически без вмешательства преподавателя):
Я намеренно не вносил никаких изменений ни в интерфейс ни в код программы, для того чтобы показать насколько просто и быстро (на проект ушло 3е суток) школьник не имевший никакого опыта в программировании может освоить основные принципы разработки в LabView (после коротких двухчасовых курсов). Часть кода представлена на рисунке ниже.
Мне кажется, что для школьника который не имел опыта в программированиии, это отличный результат.
5. Заключение Вопрос расширения робототехнического конструктора в процессе его освоения становится со временем все более актуальным. В этой статье я предложил 2 варианта нестандартного подхода к расширению возможностей конструктора путем использования LabView и девайсов сторонних разработчиков. Надеюсь, что кому то пригодится данная информация в реализации своих идей и проектов. Спасибо за внимание)