вторник, 26 июня 2018 г.

YAML. Формат представления данных

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

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

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

# словарь - строка
position: {x: 10, y: 20, z: 30}
# блок
position:
    x: 10
    y: 20
    z: 30

# список - строка
[link0, joint1, link1]
# блок
- link0
- joint1
- link1

В некоторых случаях не ясно, каким типом является параметр, например, true или y могут быть как логическими значениями истины, так и просто строками. В этом случае язык допускает явное "привидение типа" с помощью конструкции !!тип. Например

default: '!!str true'

будет означать, что типом данных параметра default является строка.

В ROS данный формат используется как в виде yaml-файлов, так и для управления параметрами из командной строки. Если параметр состоит из нескольких значений, например, 

Point point
  float64 x
  float64 y
  float64 z

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

[10, 20, 30]    # x, y, z

а словарь допускает использовать произвольный порядок

{z: 30, x: 10, y: 20}

Вот ещё несколько ссылок по теме: wiki, overview, rosparam, command line.    

Комментариев нет:

Отправить комментарий