Составление карт карно. Минимизация функций с использованием карт карно. Совершенная дизъюнктивная нормальная форма

Многие робототехнические контроллеры реализованы с использованием языков программирования специального назначения. Например, многие программы для обобщающей архитектуры были реализованы на языке поведения , который был определен Бруксом. Этот язык представляет собой язык управления в реальном времени на основе правил, результатом компиляции которого становятся контроллеры 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применялся для решения задач робототехники только в имитационных исследованиях, но может стать основой многообещающей методологии создания роботов, способных к обучению в результате взаимодействия со своей средой.

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

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

То есть, собранный киберкот действительно будет мурчать, робот разговаривать и ездить а гитара выдавать бешеные «соляги».

Как это выглядит? Я собрал своего робота и сейчас всё расскажу.

Что такое LEGO Boost

Lego Boost – это развивающий конструктор, состоящий из 847 деталей. из них можно собрать на выбор одну из 5-ти моделей:

1. Робот Верни
2. Кот Фрэнки
3. Гитара 4000
4. Фабрика роботов
5. Вездеход (M.T.R.4)

Основными элементами каждой модели являются 3 детали: это основной механический блок, датчик определения цветов и расстояния и интерактивный двигатель.

Основной механический блок является «сердцем» LEGO Boost, который приводит собранный конструктор в движение. Именно к нему можно подключить свой iPhone или iPad, чтобы запрограммировать собранную модель на выполнение разных команд и даже общение с владельцем.

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

Для программирования конструктора понадобится приложение LEGO Boost Creative Toolbox [скачать в App Store ]. Скачать его придётся в обязательном порядке, потому что в коробке с конструктором нет бумажных инструкций – все этапы сборки каждой из 5-ти моделей наглядно показываются в приложении.

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

1. Робот Верни. Отличный собеседник и друг

Робот Верни может ездить и крутиться вокруг своей оси, разговаривать, различать цвета и объезжать препятствия. К роботу можно собрать пушку и стрелять по мишени.

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

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

Вот короткое видео, в котором робот Верни ведет себя неприлично:

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

Нет, пиццу не принесет. Может быть, это в следующем поколении LEGO Boost пофиксят:)

2. Киберкот Френки. Идеальный питомец без шерсти и неприятных запахов

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

У Френки тоже есть мимика, правда брови ему нужно двигать руками. Интерактивные элементы заняты в вышеописанных процессах виляния хвостом и вставанием на задние лапы.

Да, мы всё ещё говорим про конструктор LEGO.

3. Гитара 4000. Играет как настоящая

Гитара 4000 является почти настоящим музыкальным инструментом, с помощью которого можно играть музыку. Аккорды зажимать не нужно, вместо этого предлагается передвигать «слайдер» по грифу гитары. Датчик движения отслеживает положение «слайдера» и даёт команды на воспроизведение разных звуков.

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

Кстати, эта модель может проигрывать не только гитарные звуки, но и любые другие. Так что почему бы не использовать её в качестве сэмпл-машины, чтобы почувствовать себя настоящим диджеем?

4. Фабрика роботов. Для создания своей армии Терминаторов

Это самая сложная модель из всех пяти, но и самая крутая. После сборки фабрика может сама собирать небольших роботов из кубиков LEGO.

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

Краткий гайд по созданию армии роботов:

Я жалею, что сначала собрал робота Верни. Надо было собирать вот эту фабрику, чтобы завалить видеороликами, какой LEGO Boost крутой конструктор, весь инстаграм.

5. Вездеход (M.T.R.4). Проедет по любому ковру

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

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

Лучше всего один раз увидеть, как это происходит:

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

Как программировать конструктор?

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

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

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

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

Сложно собрать своего робота?

Для взрослого человека сборка любой модели LEGO Boost займёт 2-3 часа. Для ребенка же весь процесс растянется на несколько дней, особенно если чаду еще нет 10-ти лет.

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

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

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

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

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

  • Ассемблер
  • 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.

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

Google купила Boston Dynamics. Это сообщение у меня вызвало некий шок. Boston Dynamics - одна из самых известных компаний, специализирующихся на робототехнике, и, если учесть, что Google покупает уже восьмую компанию на этом рынке, возникает правомерный вопрос: что же они задумали? Похоже, нас ждет интересное десятилетие!

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

Физический и графический движок

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

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

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

Достоинства и недостатки симуляторов

Достоинства:

  • низкая стоимость;
  • возможность в любой момент доработать модель;
  • возможность отдельно тестировать функциональные составляющие робота;
  • возможность одновременной симуляции нескольких типов роботов.

Недостатки:

  • даже самый совершенный физический движок не может симулировать все законы реального мира;
  • требовательность к ресурсам машины.

Microsoft Robotics Developer Studio

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

  • библиотека Concurrent and Coordination Runtime (CCR) - предназначена для организации обработки данных с помощью параллельно и асинхронно выполняющихся методов. Взаимодействие между такими методами организуется на основе сообщений. Рассылка сообщений основана на использовании портов;
  • Decentralized Software Services (DSS) - среда, которая позволяет запускать алгоритмы обработки данных на разных ЭВМ, организовывать асинхронное взаимодействие процессов управления различными подсистемами робота;
  • Visual Simulation Environment (VSE) - среда визуализации, которая позволяет экспериментировать с моделями роботов, тестировать алгоритмы управления роботами;
  • Visual Programming Language (VPL) - язык, предназначенный для разработки программ управления роботами. Программа на таком языке представляется в виде последовательности блоков, которые выполняют обработку данных, и связей между ними.

За симулятор физики в Robotics отвечает Ageia Physx. Очень печально, но в симуляторе отсутствует трение между создаваемыми объектами, хотя моделируется трение между отдельным объектом и платформой, на которой он размещается.

Создать сцену в симуляторе и запрограммировать робота можно на VPL или C#. Естественно, что на C# сцену сделать сложнее, но зато и код получится более эффективный. Возможности Robotics позволяют смоделировать футбол роботов, железную дорогу, манипулятор, добавить на сцену нескольких роботов. Доступные из коробки сенсоры: GPS, лазерный дальномер, инфракрасный дальномер, компас, сенсор цвета, сенсор яркости, веб-камера.

Подробнее о работе с этой средой ты можешь прочитать в номерах 01’13 («Стань робототехником!») и 03’13 («Робот-шпион - это просто!»).

Robotino - робот, созданный Festo Didactic для обучения робототехнике. Для программирования робота требуется программа Robotino® View. На сайте Festo доступен симулятор робота для Windows - Robotino® SIM (есть профессиональная и бесплатная версия, бесплатная - немного урезанная по функциональности).

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

Вообще, способности бесплатного симулятора удручают. Но! Если хорошенько поискать в интернете, то можно найти версии данного симулятора, заточенные под разные задачи. Да будет тебе известно, что компания Festo Didactic выступает одним из спонсоров RoboCup . Поэтому здесь goo.gl/Wtle15 и здесь goo.gl/pHA2oL ты сможешь найти версии этого симулятора, использовавшиеся в соревнованиях.

Gazebo - мощный симулятор роботов, разработанный для операционной системы Linux. Абсолютно бесплатен для использования. Gazebo может симулировать нескольких роботов с сенсорами в окружении различных объектов. Также тут доступен редактор, который позволяет создавать 3D-сцены без программирования. Моделируемые сенсоры: лазерный дальномер, камера, кинект-сенсор, устройство для чтения RFID-меток и бамперы. Из коробки в симуляторе имеются модели следующих роботов: PR2, Pioneer2 DX, iRobot Create, TurtleBot, а также манипуляторы и захваты. К симулятору для создания качественной графики можно подключить OGRE (графический движок с открытым исходным кодом). В Gazebo встроена возможность чтения файлов в формате Collada, что позволяет добавлять в симулятор объекты, спроектированные в одном из редакторов 3D-моделей.

Gazebo используется в качестве симулятора в DARPA Robotics Challenge (DRC). В рамках DRC разработано приложение CloudSim для запуска Gazebo на платформе облачных вычислений Amazon.

AnyKode Marilou Robotics Studio

AnyKode Marilou Robotics Studio - среда разработки и симулирования мобильных роботов, гуманоидов и манипуляторов с учетом физических законов реального мира. Для объектов можно указать следующие физические параметры: массу, упругость, свойства материала, вращающие моменты, а также некоторые другие.

Marilou позволяет подключать к роботу различные виртуальные устройства: компас, акселерометры, двигатели и сервомоторы, бампер, сенсоры расстояния (ультразвуковой и инфракрасный), GPS и другие устройства.

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

В Marilou есть MODA (Marilou Open Devices Access) - SDK для работы с роботами и их компонентами в симуляторе. После синхронизации с часами симулятора алгоритмы управления роботом могут запускаться на другом компьютере сети. В зависимости от выбранного языка MODA предоставляет библиотеки (.lib или.a) или.NET-сборки (.dll) для доступа к симулятору по сети. Программирование алгоритмов управления роботов возможно с помощью языков C/C++, C++ CLI, C#, J#, VB#.

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

В ноябре 2013 года вышел новый движок симулятора для Marilou - Exec V5. Бета-версия движка может работать на Windows, Ubuntu и Mint. Новый движок многопоточный, кросс-платформенный и использует OpenGL 2.1.

Code Rally: гонки на роботах

Code Rally (разработка IBM) нельзя назвать полноценным симулятором роботов. Если быть точным, Code Rally - симулятор гонок машин (бесплатный и с открытым исходным кодом).

Цель программиста - написать алгоритм управления движения машины («роботом») по трассе (кругу) с учетом следующих правил игры:

  1. В процессе движения машина должна проходить через контрольные точки, за что ей начисляются очки.
  2. Перемещаясь по трассе, машина тратит топливо, а также может расстреливать другие машины пулями.
  3. Машине доступны координаты заправочных станций, кассет с пулями и контрольных точек; трасса ограничена стенами, за пределы которых машина не может выехать.
  4. Допускается управление скоростью машины.
  5. На трассе могут находиться заправочные станции и кассеты с пулями. При заправке топливом машина должна оставаться неподвижной. Машина может включать защиту, но в это время в удвоенном объеме тратится топливо.
  6. Очки начисляются за проезд через контрольную точку (за проезд через точки в установленном порядке начисляется больше очков), за попадание в машину противника (подбитая машина теряет топливо) и за топливо, оставшееся на момент окончания гонки.

Побеждает машина, набравшая максимальное количество очков.

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

Разработка алгоритма управления машиной выполняется в Eclipse на Java. Так что, занимаясь симуляторами, можно не только развлечься, но и Java подтянуть. В симуляторе доступно шесть трасс различной степени сложности.

Algodoo: специализированный симулятор физики

Algodoo - физический 2D-симулятор. Объекты, которые создаются в этом симуляторе, сразу начинают подчиняться законам физики. Конечно, полноценного робота в трехмерном пространстве ты в этой программе не сделаешь, зато сможешь проверить возможность работы любого механизма. В программе можно моделировать воду, пружины, оптические устройства, ракетные двигатели, оружие, автомобили.

Может показаться, что данный симулятор неполноценен в том смысле, что позволяет проектировать и исследовать только «плоских» роботов. Однако ты можешь сначала спроектировать 2D-робота, а потом создать в реале его трехмерную версию. Пример показан здесь (2:07): goo.gl/wzQ7q4 . В Algodoo встроен скриптовый язык программирования Thyme, который добавляет большую свободу действий в симуляторе. В Thyme доступны переменные, условный оператор, массивы, обработка событий, происходящих в песочнице (среде моделирования).

История Algodoo началась с игры Phun, которую разработал швед Эмиль Эрнерфельдт (это была его магистерская работа). Поддерживаемые ОС: Windows, OS X, iOS. На сайте доступна библиотека AlgoBox, в которой есть куча обучающих материалов и примеров разработки. Также посмотри

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

А кроме самого материала также комментарии одного из наших робо-экспертов, куратора екатеринбургского , Олега Евсегнеева.

Инженеры-робототехники, как правило, попадают в две категории специалистов: думающих (теоретиков) и делающих (практиков). Это означает, что робототехники должны отличаться хорошим сочетанием двух противоположных стилей работы. «Склонные к исследованиям» люди вообще любят решать проблемы, думая, читая и изучая. С другой стороны, специалисты-практики любят решать проблемы лишь «испачкав руки», можно так сказать.

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

1. Системное мышление

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

Хороший робототехник в состоянии понять и теоретически обосновать, как совместно и слаженно взаимодействуют все эти разнообразные системы. Если инженер-механик может вполне обоснованно сказать: «это не моя работа, тут нужен программист или электрик», то робототехник должен хорошо разбираться во всех этих дисциплинах.

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

2. Мышление программиста

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

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

Комментарий Олега Евсегнеева: Я бы добавил, что для создания современных роботов требуется знание языков низкого, высокого и даже сверхвысокого уровня. Микроконтроллеры должны работать очень быстро и эффективно. Чтобы этого достичь, нужно углубляться в архитектуру вычислительного устройства, знать особенности работы с памятью и низкоуровневыми протоколами. Сердцем робота может быть тяжелая операционная система, например, ROS. Здесь уже может понадобиться знание ООП, умение пользоваться серьезными пакетами машинного зрения, навигации и машинного обучения. Наконец, чтобы написать интерфейс робота в веб и связать его с сетью интернет, неплохо будет научиться скриптовым языкам, тому же python.

3. Способность к самобучению

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

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

Комментарий Олега Евсегнеева: Это ключевой навык в любом творческом деле. С помощью него можно получить другие навыки

4. Математика

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

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

5. Физика и прикладная математика

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

Комментарий Олега Евсегнеева: Есть хороший пример – автоматические станции для полета на другие планеты. Знание физики позволяет настолько точно рассчитать траекторию их полета, что спустя годы и миллионы километров аппарат попадает в точно заданную позицию.

6. Анализ и выбор решения

Быть хорошим робототехником означает постоянно принимать инженерные решения. Что выбрать для программирования - ROS или другую систему? Сколько пальцев должен иметь проектируемый робот? Какие датчики выбрать для использования? Робототехника использует множество решений и среди них почти нет единственно верного.

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

Статьи по теме: