| Самодельный робот |
Статьи о роботахАлгоритм поиска пути для роботов Выбор и описание алгоритма поиска пути, подходящего для использования при ориентировании мобильных роботов по заранее заданной карте местности Автор: Андрей Маркеев Язык для описания роботов RoboML Стандартизация представления данных является важным моментом любой области знаний. RoboML - язык, который решает эту задачу в области робототехники. Автор: Андрей Маркеев XML-спецификация языка описания роботов, снабженная подробными русскими комментариями. Детальное ее описание - в следующей статье о RoboML. Автор: Андрей Маркеев Рассматривается использование робота, сделанного на основе персонального компьютера, в охранных системах. Автор: Андрей Маркеев Робот и искусственный интеллект Подход к использованию технологий искусственного интеллекта в системе управления роботов. Автор: Андрей Маркеев Общая идея. Краткое описание текущего положения дел в области робототехники, предпосылок для создания описываемого робота, потенциальных возможностей применения и т.д. Автор: Андрей Маркеев
|
|
|||||||||||||||||||||||||
|
вернуться к списку статей
RoboML - язык описания структуры роботаАвтор: Маркеев Андрей Перепечатка материалов статьи При проектировании собственного робота, автор составлял во множестве схемы и диаграммы самых разных типов. Сначала - без учета каких-либо стандартов, затем - с помощью языка UML (Universal Markup Language - универсальный язык разметки). Получившиеся диаграммы и схемы поголовно имеют один и тот же недостаток, имя ему - неполнота. В результате поиска возможностей устранения этого недостатка, появилась эта статья. Как Вы наверное уже догадались, RoboML - это специальный язык для описания структуры робота. Такой язык может быть очень полезен любому роботостроителю, так как позволяет стандартизировать подход к описанию робота. Иными словами, меньше шансов что-то пропустить при проектировании будущего робота. И больше шансов найти ошибки в проекте в самое короткое время. Кроме того, наличие RoboML позволяет хранить информацию по нескольким роботам в единообразном формате, осуществлять сортировку и выборку по нескольким признакам, обмениваться информацией с другими сайтами. Наконец, на основе описания RoboML может быть сгенерирован шаблон кода системы управления для будущего робота. К сожалению, язык RoboML пока не получил широкого признания. Более того, разработка языка RoboML еще далеко не закончена. В Рунете я нашел только пару упоминаний «вскользь» этого языка, да и англоязычный интернет - не переполнен. Пока... Судя по растущему быстрыми темпами интересу людей к робототехнике - что-то вроде RoboML обязательно должно появиться в ближайшее время, и получить широкое распространение. Так что имею честь представить Вам первое описание RoboML в русскоязычном интернете, возможно, оно Вам поможет при создании собственного робота. RoboML - Robot Markup Language (Язык разметки для роботов) - представляет собой язык разметки, наподобие HTML, описанный с помощью XML-схемы. RoboML позволяет описать робота с двух точек зрения: кинематической, и с точки зрения организации системы управления. Кинематическое описание робота определяет форму робота в пространстве. Для этого необходимо, во-первых, задать систему координат, во-вторых - совокупность геометрических фигур и линий, являющихся контуром тела робота. По описанию робота с точки зрения системы управления можно понять, как действует робот, на основе чего он принимает решения, из каких функциональных систем состоит. Это описание - наиболее интересное. RoboML предлагает прежде всего определить общие для всего робота входные данные, реакцию на эти данные и функцию, которая описывает зависимость реакции от входных данных. Также внутри описания с точки зрения системы управления - присутствует возможность описания всех частей, из которых функционально состоит робот. А именно - управляющих агрегатов, исполнительных механизмов и датчиков. Рассмотрим, как все это записывается в RoboML. Верхушкой описания RoboML является тег <hardware>. Hardware в переводе на русский - "железо". Очевидно, планируется создание еще одной схемы <software>, описывающей робота с точки зрения программной реализации - но пока других тегов, кроме <hardware>, не существует. Внутри <hardware> располагаются элементы <kinematics> (кинематика) и <control-system> (система управления). Остановимся подробно на <kinematics>: это, как Вы помните, кинематическое описание робота, т.е. описание его положения и конфигурации в пространстве. Прежде всего, необходимо задать систему координат:
<referenceFrame name="main" parentFrameName=""> - система координат
<origin> - начало координат, задается тремя точками
<x-coordinate value="0"/> - X
<y-coordinate value="0"/> - Y
<z-coordinate value="0"/> - Z
</origin>
<basis> - базис-векторы
<x-axis> - ось X
<alpha value="1"/>
<beta value="0"/>
<gamma value="0"/>
<y-axis> - ось Y
<alpha value="0"/>
<beta value="1"/>
<gamma value="0"/>
<z-axis> - ось Z
<alpha value="0"/>
<beta value="0"/>
<gamma value="1"/>
</basis>
</referenceFrame>
Как видно, все очень просто. В примере представлен простейший случай системы координат. Задаем начало координат, и базис-векторы для каждой из трех осей. Следует отметить, что систем координат может быть несколько, и они могут быть различным образом смещены друг относительно друга. В дальнейшем, при определении геометрии тела робота, для каждого его <shape>-элемента (shape - контур, фигура) можно задавать использование отдельной системы координат, с помощью атрибута referenceFrameName. Замечание: Автор данной статьи выражает большое сомнение, что система координат, отличная от приведенной выше, вообще будет когда-либо иметь место. Видимо, разработчики RoboML просто перестраховались, как и с определениями многих элементов. Давайте теперь рассмотрим описание геометрии тела робота. Сразу стоит отметить: геометрию робота не нужно формировать руками, за Вас это должна делать специальная программа, которая бы преобразовывала, например, чертежи из AutoCAD, в схемы на RoboML. Автору статьи такой программы найти не удалось, поэтому на сегодняшний день описание геометрии - больше теоретическая задача, нежели практическая. Ниже мы рассмотрим очень простой пример - всего лишь описание обычного "ящика" (параллелепипеда), чтобы Вы смогли оценить, насколько это трудоемко при работе вручную.
<body name="box"> - описание геометрии тела
<shape> - контур
<polyhedron> - полигедрон (ящик)
<polygon> - полигон
<segment> - сегмент
<point> - точки...
<x-coordinate value="0"/>
<y-coordinate value="0"/>
<z-coordinate value="0"/>
</point>
<point>
<x-coordinate value="0"/>
<y-coordinate value="20" unit="cm"/>
<z-coordinate value="0"/>
</point>
<point>
<x-coordinate value="0"/>
<y-coordinate value="0"/>
<z-coordinate value="40" unit="cm"/>
</point>
<point>
<x-coordinate value="0"/>
<y-coordinate value="20" unit="cm"/>
<z-coordinate value="40" unit="cm"/>
</point>
<point>
<x-coordinate value="20" unit="cm"/>
<y-coordinate value="0"/>
<z-coordinate value="0"/>
</point>
<point>
<x-coordinate value="20" unit="cm"/>
<y-coordinate value="20" unit="cm"/>
<z-coordinate value="0"/>
</point>
<point>
<x-coordinate value="20" unit="cm"/>
<y-coordinate value="20" unit="cm"/>
<z-coordinate value="40" unit="cm"/>
</point>
<point>
<x-coordinate value="20" unit="cm"/>
<y-coordinate value="0"/>
<z-coordinate value="40" unit="cm"/>
</point>
</segment>
</polygon>
<polyhedron/>
</shape>
</body>
Кроме полигедрона, есть отдельные элементы для описания цилиндроида и эллипсоида, которые описывать на RoboML - еще сложнее. В любом случае, геометрия робота никак не предназначена для ручного ввода. Формализованное описание геометрии, зато, позволяет удобным способом передавать, хранить и обрабатывать трехмерную модель Вашего робота. Обратите внимание на элементы, задающие координаты (x-coordinate, y-coordinate, z-coordinate). Все эти элементы имеют стандартный тип языка RoboML «числовое значение». Однако этот тип не такой уж простой. Элементы этого типа могут содержать следующие необязательные атрибуты:
Если Вам уже кажется, что язык RoboML - трудный, неудобный или нелогичный, - поверьте, это не так. И запомните следующую простую истину: создание хорошего и объемлющего проекта по разработке робота - это 80% успеха Вашей разработки. А основная часть робота, и самая главная - это система управления. Давайте посмотрим, как она записывается на языке RoboML. Главное, что характеризует любую управляющую систему - это входные данные, функция преобразования и выходные данные. На основе этого принципа работает и RoboML. Элемент <control-system> описывает систему управления, как совокупность из множества взаимосвязанных объектов, из которых состоит робот. Этими объектами являются:
И сама система, и каждая из перечисленных ее составных частей, может включать три вида основных логических элементов:
Функция преобразования задается средствами языка MathML, в то время как входные и выходные данные - это числовые значения RoboML. Причем формулы, описываемые с помощью MathML - можно генерировать автоматически. MathML является очень развитым языком, ему посвящены десятки страниц на сайте W3.org и множество других сайтов. Более того, есть и частичные русские переводы описания этого языка. Так что, перед тем, как начать писать формулы, как минимум скачайте MathML Generator, или воспользуйтесь online-генератором. Как видим, система управления описывается гораздо проще и логичнее, чем геометрия робота. Чтобы продемонстрировать возможности RoboML, рассмотрим следующий пример:
<control-system name="simple control system">
<sensor name="clock"> <!-- датчик-часы -->
<output name="time" observed> <!-- здесь хранится текущее время в секундах -->
</sensor>
<sensor name="left sensor" sensor-type="tactile"> <!-- левый датчик препятствия -->
<output name="need go right" observed>
</sensor>
<sensor name="right sensor" sensor-type="tactile"> <!-- правый датчик препятствия -->
<output name="need go left" observed>
</sensor>
<controller name="microcontroller"> <!-- микроконтроллер, осуществляющий управление -->
<!-- описания переменных текущего состояния -->
<input name="reverse time end" value="0" /> <!-- конечное время, когда нужно начать снова двигаться вперед -->
<input name="last reverse turn" value="2" /> <!-- куда последний раз поворачивали при реверсе -->
<transfer-function>
<var-spec var-name="goright" var-source-name="need go right" />
<var-spec var-name="goleft" var-source-name="need go left" />
<var-spec var-name="now" var-source-name="time" />
<var-spec var-name="reversetime" var-source-name="reverse time end" />
<var-spec var-name="lastturn" var-source-name="last reverse turn" />
<var-spec var-name="turnto" var-source-name="turn result" />
<var-spec var-name="moveto" var-source-name="move result" />
<!-- определяем время для реверса, и нужно ли оно вообще -->
Из этого примера очевидно, что описываемый робот состоит из двух датчиков препятствия, контроллера, поворотного механизма и основных двигателей. Реализуется следующая модель поведения:
Итак, мы только что описали с помощью RoboML простого робота, который осуществляет объезд препятствий. Более сложные роботы, например, созданные на основе компьютера, или ноутбука - могут включать сотни и тысячи переменных и формул преобразования. Несмотря на кажущуюся трудоемкость, созданная с помощью RoboML схема может стать основой для генерации шаблона кода, и является стандартизированной формой представления данных о системе управления робота. На данный момент программы-генератора для RoboML не существует, однако будем надеяться, что она скоро появится. Подводя итог, хочется отметить, что у RoboML и его аналогов - большое будущее, и с каждым годом такого рода язык будет становиться все более востребованным. Сайты о RoboML
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||