На каком языке программирования пишут роботов. Обзор шикарного робота LEGO, который можно программировать. Где взять материал

На каком языке программирования пишут роботов. Обзор шикарного робота LEGO, который можно программировать. Где взять материал

Программирование роботов обычно является заключительным этапом, связанным с созданием роботов.

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

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

Какой язык выбрать?

Какой язык программирования выбрать для вашего робота? Существует много языков программирования, которые можно использовать для программирования микроконтроллеров. Наиболее распространенными языками программирования роботов являются:

  • Ассемблер
  • Basic
  • C / C ++
  • Python
  • Программное обеспечение Arduino

Ассемблер

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


Basic

Один из первых широко используемых языков программирования. Он по-прежнему используется некоторыми микроконтроллерами (Basic Micro , BasicX , Parallax) для программирования учебных роботов;

C / C ++

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

Java

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

C #

Запатентованный язык Microsoft используется для разработки приложений в Visual Studio;

Программирование для контроллеров Arduino

Используется вариант C ++. Программирование роботов на нём включает некоторые упрощения для того, чтобы сделать программирование не таким сложным;


Python

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

Вы выбрали микроконтроллер на основе необходимых вам функций (количество операций ввода-вывода, специальные функции и т. д.). Часто микроконтроллер предназначен для программирования на определенном языке.


  • Микроконтроллеры Arduino используют программное обеспечение Arduino и перепрограммируются в процессе обработки.
  • Базовые микроконтроллеры Stamp используют PBasic.
  • Микроконтроллеры Basic Atom используют Basic Micro.
  • Javelin Stamp из Parallax запрограммирован на Java.

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

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

Программирование роботов — начало.

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


Это одна из простейших программ, которые могут быть сделаны на компьютере.

Она предназначена для печати строки текста (например, «Hello World») на мониторе компьютера или на ЖК-экране контроллера.

В случае с микроконтроллером другой очень простой программой, которую вы можете сделать — это переключение вывода IO. Присоединение светодиода к выходному контакту. Затем установление контакта I / O в положение ON и OFF приведет к миганию светодиода. При помощи контактов I / O можно запрограммировать много сложных функций. Например, включение многосегментных светодиодов для отображения текста и цифр, управления электромагнитными реле, сервоприводами и т.д.

Шаг 1.

Убедитесь, что у вас есть все компоненты, необходимые для программирования микроконтроллера. Не все микроконтроллеры поставляются со всем необходимым для их программирования. Большинство микроконтроллеров необходимо подключить к компьютеру через USB-штекер.


Если ваш микроконтроллер не оснащен разъемом USB, возможно вам понадобится отдельный USB-адаптер для последовательного интерфейса. Этот адаптер нужно правильно подключить. Многие микроконтроллеры программируются либо через порт RS-232, либо через USB. Часто они включают в себя разъем USB на плате. Разъем USB используется не только для двусторонней связи, но и для питания платы микроконтроллера.

Шаг 2.

Подключите микроконтроллер к компьютеру и проверьте, к какому COM-порту он подключен.


Не все микроконтроллеры смогут быть обнаружены компьютером. Поэтому вы должны прочитать в руководстве «Начало работы. И тогда вы будете точно знать, что нужно сделать, чтобы компьютер распознал его и смог с ним общаться. Вам может быть придется загрузить «драйверы» (специфичные для каждой операционной системы), чтобы ваш компьютер мог понять, как общаться с микроконтроллером и / или USB-конвертером последовательного преобразователя.

Шаг 3.

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

Не нужно изобретать велосипед. Большинство производителей предоставляют некоторый код (или псевдокод), объясняющий, как заставить контроллер работать. Пример кода может быть на языке программирования, который вы не знаете, но не стоит отчаиваться. Просто выполните поиск в Интернете, чтобы узнать, создали ли другие люди необходимый код.

  • Изучите руководства по продуктам и руководство пользователя.
  • Посетите форум производителя.
  • Проверьте публикации в Интернете для продукта и кода.
  • Прочтите руководство, чтобы понять, как написать код.

Создавайте управляемые куски функционального кода.

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

Документируйте все в коде, используя комментарии.

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

Сохраняйте разные версии кода.

Не всегда перезаписывайте один и тот же файл. Если вы обнаружите, что ваши 200+ строк кода не будут компилироваться, не стоит останавливаться только на этой версии кода. Вместо этого вы можете вернуться к ранее сохраненной (и функциональной) версии и добавить или изменить ее по мере необходимости. Код не занимает много места на жестком диске. Поэтому вы можете спокойно сохранять несколько копий.

При отладке робота поднимите его.

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

Если код делает что-то, что кажется неработоспособным.

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

Практический пример.

Для нашего проекта был выбран набор Lego Mindstorms EV3. Для него есть специальная графическая среда программирования EV3 Programmer. Её можно бесплатно скачать с официального сайта Лего и сразу приступать к программированию робота.


Программирование происходит при помощи пиктограмм и является доступным для понимания.

Установка программного обеспечения для Lego EV3.

Не знаю, задумывался кто-либо из вас о создании собственного «чудо-робота» для торговли, а у меня такая идея возникала неоднократно. Единственное, что останавливало – незнание основных принципов создания алгоритма, да и с программированием как-то не очень сложилось. Но если цель поставлена – ее необходимо реализовать. Мы знаем, что сегодня есть несколько вариантов создания робота для торговли – на базе торговых площадок (некоторые из них позволяют разрабатывать свои алгоритмы торговли), на базе хорошо известного Excel, с помощью специального ПО вроде WealthLab или MetaStock и, конечно, написание программы на одном из языков программирования. Выбор здесь действительно широк - C++, Delphi, Java, VB, C# и прочие. Но какой язык больше всего подойдет для создания качественного робота? На самом деле, вопрос уже поставлен неправильно. Идеального языка программирования для написания программы алгоритмической торговли не существует. Очень важно при создании своей системы ориентироваться на целую группу факторов, о который пойдет речь ниже. Только путем глубокого анализа можно подобрать для себя наиболее подходящий инструмент. В данной статье мы кратко пройдемся по ряду основных тонкостей создания советника.

Что должен делать ваш ?

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

Виды стратегий

Учтите, что стратегии делятся на два основных вида – те, что генерируют сигналы, и стратегии исследовательского характера. В первом случае алгоритм программы должен четко знать, когда производить покупку, продажу, посылать приказы и так далее. Для такой стратегии может понадобиться высокий уровень производительности, хорошая ширина канала, отсутствие различных задержек. В случае с исследовательским алгоритмом основной упор необходимо делать на исторических данных. Такой метод часто называется бэктестингом. При формировании данного модуля необходимо учитывать две составляющие – алгоритмическую сложность программы и объем информации. В некоторых случаях эффективность исследовательской стратегии зависит от числа ядер процессора и его производительности.

Тип стратегии

Определитесь, на каком рынке вы будете работать, потребуется ли подключение внешних поставщиков, какой будет частота операций и их объемы. К примеру, для работы с акциями низкой ликвидности на американском рынке необходимо использовать совершенно иные принципы, чем в случае с высокочастотным алгоритмом при работе на . Проанализируйте доступность подключения к системе поставщика, скоростной режим передачи данных, структуру АРI, возможности сохранения важной информации и так далее. Если организовать доступ к нескольким системам одновременно, то это только плюс. Учтите, что для качественной обработки большого объема данных понадобится надежный торговый «двигатель» и бэктестер. В этом случае идеальным вариантом будет С++, а в некоторых случаях и вовсе можно использовать возможности доступного Assembler.

Создаем исследовательскую систему

Создание такой системы – довольно трудоемкий процесс и здесь без IDE вроде R Studio или MathLab будет сложно обойтись. Важно выбрать язык, который позволит проводить полноценное тестирование кода и даст необходимое быстродействие. В этом отношении есть два достойных языка – С# и С++. Их преимущество – наличие достаточного объема инструментов для полноценной отладки готового алгоритма. Есть также вариант с использованием MathLab или R Studio, созданного на базе языка R. Если количество параметров при бэктестинге очень большое, то хорошо себя проявляет С++. Возможен вариант с использованием Python, но в этом случае необходимо использовать библиотеки NumPy/pandas.

Конструктор портфолио

При создании своей системы не стоит забывать о важности конструктора портфолио, который позволяет выделить наиболее важные сделки и совершать только те из них, которые приносят максимальную . Чтобы этого добиться, алгоритм должен учитывать целый ряд нюансов – класс актива, тип компании, особенности акций, и так далее. Здесь удобнее всего применять библиотеки для С++ - LAPACK, uBLAS и NAG.

Торговый движок

При выборе языка программирования с учетом особенностей будущего движка необходимо исходить из основных задач – получения «чистых» торговых сигналов, риск-менеджмента, конструктора потфолио и так далее. Чаще всего необходимо АРI или работа через протокол FIX. Следовательно, при выборе необходимо провести хотя бы небольшой анализ качества АРI – производительности, объема документации, необходимости применения дополнительного софта и так далее. Многие брокерские АРI работают на Java или С++. Но даже при работе на этих языках систему желательно тестировать перед применением. В случае если есть ошибки в реализации системы, могут возникнуть проблемы с производительностью, что в случае с данным видом торговли очень критично. Таким образом, при написании торгового движка лучшим вариантом будет применение Java или С++.

Производительность

Ключевым аспектом для любой торговой системы является ее производительность, под которой понимается целый ряд факторов – скорость выполнения, качество канала связи, наличие сетевой задержки, масштабирование и так далее. В этом отношении отличный вариант применение таких языков, как MatLab, Python, C++, Java и R. Их преимущество – наличие высокопроизводительных библиотек. При создании качественного робота необходимо сразу решить проблему задержек, которые могут иметь место при обращении к базе данных, генерации торговых сигналов, проставлении приказов и так далее. Чтобы исключить неприятные моменты, желательно провести оптимизацию на уровне ядра. Нельзя забывать о важности кэширования и динамического выделения памяти (на Java и С# с этим проблем не возникает).

Отладка

Еще один важный момент – возможность полноценной отладки уже готовой программы. Здесь выделяются два языка – Java и С++. В них вопросы отладки и тестирования раскрыты лучше всего.

Выводы

Таким образом, выбор языка программирования для торговой системы – это трудоемкий процесс, где не существует ни одного на 100% идеального варианта. Здесь важнее всего с умом подойти к выбору, учесть поставленные задач, построить качественную систему и, конечно, изучить язык (если это необходимо). Удачи.

Будьте в курсе всех важных событий United Traders - подписывайтесь на наш

Многие робототехнические контроллеры реализованы с использованием языков программирования специального назначения. Например, многие программы для обобщающей архитектуры были реализованы на языке поведения , который был определен Бруксом. Этот язык представляет собой язык управления в реальном времени на основе правил, результатом компиляции которого становятся контроллеры AFSM . Отдельные правила этого языка, заданные с помощью синтаксиса, подобного Lisp , компилируются в автоматы AFSM, а группы автоматов AFSM объединяются с помощью совокупности механизмов передачи локальных и глобальных сообщений.

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

Одним из таких языков является универсальный робототехнический язык , или сокращенно GRL (Generic Robot Language ). GRL- это функциональный язык программирования для создания больших модульных систем управления. Как и в языке поведения, в GRL в качестве основных конструктивных блоков используются конечные автоматы. Но в качестве настройки над этими автоматами язык GRL предлагает гораздо более широкий перечень конструкций для определения коммуникационного потока и синхронизации ограничений между различными модулями, чем язык поведения. Программы на языке GRL компилируются в эффективные программы на таких языках команд, как С .

Еще одним важным языком программирования (и связанной с ним архитектурой) для параллельного робототехнического программного обеспечения является система планирования реактивных действий, или сокращенно RAPS (Reactive Action Plan System) . Система RAPS позволяет программистам задавать цели, планы, связанные с этими целями (или частично определять политику), а также задавать условия, при которых эти планы по всей вероятности будут выполнены успешно.

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

Существует также несколько других языков, которые обеспечивают использование в роботах средств формирования рассуждений и средств обучения. Например, Gologпредставляет собой язык программирования, позволяющий обеспечить безукоризненное взаимодействие средств алгоритмического решения задач (планирования) и средств реактивного управления, заданных непосредственно с помощью спецификации.

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

Как только программа управления достигает точки недетерминированного выбора, вызывается планировщик (заданный в форме программы доказательства теорем) для определения того, что делать дальше. Таким образом программист может определять частично заданные контроллеры и опираться на использование встроенных планировщиков для принятия окончательного выбора плана управления.

Основной привлекательной особенностью языка Golog является предусмотренная в нем безукоризненная интеграция средств реактивного управления и алгоритмического управления. Несмотря на то что при использовании языка Golog приходится соблюдать строгие требования (полная наблюдаемость, дискретные состояния, полная модель), с помощью этого языка были созданы высокоуровневые средства управления для целого ряда мобильных роботов, предназначенных для применения внутри помещений.

Язык «JSk CES (сокращение от C++ for embedded systems - C++ для встроенных систем) - это языковое расширение C++, в котором объединяются вероятностные средства и средства обучения. В число типов данных CES входят распределения вероятностей, что позволяет программисту проводить расчеты с использованием неопределенной информации, не затрачивая тех усилий, которые обычно связаны с реализацией вероятностных методов.

Еще более важно то, что язык CES обеспечивает настройку робототехнического программного обеспечения с помощью обучения на основании примеров, во многом аналогично тому, что осуществляется в алгоритмах обучения. Язык CES позволяет программистам оставлять в коде «промежутки», которые заполняются обучающими функциями; обычно такими промежутками являются дифференцируемые параметрические представления, такие как нейронные сети. В дальнейшем на отдельных этапах обучения, для которых учитель должен задать требуемое выходное поведение, происходит индуктивное обучение с помощью этих функций. Практика показала, что язык CES может успешно применяться в проблемных областях, характерных для частично наблюдаемой и непрерывной среды.

Язык ALisp представляет собой расширение языка Lisp . Язык ALisp позволяет программистам задавать недетерминированные точки выбора, аналогичные точкам выбора в языке Golog. Но в языке ALisp для принятия решений применяется не программа доказательства теорем, а средства определения правильного действия с помощью индуктивного обучения, в которых используется обучение с подкреплением. Поэтому язык ALisp может рассматриваться как удобный способ внедрения знаний о проблемной области в процедуру обучения с подкреплением, особенно знаний об иерархической структуре «процедур» желаемого поведения. До сих пор язык ALispприменялся для решения задач робототехники только в имитационных исследованиях, но может стать основой многообещающей методологии создания роботов, способных к обучению в результате взаимодействия со своей средой.

Что общего у программиста, занимающегося андроидами, погруженного в психологию и бихевиористику, и инженера, который пишет алгоритмику индустриальных роботов и изучает мехатронику и высшую математику? Оба они занимаются робототехникой - самой востребованной отраслью в ближайшем будущем. Сейчас роботостроение в России - непаханое поле: потребность в разных роботах (промышленных, домашних, мобильных, боевых, антропоморфных) довольно высокая, а специализируются на их производстве всего несколько компаний. Что нужно знать о профессии робототехника и чему начинать учиться уже сегодня, Look At Me узнал у экспертов.

Эланд Инбар о недостатках американского
образования и о том, чем полезен конструктор Lego

«У создания роботов есть две важных составляющих: инженерные решения и железо, с одной стороны, и обработка данных и софт - с другой. Чтобы быть робототехником, нужно понимать и разбираться в обоих вопросах, там как они одинаково важны. Роботы - это те же самые компьютеры, только с моторами и сенсорами. Думайте о них как об информатике, воплощённой в жизнь. В любом случае, чтобы постигнуть эту науку, вам придётся начать с разработки программного обеспечения, а значит, придётся выучить языки программирования. Например, Python широко поддерживается многими платформами. ROS (Robot Operating System ) сейчас тоже набирает популярность, хотя их создателей Willow Garage больше не существует. Начинающим робототехникам я рекомендую приобрести конструкторы LEGO EV3 или Robotis Bioloid для тренировок, они помогут погрузиться в детали. Добейтесь уверенности при работе с этими конструкторами, разработайте основные алгоритмы (простейшую навигацию, захваты и т. д.). Это даст вам базу. Потом надо обязательно устроиться интерном в робототехническую компанию - там вас научат всему. Кстати, если вы решили учиться робототехнике в американском вузе, то помните, что там основное внимание уделяется машиностроению, а вам никак нельзя забывать про софт.

Сейчас очень много прикольных роботов, но никто их не покупает, потому что на самом деле они не решают важных проблем

Однажды вы почувствуете, что готовы к созданию собственного робота. Это и легче, и труднее всего. Поэтому я всегда советую начинать с необходимости. Возьмите за основу реальную проблему, и пусть ваше устройство решает её. Сейчас очень много прикольных роботов, но никто их не покупает, потому что на самом деле они не решают важных проблем. В тоже время сейчас проблем полно. Займитесь ими, и это приведёт вас к успеху».

Владимир Белый о том, почему роботов
стоит создавать в человеческом обличии

«Робототехника - очень широкое понятие, в него входит и разработка программного обеспечения и мобильного софта, и создание сложных инженерных решений, программирование искусственного интеллекта и дизайн. Это очень перспективное направление не только для инженеров и программистов, но и для дизайнеров, маркетологов и даже психологов. Мы живём в интересное время: на наших глазах зарождается абсолютно новый рынок, продукты которого изменят нашу жизнь. Подобное случилось, когда появились, например, персональные компьютеры.

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

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

Нужно сразу создавать параллельный мир, где роботы сосуществуют с людьми
и становятся их помощниками

Сегодня антропоморфная робототехника пока ещё находится в зарождающейся стадии: областей для применения таких роботов много, а нерешённых проблем - ещё больше. Наша компания старается развивать эту отрасль. Мы специально создали экосистему, в которой разработчикам ПО даётся возможность делать приложения для наших роботов, то есть фактически организовали рабочие места для программистов. Кроме того, это хорошо и для потребителя. Покупая нашего робота Alphabot или арендуя его, он получает некую машину, которую можно «приспособить» под конкретные нужды. Здесь можно провести аналогию с App Store. Мы покупаем IPAD, загружаем нужные программы и получаем персонифицированное устройство.

Однако на данном этапе люди ещё не могут свыкнуться с мыслью, что вскоре роботы войдут в нашу жизнь так же плотно, как, например, планшеты. Важно понимать, что мы не призываем разрушить старый мир, а на его руинах что-то создавать. Нет! Нужно сразу создавать параллельный мир, где роботы сосуществуют с людьми и становятся их помощниками. Призываем всех людей присоединиться к такой идеологии и вместе развивать будущее человечества.

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

Сергей Мельников о том, как самостоятельно изучить робототехнику и собрать своё первое устройство

Сергей Мельников

Разработчик автоматизированных систем, программист, преподаватель робототехники, администратор servodroid.ru

«Я стал заниматься роботами ещё в школе, когда меня зачислили в кружок «Радиолюбитель». Там я научился паять, разбираться в схемотехнике и делать простые инженерные конструкции. Когда же я научился читать любые радиоэлектронные схемы, дело дошло до простого робота с парой светодатчиков и реле, по которым он видел, и мог передвигаться. Самое интересное - наблюдать, как «железяка» без человеческой помощи сама, своими силами, что-то делает. После того как я собрал своё первое громоздкое устройство с кучей проводов, залитое клеем и обмотанное скотчем, я влюбился в робототехнику.

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

Я специализируюсь не только на BEAM-робототехнике, но и на сложных вычислительных системах, комплексах и, конечно же, программном обеспечении. Например, я сотрудничаю с МЧС и занимаюсь роботами для спасательных и разведывательных работ. Но в основном моя любимая часть - это BEAM («биология, электроника, эстетика, механика») . С этого всё начинается: с простейших роботов из доступных компонентов без сложного программирования. Собирая BEAM-робота, мы стараемся подходить к выполнению задачи с разных ракурсов, даже не имея большого числа электронных компонентов и логических цепочек. Собирая такого робота, мы в конце концов можем ткнуть пальцем в любую его часть и рассказать о ней всё от А до Я. Рассказать, как идёт сигнал от фотодатчика, как он обрабатывается микросхемой, и что получается в конце. Мы всегда можем по цепочке выявить причину, из-за которой не работает робот. Это лучшая база для новичков.

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

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

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

Введение

Итак. Что же такое робот? В большинстве случаев это автоматическое устройство, которое реагирует на какие-либо действия окружающей среды. Роботы могут управляться человеком или выполнять заранее запрограммированные действия. Обычно на роботе располагают разнообразные датчики (расстояния, угла поворота, ускорения), видеокамеры, манипуляторы. Электронная часть робота состоит из микроконтроллера (МК) - микросхема, в которую заключён процессор, тактовый генератор, различная периферия, оперативная и постоянная память. В мире существует огромное количество разнообразных микроконтроллеров для разных областей применения и на их основе можно собирать мощных роботов. Для любительских построек широкое применение нашли микроконтроллеры AVR. Они, на сегодняшний день, самые доступные и в интернете можно найти много примеров на основе этих МК. Чтобы работать с микроконтроллерами тебе нужно уметь программировать на ассемблере или на Cи и иметь начальные знания в цифровой и аналоговой электронике. В нашем проекте мы будем использовать Cи. Программирование для МК мало чем отличается от программирования на компьютере, синтаксис языка такой же, большинство функций практически ничем не отличаются, а новые довольно легко освоить и ими удобно пользоваться.

Что нам нужно

Для начала наш робот будет уметь просто объезжать препятствия, то есть повторять нормальное поведение большинства животных в природе. Всё что нам потребуется для постройки такого робота можно будет найти в радиотехнических магазинах. Решим, как наш робот будет передвигаться. Самым удачным я считаю гусеницы, которые применяются в танках, это наиболее удобное решение, потому что гусеницы имеют большую проходимость, чем колёса машины и ими удобнее управлять (для поворота достаточно вращать гусеницы в разные стороны). Поэтому тебе понадобится любой игрушечный танк, у которого гусеницы вращаются независимо друг от друга, такой можно купить в любом магазине игрушек по разумной цене. От этого танка тебе понадобится только платформа с гусеницами и моторы с редукторами, остальное ты можешь смело открутить и выкинуть. Так же нам потребуется микроконтроллер, мой выбор пал на ATmega16 - у него достаточно портов для подключения датчиков и периферии и вообще он довольно удобный. Ещё тебе потребуется закупить немного радиодеталей, паяльник, мультиметр.

Делаем плату с МК

В нашем случае микроконтроллер будет выполнять функции мозга, но начнём мы не с него, а с питания мозга робота. Правильное питание - залог здоровья, поэтому мы начнём с того, как правильно кормить нашего робота, потому что на этом обычно ошибаются начинающие роботостроители. А для того, чтобы наш робот работал нормально нужно использовать стабилизатор напряжения. Я предпочитаю микросхему L7805 - она предназначена, чтобы на выходе выдавать стабильное напряжение 5В, которое и нужно нашему микроконтроллеру. Но из-за того, что падение напряжения на этой микросхеме составляет порядка 2,5В к нему нужно подавать минимум 7,5В. Вместе с этим стабилизатором используются электролитические конденсаторы, чтобы сгладить пульсации напряжения и в цепь обязательно включают диод, для защиты от переполюсовки.

Теперь мы можем заняться нашим микроконтроллером. Корпус у МК — DIP (так удобнее паять) и имеет сорок выводов. На борту имеется АЦП, ШИМ, USART и много другого, что мы пока использовать не будем. Рассмотрим несколько важных узлов. Вывод RESET (9-ая нога МК) подтянут резистором R1 к «плюсу» источника питания - это нужно делать обязательно! Иначе твой МК может непреднамеренно сбрасываться или, проще говоря - глючить. Так же желательной мерой, но не обязательной является подключение RESET’а через керамический конденсатор C1 к «земле». На схеме ты так же можешь увидеть электролит на 1000 мкФ, он спасает от провалов напряжения при работе двигателей, что тоже благоприятно скажется на работе микроконтроллера. Кварцевый резонатор X1 и конденсаторы C2, C3 нужно располагать как можно ближе к выводам XTAL1 и XTAL2.

О том, как прошивать МК, я рассказывать не буду, так как об этом можно прочитать в интернете. Писать программу мы будем на Cи, в качестве среды программирования я выбрал CodeVisionAVR. Это довольно удобная среда и полезна новичкам, потому что имеет встроенный мастер создания кода.

Управление двигателями

Не менее важным компонентом в нашем роботе является драйвер двигателей, который облегчает нам задачу в управлении им. Никогда и ни в коем случае нельзя подключать двигатели напрямую к МК! Вообще мощными нагрузками нельзя управлять с микроконтроллера напрямую, иначе он сгорит. Пользуйтесь ключевыми транзисторами. Для нашего случая есть специальная микросхема - L293D. В подобных несложных проектах всегда старайтесь использовать именно эту микросхему с индексом «D», так как она имеет встроенные диоды для защиты от перегрузок. Этой микросхемой очень легко управлять и её просто достать в радиотехнических магазинах. Она выпускается в двух корпусах DIP и SOIC. Мы будем использовать в корпусе DIP из-за удобства монтажа на плате. L293D имеет раздельное питание двигателей и логики. Поэтому саму микросхему мы будем питать от стабилизатора (вход VSS), а двигатели напрямую от аккумуляторов (вход VS). L293D выдерживает нагрузку 600 мА на каждый канал, а этих каналов у неё два, то есть к одной микросхеме можно подключить два двигателя. Но, чтобы перестраховаться, мы объединим каналы, и тогда потребуется по одной микре на каждый двигатель. Отсюда следует, что L293D сможет выдержать 1.2 А. Чтобы этого добиться нужно объединить ноги микры, как показано на схеме. Микросхема работает следующим образом: когда на IN1 и IN2 подаётся логический «0», а на IN3 и IN4 логическая единица, то двигатель вращается в одну сторону, а если инвертировать сигналы - подать логический ноль, тогда двигатель начнёт вращаться в другую сторону. Выводы EN1 и EN2 отвечают за включение каждого канала. Их мы соединяем и подключаем к «плюсу» питания от стабилизатора. Так как микросхема греется во время работы, а установка радиаторов проблематична на этот тип корпуса, то отвод тепла обеспечивается ногами GND — их лучше распаивать на широкой контактной площадке. Вот и всё, что на первое время тебе нужно знать о драйверах двигателей.

Датчики препятствий

Чтобы наш робот мог ориентироваться и не врезался во всё, мы установим на него два инфракрасных датчика. Самый простейший датчик состоит из ик-диода, который излучает в инфракрасном спектре и фототранзистор, который будет принимать сигнал с ик-диода. Принцип такой: когда перед датчиком нет преграды, то ик-лучи не попадают на фототранзистор и он не открывается. Если перед датчиком препятствие, тогда лучи от него отражаются и попадают на транзистор - он открывается и начинает течь ток. Недостаток таких датчиков в том, что они могут по-разному реагировать на различные поверхности и не защищены от помех — от посторонних сигналов других устройств датчик, случайно, может сработать. От помех может защитить модулирование сигнала, но пока мы этим заморачиватся не будем. Для начала, и этого хватит.


Прошивка робота

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

#include
#include

Следующие строки условные, потому что значения PORTC зависят от того, как ты подключил драйвер двигателей к своему микроконтроллеру:

PORTC.0 = 1; PORTC.1 = 0; PORTC.2 = 1; PORTC.3 = 0; Значение 0xFF означает, что на выходе будет лог. «1», а 0x00 - лог. «0». Следующей конструкцией мы проверяем, есть ли перед роботом препятствие и с какой оно стороны: if (!(PINB & (1<

Если на фототранзистор попадает свет от ик-диода, то на ноге микроконтроллера устанавливается лог. «0» и робот начинает движение назад, чтобы отъехать от препятствия, потом разворачивается, чтобы снова не столкнуться с преградой и затем опять едет вперёд. Так как у нас два датчика, то мы проверяем наличие преграды два раза - справа и слева и потому можем узнать с какой стороны препятствие. Команда «delay_ms(1000)» указывает на то, что пройдёт одна секунда, прежде чем начнёт выполняться следующая команда.

Заключение

Я рассмотрел большинство аспектов, которые помогут тебе собрать твоего первого робота. Но на этом робототехника не заканчивается. Если ты соберёшь этого робота, то у тебя появится куча возможностей для его расширения. Можно усовершенствовать алгоритм робота, как например, что делать, если препятствие не с какой-то стороны, а прямо перед роботом. Так же не помешает установить энкодер - простое устройство, которое поможет точно располагать и знать расположение твоего робота в пространстве. Для наглядности возможна установка цветного или монохромного дисплея, который может показывать полезную информацию - уровень заряда аккумулятора, расстояние до препятствия, различную отладочную информацию. Не помешает и усовершенствование датчиков - установка TSOP (это ик-приёмники, которые воспринимают сигнал только определённой частоты) вместо обычных фототранзисторов. Помимо инфракрасных датчиков существуют ультразвуковые, стоят подороже, и тоже не лишены недостатков, но в последнее время набирают популярность у роботостроителей. Для того, чтобы робот мог реагировать на звук, было бы неплохо установить микрофоны с усилителем. Но по-настоящему интересным, я считаю, установка камеры и программирование на её основе машинного зрения. Есть набор специальных библиотек OpenCV, с помощью которых можно запрограммировать распознавание лиц, движения по цветным маякам и много всего интересного. Всё зависит только от твоей фантазии и умений.

Список компонентов:

    ATmega16 в корпусе DIP-40>

    L7805 в корпусе TO-220

    L293D в корпусе DIP-16 х2 шт.

    резисторы мощностью 0,25 Вт номиналами: 10 кОм х1 шт., 220 Ом х4 шт.

    конденсаторы керамические: 0.1 мкФ, 1 мкФ, 22 пФ

    конденсаторы электролитические: 1000 мкФ х 16 В, 220 мкФ х 16В х2 шт.

    диод 1N4001 или 1N4004

    кварцевый резонатор на 16 МГц

    ИК-диоды: подойдут любые в количестве двух штук.

    фототранзисторы, тоже любые, но реагирующие только на длину волны ик-лучей

Код прошивки:

/***************************************************** Прошивка для робота Тип МК: ATmega16 Тактовая частота: 16,000000 MHz Если у тебя частота кварца другая, то это нужно указать в настройках среды: Project -> Configure -> Закладка "C Compiler" *****************************************************/ #include #include void main(void) { //Настраиваем порты на вход //Через эти порты мы получаем сигналы от датчиков DDRB=0x00; //Включаем подтягивающие резисторы PORTB=0xFF; //Настраиваем порты на выход //Через эти порты мы управляем двигателями DDRC=0xFF; //Главный цикл программы. Здесь мы считываем значения с датчиков //и управляем двигателями while (1) { //Едем вперёд PORTC.0 = 1; PORTC.1 = 0; PORTC.2 = 1; PORTC.3 = 0; if (!(PINB & (1<О моём роботе

В данный момент мой робот практически завершён.


На нём установлена беспроводная камера, датчик расстояния (и камера и этот датчик установлены на поворотной башне), датчик препятствия, энкодер, приёмник сигналов с пульта и интерфейс RS-232 для соединения с компьютером. Работает в двух режимах: автономном и ручном (принимает сигналы управления с пульта ДУ), камера также может включаться/выключаться дистанционно или самим роботом для экономии заряда батарей. Пишу прошивку для охраны квартиры (передача изображения на компьютер, обнаружение движений, объезд помещения).