- пункт 3.3.2 дополнен примером;
- из подраздела 3.5 исключены сокращения, не используемые в тексте настоящего стандарта;
- не включен номер подраздела 5.1 в соответствии с ГОСТ 1.5-2001 (пункт 4.2.3), номера пунктов 5.1.1 - 5.1.3 заменены на 5.1 - 5.3 соответственно;
- добавлены библиографические данные и ключевые слова в соответствии с ГОСТ 1.5-2001.
1.1 Настоящий стандарт устанавливает общее представление двумерных карт, предназначенных для навигации мобильных роботов на закрытых и открытых территориях. Настоящий стандарт определяет характеристики для представления двумерных метрических и топологических карт и рекомендуемый формат для обмена картографическими данными между роботами, компьютерами и другими устройствами. Формат представления картографических данных, установленный в настоящем стандарте, соответствует только статическим картам, т.е. картам, на которых подвижные объекты не представлены в явном виде. Кроме того, настоящий стандарт не накладывает ограничений на географический масштаб карты или на качество поступающей сенсорной информации.
В частности, в настоящем стандарте:
a) установлена иерархия терминологий, относящихся к двумерным картам для навигации роботов в помещениях и на открытой местности;
b) определена модель данных для каждого элемента в данной иерархии;
c) определен XML-формат для обмена картографическими данными между роботами, компьютерными системами и другими устройствами.
Стандарты по представлению картографических данных разрабатывают разные организации по стандартизации, такие как Международная организация по стандартизации (ИСО) и Открытый консорциум по геоинформационным системам (OGC). Область применения настоящего стандарта может быть переформулирована с точки зрения масштаба охватываемой прикладной области. На рисунке 1 показано сравнение области применения настоящего стандарта с прикладными областями других стандартов.
Таблица 1
картографических данных
1.2 Целью настоящего стандарта является определение общего представления картографических данных для роботов, включая метрические и топологические карты. Настоящий стандарт предназначен для облегчения взаимодействия между мобильными роботами, расширения рабочего диапазона и области применения роботов, технологического прогресса в области построения пространственных карт, осуществляемого роботами и/или другими подобными устройствами. Однако требования настоящего стандарта не распространяются на построение, поддержание, модернизацию и пересмотр карт для роботов.
В настоящем стандарте использована нормативная ссылка на следующий стандарт:
ГОСТ Р 60.0.0.4-2023/ИСО 8373:2021 Роботы и робототехнические устройства. Термины и определения
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя "Национальные стандарты" за текущий год. Если заменен ссылочный стандарт, на который дана недатированная ссылка, то рекомендуется использовать действующую версию этого стандарта с учетом всех внесенных в данную версию изменений. Если заменен ссылочный стандарт, на который дана датированная ссылка, то рекомендуется использовать версию этого стандарта с указанным выше годом утверждения (принятия). Если после утверждения настоящего стандарта в ссылочный стандарт, на который дана датированная ссылка, внесено изменение, затрагивающее положение, на которое дана ссылка, то это положение рекомендуется применять без учета данного изменения. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, рекомендуется применять в части, не затрагивающей эту ссылку.
В настоящем стандарте применены термины по ГОСТ Р 60.0.0.4, а также следующие термины с соответствующими определениями:
3.1.1 декартова система координат (Cartesian coordinate system): Система координат, определяющая положение точек по отношению к n взаимно перпендикулярным осям.
Примечание - Поскольку в настоящем стандарте рассмотрены двумерные карты, то n = 2.
3.1.2 локальная система координат (local coordinate system): Система координат, определенная на всем пространстве навигации робота.
Примечания
1 Начало локальной системы координат определяют пользователи в соответствии со своими требованиями.
2 Синонимом данного термина является термин "эгоцентрическая система координат (egocentric coordinate system)".
3.1.3
3.1.4 преобразование координат (coordinate transformation): Процесс перевода координат пространственного расположения из одной системы координат в другую.
Примечание - В сущности, преобразование - это способ представления одной системы координат (или одной из ее точек) относительно другой. Поскольку в настоящем стандарте рассмотрены двумерные карты, преобразование координат ограничено двумерными перемещениями и вращениями.
3.1.5
Примечание - Синонимом данного термина является термин "система отсчета (reference frame)".
На рисунке 1 показана иерархия карт, принятая в настоящем стандарте, которая помогает понять структуру модели картографических данных.
![]() в настоящем стандарте
3.2.1 глобальная карта (global map): Совокупность (набор) локальных карт, возможно содержащая информацию об их взаимном расположении и об их расположении относительно глобальной системы координат.
3.2.2 дискретная метрическая карта (discrete metric map): Карта, в которой внешняя среда представлена в виде ячеек (обычно квадратных), содержащих элементарную информацию о внешней среде.
Примечание - Синонимами данного термина являются термины "карта с координатной сеткой (grid map)" и "растровая карта (raster map)".
3.2.3 карта (робота) [(robot) map]: Карта, представляющая знание робота о рабочем пространстве и окружающей среде, а также о расположенных в них объектах.
3.2.4 карта занятости с координатной сеткой (occupancy grid map): Дискретная метрическая карта, каждая ячейка которой содержит информацию о занятости данной ячейки препятствием.
Примечание - Обычно содержание ячейки связано с вероятностью ее занятости.
3.2.5 локальная карта (local map): Топологическая или метрическая карта.
3.2.6 метрическая карта (metric map): Совокупность картографических элементов (например, ячеек, точек и отрезков линий), обладающих следующим свойством: для любых заданных на карте двух элементов a и b и при наличии определения метрического расстояния расстояние между a и b всегда может быть вычислено.
Примечание - Использованное в определении слово "любых" является отличием метрических карт от топологических, для которых метрическое расстояние, в общем случае, может быть вычислено только для некоторых элементов.
3.2.7 непрерывная метрическая карта (continuous metric map): Карта, содержащая перечень геометрических объектов (таких как точки и линии), значения координат которых принадлежат к непрерывному числовому диапазону.
Примечание - Синонимами данного термина являются термины "геометрическая карта (geometric map)" и "векторная карта (vector map)".
3.2.8 топологическая карта (topological map): Представление внешней среды на основе графа, включающего вершины, дуги и отношения их связности.
Примечание - Вершины (узлы) топологической карты представляют характерные особенности (например, показания датчиков, уникальные признаки соответствующего региона, метрические карты и т.д.) внешней среды. Дуги (ребра) топологической карты представляют прямые (одно интервальные) соединения (прямая достижимость) между соседними вершинами. Дуга (ребро) соединяет пару вершин (узлов), (t, h), что означает, что дуга направлена от вершины t (конец) до вершины h (начало).
3.3.1 особенность (feature): Представление элемента окружающей среды, отличающегося от ближайших соседних элементов.
Пример - В представлении внешней среды в форме изображения особенностью является часть изображения (представляющая некоторый элемент внешней среды), имеющая отличающиеся характеристики по интенсивности, цвету или текстуре.
EPSG - Европейская нефтяная исследовательская группа (European Petroleum Survey Group);
ID - идентификатор (Identifier);
MDR - представление картографических данных (Map Data Representation);
UML - унифицированный язык моделирования (Unified Modeling Language);
XML - расширяемый язык разметки (eXtensible Markup Language);
XSD - язык определения XML-схемы (XML Schema Definition).
В настоящем стандарте для обозначения статуса обязательности используются следующие условные обозначения, которые представлены в графе "M/O" соответствующих таблиц:
Кроме того, в графе "Максимальное число появлений" (MO) указано максимально допустимое число появлений соответствующих значений атрибутов, а признак N указывает на отсутствие верхнего предела.
В данном разделе представлена стандартная модель данных для описания внешней среды в виде электронной карты, используемой для навигации роботов. В первую очередь определены некоторые применяемые понятия, а затем представлены конкретные форматы данных.
В настоящем стандарте для представления совокупности двумерных карт используется глобальная карта в виде дерева, состоящего из узлов и дуг (хотя дерево является направленным графом, в настоящем стандарте с небольшой погрешностью использован термин "узлы" вместо термина "вершины"). Узлы представляют локальные карты, а дуги - вращательные и поступательные перемещения для перехода из системы координат конечного узла в систему координат начального узла, где вращательно-поступательное перемещение
представляет вращение против часовой стрелки Глобальная карта должна быть представлена деревом G = (N, A), где N и A - узлы и дуги, соответственно. Каждый узел
, которое представляет преобразование для преобразования точки <xj, yj> из системы координат Fj карты nj в соответствующую точку <xi, yi> в системе координат Fi карты ni. В частности, как показано в уравнении , (1)где
Следует отметить, что предыдущее представление допускает наложение карт на графе G. Например, если два узла соединены с узлом nG дугами, представляющими одинаковое вращательно-поступательное перемещение, то две соответствующие локальные карты накладываются друг на друга.
Более того, особое нулевое вращательно-поступательное перемещение (которое отлично от вращательно-поступательного перемещения, обозначаемого <0, 0, 0>) используют, когда отсутствует метрическая информация об относительном смещении двух узлов (т.е. в случае чисто топологических карт).
К дугам допускается добавить неопределенность в отношении вращательно-поступательного перемещения. Это может быть естественным образом задано в виде ковариационной матрицы 3 x 3, как представлено ниже в описании типа данных UncertaintyPose.
Иерархия структуры локальной карты представлена на рисунке 2. На UML-диаграммах, приведенных в данном разделе, атрибуты, которые в явном виде не определены как факультативные или многократные, являются обязательными и однократными. Для определения общего класса карт введено понятие локальной карты. Геометрическая карта, карта с координатной сеткой или топологическая карта должны быть унаследованными от локальной карты.
Примечание - Как определено в разделе 3, "геометрическая карта" и "карта с координатной сеткой" являются разными терминами, используемыми для обозначения непрерывной и дискретной метрической карты, соответственно. В настоящем стандарте эти два вида терминов являются взаимозаменяемыми; первый вид (геометрическая карта и карта с координатной сеткой) предпочтителен для относительно более технического описания представления картографических данных, в то время как второй вид чаще используют для иллюстративного описания.
![]() В таблицах 2 - 6 приведены определяющие элементы классов, относящихся к локальной карте.
Таблица 2
Таблица 3
Таблица 4
Таблица 5
Таблица 6
В качестве системы координат для представления картографических данных следует использовать декартову систему координат, у которой ось x направлена вправо от начала координат, а ось y - вверх.
Смещение локальной карты может быть:
- неопределенным, когда смещение не задано, что означает неизвестное пространственное расположение системы координат локальной карты. Это относится, например, к чисто топологическим картам;
- абсолютным, когда смещение задано вместе с ID EPSG_code, который определяет конкретную систему координат, в соответствии с которой рассчитывается смещение локальной карты;
- относительным по отношению к системе координат другой локальной карты, когда смещение задано вместе с reference_local_map, система координат которой является базой отсчета, в соответствии с которой рассчитывается смещение локальной карты;
- относительным по отношению к стандартной (0, 0, 0) системе координат, когда смещение задано, но не определены ни EPSG_code, ни reference_local_map.
С учетом глобальной карты, состоящей из нескольких локальных карт, настоящий стандарт должен обеспечивать выполнение одного из следующих ограничений:
C1) Если локальная карта имеет смещение, заданное абсолютным способом (геопривязанное), то все остальные локальные карты должны быть либо геопривязанными, либо определять свое пространственное расположение относительно геопривязанной локальной карты m (либо из-за того, что m является геопривязанной, либо из-за того что m определена относительно геопривязанной локальной карты m') без образования циклов (т.е. ситуаций, когда смещение локальной карты выражено в конечном счете относительно этой локальной карты).
C2) Если ни одна локальная карта не является геопривязанной, то все локальные карты определяют свои смещения либо относительно стандартной (0, 0, 0) системы координат, либо относительно другой локальной карты. В данном случае также не должно быть циклов.
Если у двух локальных карт смещения определены относительно стандартной (0, 0, 0) системы координат, то преобразование между ними возможно рассчитать. Данный вариант неприменим, если у одной из них смещение не задано (является неопределенным).
В соответствии с приведенными способами задания смещения локальных карт можно создать глобальную карту, представляющую собой многоуровневое дерево локальных карт. Ее используют для представления неопределенности пространственного расположения в системах координат локальных карт.
В случае карт с координатной сеткой локальная карта ni состоит из равномерно расположенных сеток и содержит приведенную ниже информацию.
По умолчанию карта с координатной сеткой должна состоять из одинаковых квадратных ячеек, быть прямоугольной и соосной с локальной системой координат (т.е. границы прямоугольной карты параллельны осям x и y локальной системы координат). Координатами левой нижней ячейки являются (0, 0).
В таблицах 7 - 9 определены атрибуты и типы данных карты с координатной сеткой, а ее UML-диаграмма приведена на рисунке 3.
Таблица 7
Таблица 8
Следует отметить, что наличие высоты и ширины ячейки сетки позволяет кодировать область прямоугольной формы путем сбора однородных (с одинаковым значением, взятым из одной палитры) ячеек в суперъячейку, которая может быть использована для разработки карты с координатной сеткой на основе представления в виде дерева квадрантов. Например выражение <x = 5, y = 5, height = 10, width = 10> представляет суперъячейку, состоящую из 10 x 10 ячеек, у которой левая нижняя ячейка имеет координаты <x = 5, y = 5>. По умолчанию ячейки имеют значения атрибутов <height = 1, width = 1>. Все (num_cells_x x num_cells_y) ячейки карты с координатной сеткой задают индивидуально или как часть суперъячеек.
Палитра - это таблица или функция, которая определяет значения чисел для ячеек. Палитра должна быть массивом элементов типа данных PaletteElements (таблица 9), охватывающим все возможные значения для ячеек. Например, если сетка является сеткой занятости, то значение 0,0 может соответствовать нулевой вероятности (= 0) того, что ячейка занята препятствием, в то время как значение 1,0 может соответствовать полной вероятности (= 1) того, что ячейка занята препятствием. Возможны промежуточные значения вероятности. Для описания на естественном языке значения палитры или диапазона значений может быть использована строка символов.
Таблица 9
![]() В геометрических картах локальные карты ni хранят наборы геометрических объектов. В последующем изложении точки и сегменты линий рассматриваются как геометрические объекты. Точки и сегменты линий представляют границы препятствий во внешней среде.
![]() Частными случаями геометрических карт могут быть чисто точечные геометрические карты (т.е. локальные карты ni, которые представляют собой совокупность двумерных точек, например, полученных с помощью лазерного сканирующего дальномера) и чисто сегментные геометрические карты (т.е. локальные карты ni, которые представляют собой совокупность двумерных сегментов линий).
Точка представлена своими декартовыми координатами в локальной системе координат.
Представление сегмента линии показано на рисунке 5, на котором введены обозначения: rho
![]() Таблица 10
Таблица 11
Подробное описание типа данных LineSegment
Таблица 12
Таблица 13
Топологическая карта наследуется от класса локальных карт. Для определения расположения начала координат топологической карты могут быть использованы координаты смещения. Координаты смещения являются факультативным параметром для топологических карт, т.к. чисто топологические карты не содержат никакой метрической информации.
![]() Таблица 14
Таблица 15
Таблица 16
Таблица 17
Характеристики узлов и дуг являются факультативными. Данная информация может быть использована для локализации или для устранения искажения восприятия. Какая информация необходима для устранения искажения восприятия, зависит от типа датчиков, установленных на роботе, и от типа прикладной задачи, для решения которой используется данная карта.
В данном разделе определена схема расширяемого языка разметки (XML), описывающая, как форматировать данные для обмена картами. Абстрактный стандарт, представленный картографическими типами данных, введенными в предыдущем разделе, преобразован в стандарт реализации, описанный на языке XML.
Использование языка XML дает ряд преимуществ. Прежде всего, XML - это платформенно-независимый язык, и основные языки программирования и операционные системы включают синтаксические анализаторы языка XML для интерпретации XML-документов. Кроме того, данные могут храниться в удобочитаемом для человека формате, что позволяет легко создавать картографические файлы.
Настоящий стандарт определяет XML-схему для валидации картографических файлов на основе XML, которыми обмениваются разные объекты, с целью обеспечения хорошей согласованности данных (пример представления картографических данных на языке XML приведен в приложении А). XML-схему следует использовать для автоматической проверки на отсутствие ошибок при обмене картами между роботами, компьютерами и другими устройствами.
XML-реализация настоящего стандарта расширяет типы данных, определенные в разделе 5, чтобы дополнить их значение применительно к данной реализации. С этой целью введены новые типы данных: MapArray, Metadata, GridCellArray, PaletteElementArray, GeometricElementArray, NodeArray, EdgeArray, PropertyArray и ConnectedEdgesArray, - как сложные типы данных языка XSD (языка определения XML-схемы), в которых элементы группы появляются в строго определенной последовательности.
XSD-тип данных LocalMap расширен для включения номера версии стандарта. Атрибут mdr_version хранит соответствующую минимальную версию стандарта MDR, в соответствии с которой может быть проведена валидация типа данных LocalMap. Кроме того, тип данных LocalMap расширен для хранения метаданных типа Metadata. Тип данных Metadata не относится к картографическим типам данных, определенным в предыдущем разделе, но является частью формата картографических данных, определяемого следующим образом.
<!-- =========================================================== -->
<xs:complexType name="LocalMap" abstract="true">
<xs:sequence>
<xs:element name="metadata" type="Metadata"/>
<xs:element name="offset" type="LocalMapTransform" minOccurs="0" maxOccurs="1"/>
<xs:element name="coordinate_system" type="CoordinateSystemType" minOccurs="0"
maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="map_type" type="LocalMapType" use="required"/>
<xs:attribute name="mdr_version" type="xs:string" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="LocalMapTransform">
<xs:sequence>
<xs:element name="uncertainty" minOccurs="0" maxOccurs="1" type="UncertaintyPose"/>
</xs:sequence>
<xs:attribute name="offset_x" type="xs:double" use="required"/>
<xs:attribute name="offset_y" type="xs:double" use="required"/>
<xs:attribute name="theta" type="xs:double" use="required"/>
</xs:complexType>
<!-- =========================================================== -->
<xs:simpleType name="LocalMapType">
<xs:restriction base="xs:integer">
<xs:enumeration value="1" /> <!-- The number '1' means "GridMap". -->
<xs:enumeration value="2" /> <!-- The number '2' means "GeometricMap". -->
<xs:enumeration value="3" /> <!-- The number '3' means "TopologicalMap". -->
</xs:restriction>
</xs:simpleType>
<!-- ============================================================ -->
<xs:complexType name="CoordinateSystemType">
<xs:attribute name="EPSG_code" type="xs:string" use="optional"/>
<xs:attribute name="reference_local_map" type="xs:string" use="optional"/>
</xs:complexType>
<!-- =========================================================== -->
<xs:complexType name="UncertaintyPose">
<xs:attribute name="covariance_xx" type="xs:double" use="required"/>
<xs:attribute name="covariance_yy" type="xs:double" use="required"/>
<xs:attribute name="covariance_thetatheta" type="xs:double" use="required"/>
<xs:attribute name="covariance_xy" type="xs:double" use="required"/>
<xs:attribute name="covariance_xtheta" type="xs:double" use="required"/>
<xs:attribute name="covariance_ytheta" type="xs:double" use="required"/>
</xs:complexType>
Тип данных MapArray относится к сложным типам данных языка XSD, в котором элементы группы появляются в строго определенной последовательности, и предназначен для хранения экземпляров типа данных LocalMap, включая типы данных GridMap, TopologicalMap и GeometricMap. Тип данных MapArray представляет набор данных типа LocalMap.
<!-- ============================================================ -->
<xs:complexType name="MapArray">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="grid_map" type="GridMap" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="geometric_map" type="GeometricMap" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="topological_map" type="TopologicalMap" maxOccurs="unbounded"
minOccurs="0"/>
</xs:choice>
</xs:complexType>
Тип данных MapArray определяет тип данных Metadata, который является типом данных языка XSD со строго определенной последовательностью появления элементов группы, для хранения различных видов метаинформации, специфичной для текущей карты (см. таблицу 18).
<!-- =========================================================== -->
<xs:complexType name="AuthorArray">
<xs:sequence>
<xs:element name="author" minOccurs="1" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!-- =========================================================== -->
<xs:complexType name="Metadata">
<xs:sequence>
<xs:element name="authors" type="AuthorArray">
<xs:annotation>
<xs:documentation>
The author of the created map, e.g., Jane Doe.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="email" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^@]+@[^\.]+\..+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="license" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>
The license under which the map is published, e.g., GNU GPL.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="copyright_owner" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>
The owner of the copyright, often an institution
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="description" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>
A verbal description of the map. For example the hardware used to
create the map or any other useful description.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="map_location" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>
A verbal description of the mapped location, e.g., 1st floor John
Doe Building
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="creation_date" type="xs:dateTime">
</xs:element>
<xs:element name="last_modified" type="xs:dateTime">
<xs:annotation>
<xs:documentation>
Last modified date to keep track of changes to the map.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
Таблица 18
Следующая XML-схема реализует класс GridMap наряду с типами данных GridCell и PaletteElement. Типы данных GridCellArray и PaletteElementArray со строго определенной последовательностью появления элементов группы введены для хранения элементов типов данных GridCell и PaletteElement, используемых в типе данных GridMap, соответственно.
<!-- ============================================================ -->
<xs:complexType name="GridMap">
<xs:complexContent>
<xs:extension base="LocalMap">
<xs:sequence>
<xs:element name="palette_elements" minOccurs="0" maxOccurs="1"
type="PaletteElementArray"/>
<xs:element name="cells" type="GridCellArray"/>
</xs:sequence>
<xs:attribute name="resolution" type="xs:double" use="required"/>
<xs:attribute name="num_cells_x" type="xs:unsignedInt" use="required"/>
<xs:attribute name="num_cells_y" type="xs:unsignedInt" use="required"/>
</xs:extension>
</xs:complexContent>
<!-- ============================================================ -->
<xs:complexType name="GridCell">
<xs:attribute name="x" type="xs:integer" use="required"/>
<xs:attribute name="y" type="xs:integer" use="required"/>
<xs:attribute name="height" type="xs:unsignedInt" use="optional" default="1"/>
<xs:attribute name="width" type="xs:unsignedInt" use="optional" default="1"/>
<xs:attribute name="value" type="xs:double" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="GridCellArray">
<xs:sequence>
<xs:element name="cell" minOccurs="1" maxOccurs="unbounded" type="GridCell"/>
</xs:sequence>
</xs:complexType>
<!-- =========================================================== -->
<xs:complexType name="PaletteElement">
<xs:attribute name="value_start" type="xs:double" use="required" />
<xs:attribute name="value_end" type="xs:double" use="optional" />
<xs:attribute name="meaning" type="xs:string" use="required" />
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="PaletteElementArray">
<xs:sequence>
<xs:element name="palette" minOccurs="0" maxOccurs="unbounded" type="PaletteElement"/>
</xs:sequence>
</xs:complexType>
Следующая XML-схема реализует класс GeometricMap наряду с типами данных Point, LineSegment, UncertaintyPoint и UncertaintyLineSegment. Введен тип данных GeometricElementArray со строго определенной последовательностью появления элементов группы для хранения элементов типов данных Point и LineSegment, используемых в типе данных GeometricMap.
<!--============================================================ -->
<xs:complexType name="GeometricMap">
<xs:complexContent>
<xs:extension base="LocalMap">
<xs:sequence>
<xs:element name="elements" type="GeometricElementArray"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
<!--============================================================ -->
<xs:complexType name="Point">
<xs:sequence>
<xs:element name="uncertainty" minOccurs="0" maxOccurs="1"
type="UncertaintyPoint"/>
</xs:sequence>
<xs:attribute name="x" type="xs:double" use="required"/>
<xs:attribute name="y" type="xs:double" use="required"/>
</xs:complexType>
<!--============================================================ -->
<xs:complexType name="LineSegment">
<xs:sequence>
<xs:element name="uncertainty" minOccurs="0" maxOccurs="1"
type="UncertaintyLineSegment"/>
</xs:sequence>
<xs:attribute name="rho" type="xs:double" use="required"/>
<xs:attribute name="alpha" type="xs:double" use="required"/>
<xs:attribute name="psi_a" type="xs:double" use="required"/>
<xs:attribute name="psi_b" type="xs:double" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="GeometricElementArray">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="point" type="Point"/>
<xs:element name="line_segment" type="LineSegment"/>
</xs:choice>
</xs:complexType>
<!--============================================================ -->
<xs:complexType name="UncertaintyPoint">
<xs:attribute name="covariance_xx" type="xs:double" use="required"/>
<xs:attribute name="covariance_xy" type="xs:double" use="required"/>
<xs:attribute name="covariance_yy" type="xs:double" use="required"/>
</xs:complexType>
<!--============================================================ -->
<xs:complexType name="UncertaintyLineSegment">
<xs:attribute name="covariance_rhorho" type="xs:double" use="required"/>
<xs:attribute name="covariance_rhoalpha" type="xs:double" use="required"/>
<xs:attribute name="covariance_rhopsi_a" type="xs:double" use="required"/>
<xs:attribute name="covariance_rhopsi_b" type="xs:double" use="required"/>
<xs:attribute name="covariance_alphaalpha" type="xs:double" use="required"/>
<xs:attribute name="covariance_alphapsi_a" type="xs:double" use="required"/>
<xs:attribute name="covariance_alphapsi_b" type="xs:double" use="required"/>
<xs:attribute name="covariance_psi_apsi_a" type="xs:double" use="required"/>
<xs:attribute name="covariance_psi_apsi_b" type="xs:double" use="required"/>
<xs:attribute name="covariance_psi_bpsi_b" type="xs:double" use="required"/>
</xs:complexType>
Следующая XML-схема реализует класс TopologicalMap наряду с типами данных Node, Edge и Property. Типы данных NodeArray, EdgeArray и PropertyArray со строго определенной последовательностью появления элементов группы введены для хранения элементов типов данных Node, Edge и Property, используемых в типе данных TopologicalMap, соответственно. Также введен новый тип данных ConnectedEdgesArray со строго определенной последовательностью появления элементов группы для хранения ID дуг, соединенных с узлом.
<!-- ============================================== -->
<xs:complexType name="TopologicalMap">
<xs:complexContent>
<xs:extension base="LocalMap">
<xs:sequence>
<xs:element name="nodes" type="NodeArray"/>
<xs:element name="edges" type="EdgeArray"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="Node">
<xs:sequence>
<xs:element name="location" type="Point" minOccurs="0" maxOccurs="1"/>
<xs:element name="properties" minOccurs="0" maxOccurs="1" type="PropertyArray"/>
<xs:element name="connected_edges" minOccurs="0" maxOccurs="1"
type="ConnectedEdgesArray"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="property_num" type="xs:unsignedInt" use="optional" />
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="NodeArray">
<xs:sequence>
<xs:element name="node" minOccurs="0" maxOccurs="unbounded" type="Node"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="Edge">
<xs:sequence>
<xs:element name="properties" minOccurs="0" maxOccurs="1" type="PropertyArray"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="property_num" type="xs:unsignedInt" use="optional" />
<xs:attribute name="head_node" type="xs:string" use="required"/>
<xs:attribute name="tail_node" type="xs:string" use="required"/>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="EdgeArray">
<xs:sequence>
<xs:element name="edge" minOccurs="0" maxOccurs="unbounded" type="Edge"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="Property">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="value" type="xs:base64Binary"/>
<xs:element name="typename" type="xs:string"/>
<xs:element name="description" minOccurs="0" maxOccurs="1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="PropertyArray">
<xs:sequence>
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="Property"/>
</xs:sequence>
</xs:complexType>
<!-- ============================================================ -->
<xs:complexType name="ConnectedEdgesArray">
<xs:sequence>
<xs:element name="edge_id" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
(справочное)
В данном приложении показан пример представления картографических данных на языке XML, описывающий небольшую комнату. Данный пример представлен в соответствии с XML-схемой, описанной в разделе 6. Предполагается, что размер комнаты составляет 2 x 2 м. В центре комнаты стоит Г-образный стол. Стол и стены комнаты моделируются с использованием типов данных GridCell и GeometricElement, которые скомпонованы из элементов Point и LineSegment. Кроме того, в данном примере использована топологическая карта. Отдельные узлы данной топологической карты являются маршрутными точками для навигации робота. На рисунке А.1 показано графическое представление пространственной структуры (т.е. карты), соответствующей приведенному ниже примеру на языке XML.
структуры (карты)
Пример для данного приложения был разработан с использованием XSD-редактора Eclipse для проверки и синтаксического анализа XML-документов и схем. В частности, данный пример был проверен в соответствии с XML-схемой стандарта MDR.
Примечание - Дополнительная информация о редакторе Eclipse размещена на сайте /template/go.php?url=https://www.eclipse.org.
<?xml version="1.0" encoding="UTF-
<mdr:maps xmlns:mdr="/template/go.php?url=https://www.example.org/mdr"
xmlns:xsi="/template/go.php?url=https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/template/go.php?url=https://www.example.org/mdr MDR_schema.xsd ">
<grid_map id="GridMap" maptype="1" num_cells_x="10" num_cells_y="10" Resolution="0.2">
<metadata>
<author>
Jane Doe
</author>
<email> jane@example.com
</email>
<license>
This map data is free document; you can redistribute and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
</license>
<copyright_owner>
MDR committee
</copyright_owner>
<description>
The size of a room is 2m x 2m. There is an L-shaped table at the center
of room. The table and walls of the room are modelled by GridCells and
GeometricElements, which are composed of Points and LineSegments, in the
XML sample. As additional information, the XML sample includes a
topological map. Individual nodes in the sample topological map represent
way points for robot navigations.
</description>
<map_location>
1st floor John Doe Building
</map_location>
<creation_date>
2014-07-01T21:10:50
</creation_date>
<last_modified>
2014-08-01T21:10:50
</last_modified>
</metadata>
<offset offset_x="0.0" offset_y="0.0" theta="0.0">
<uncertainty covariance_xx="0.0" covariance_yy="0.0" covariance_thetatheta="0.0"
covariance_xy="0.0" covariance_xtheta="0.0" covariance_ytheta="0.0"/>
</offset>
<coordinate_system />
<palette_elements>
<palette value_start="0" value_end="255" meaning="This value, 0...255,
is correspond to probability, 0.0...1.0."/>
</palette_elements>
<cells>
<!-- Wall Cells -->
<cell x="0" y="0" width="1" height="10" value="255"/>
<cell x="1" y="0" width="8" height="1" value="255"/>
<cell x="9" y="0" width="1" height="10" value="255"/>
<cell x="1" y="9" width="6" height="1" value="255"/>
<!--Table Cells -->
<cell x="3" y="3" width="2" height="4" value="255"/>
<cell x="5" y="3" width="2" height="2" value="255"/>
<!-- Free Space Cells -->
<cell x="1" y="1" width="2" height="8" value="0"/>
<cell x="3" y="1" width="4" height="2" value="0"/>
<cell x="7" y="1" width="2" height="4" value="0"/>
<cell x="3" y="7" width="2" height="2" value="0"/>
<cell x="5" y="5" width="4" height="4" value="0"/>
<cell x="7" y="9" width="2" height="1" value="0"/>
</cells>
</grid_map>
<geometric_map id="GeometricMap" maptype="2">
<offset offset_x="0.0" offset_y="0.0" theta="0.0">
<uncertainty covariance_xx="0.0" covariance_yy="0.0" covariance_thetatheta="0.0"
covariance_xy="0.0" covariance_xtheta="0.0" covariance_ytheta="0.0"/>
</offset>
<coordinate_system />
<elements>
<!-- Wall Corners -->
<point x="0.2" y="0.2">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="0.2" y="1.8">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.4" y="1.8">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.4" y="2.0">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.8" y="2.0">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.8" y="0.2">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<!-- Table Corners -->
<point x="0.6" y="0.6">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="0.6" y="1.4">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.0" y="1.4">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.0" y="1.0">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.4" y="1.0">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<point x="1.4" y="0.6">
<uncertainty covariance_xx="0.1" covariance_xy="0.0" covariance_yy="0.1"/>
</point>
<!-- Wall Edges -->
<line_segment rho="0.2" alpha="90.0" psi_a="0.2" psi_b="1.8">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="0.2" alpha="0.00" psi_a="0.2" psi_b="1.8">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="1.8" alpha="90.0" psi_a="0.2" psi_b="1.4">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a ="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a ="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b ="0.1"/>
</line_segment>
<line_segment rho="1.4" alpha="0.00" psi_a="1.8" psi_b="2.0">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a ="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a ="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b ="0.1"/>
</line_segment>
<line_segment rho="1.8" alpha="0.00" psi_a="0.2" psi_b="2.0">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a ="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a ="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b ="0.1"/>
</line_segment>
<!-- Table Edges -->
<line_segment rho="0.6" alpha="90.0" psi_a="0.6" psi_b="1.4">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="0.6" alpha="0.00" psi_a="0.6" psi_b="1.4">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="1.4" alpha="90.0" psi_a="0.6" psi_b="1.0">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="1.0" alpha="0.00" psi_a="1.0" psi_b="1.4">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="1.0" alpha="90.0" psi_a="1.0" psi_b="1.4">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
<line_segment rho="1.4" alpha="0.00" psi_a="0.6" psi_b="1.0">
<uncertainty
covariance_rhorho ="0.1" covariance_rhoalpha ="0.0"
covariance_rhopsi_a ="0.0" covariance_rhopsi_b ="0.0"
covariance_alphaalpha="0.1" covariance_alphapsi_a="0.0"
covariance_alphapsi_b="0.0" covariance_psi_apsi_a="0.1"
covariance_psi_apsi_b="0.0" covariance_psi_bpsi_b="0.1"/>
</line_segment>
</elements>
</geometric_map>
<topological_map id="Topological Map" maptype="3">
<offset offset_x="0.0" offset_y="0.0" theta="0.0">
<uncertainty
covariance_xx="0.0" covariance_yy="0.0" covariance_thetatheta="0.0"
covariance_xy="0.0" covariance_xtheta="0.0" covariance_ytheta="0.0"/>
</offset>
<coordinate_system />
<nodes>
<node id="node0" property_num="0"><location x="1.6" y="1.9"/></node>
<node id="node1" property_num="0"><location x="1.4" y="1.4"/></node>
<node id="node2" property_num="0"><location x="0.8" y="1.6"/></node>
<node id="node3" property_num="0"><location x="0.4" y="1.0"/></node>
<node id="node4" property_num="0"><location x="1.0" y="0.4"/></node>
<node id="node5" property_num="1">
<location x="1.6" y="0.6"/>
<properties>
<property>
<name>DistNearest</name>
<value>MC4x</value>
<typename>float</typename>
<description>Distance to the nearest obstacle</description>
</property>
</properties>
</node>
</nodes>
<edges>
<edge id="edge0" property_num="0" head_node="node0" tail_node="node1"></edge>
<edge id="edge1" property_num="0" head_node="node1" tail_node="node2"></edge>
<edge id="edge2" property_num="0" head_node="node2" tail_node="node3"></edge>
<edge id="edge3" property_num="0" head_node="node3" tail_node="node4"></edge>
<edge id="edge4" property_num="0" head_node="node4" tail_node="node5"></edge>
<edge id="edge5" property_num="2" head_node="node5" tail_node="node1"
<properties>
<property>
<name>EdgeLength</name>
<value>MC43MDcx</value>
<typename>float</typename>
<description>Edge length in meter unit</description>
</property>
<property>
<name>EdgeWidth</name>
<value>MC4z</value>
<typename>float</typename>
<description>
Minimum distance between the boundary wall of a long hall way
which is defined as an edge
</description>
</property>
<properties>
</edge>
</edges>
</topological_map>
</mdr:maps>
(справочное)
МЕЖДУНАРОДНЫМ СТАНДАРТАМ, ИСПОЛЬЗОВАННЫМ В КАЧЕСТВЕ
ССЫЛОЧНЫХ В ПРИМЕНЕННОМ СТАНДАРТЕ
Таблица ДА.1
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/19/gost_80996.html
На правах рекламы:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||