rostf

Получайте, отправляйте и применяйте преобразования ROS

Описание

Вызов rostf функция создает ROS TransformationTree объект, который позволяет вам получить доступ к преобразованиям координат tf, которые являются общими в сети ROS. Можно получить преобразования и применить их к различным сущностям. Можно также отправлять преобразования и делиться ими с остальной сетью ROS.

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

tfTree.AvailableFrames

Используйте ros.TransformationTree синтаксис при соединении с определенным узлом ROS, в противном случае используйте rostf для создания дерева преобразования.

Примечание

В следующем релизе ROS Toolbox будет использовать структуры сообщений вместо объектов для сообщений ROS.

Чтобы использовать структуры сообщений, установите "DataFormat" аргумент имя-значение в "struct". Для получения дополнительной информации см. раздел Структуры сообщений ROS.

Создание

Описание

пример

tfTree = rostf создает ROS- TransformationTree объект.

tfTree = rostf("DataFormat","struct") использует структуры сообщений вместо объектов. Для получения дополнительной информации см. раздел Структуры сообщений ROS.

пример

trtree = ros.TransformationTree(node) создает указатель на объект преобразования ROS, к которому присоединено дерево преобразования. The node - узел, соединенный с сетью ROS, которая публикует преобразования.

tfTree = ros.TransformationTree(node,"DataFormat","struct") использует структуры сообщений вместо объектов. Для получения дополнительной информации см. раздел Структуры сообщений ROS.

Свойства

расширить все

Это свойство доступно только для чтения.

Список всех доступных систем координат, заданный как массив ячеек. Этот список доступных систем координат обновляется, если новые преобразования получены объектом дерева преобразований.

Пример: {'camera_center';'mounting_point';'robot_base'}

Типы данных: cell

Это свойство доступно только для чтения.

Время, когда было получено последнее преобразование, заданное как ROS Time объект.

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

Формат сообщения, заданный как "object" или "struct". Вы должны задать это свойство при создании с помощью входов name-value. Для получения дополнительной информации см. раздел Структуры сообщений ROS.

Функции объекта

waitForTransformПодождите, пока не станет доступно преобразование
getTransformНайдите преобразование между двумя системами координат
transformПреобразуйте сущности сообщения в целевую систему координат
sendTransformОтправка преобразования в сеть ROS

Примеры

свернуть все

Подключитесь к сети ROS и создайте дерево преобразования.

Подключение к сети ROS. Создайте узел. Используйте пример helper для публикации данных преобразования.

rosinit
Launching ROS Core...
....Done in 4.8406 seconds.
Initializing ROS master on http://192.168.203.1:51922.
Initializing global node /matlab_global_node_24999 with NodeURI http://ah-sradford:49220/
node = ros.Node('/testTf');
Using Master URI http://localhost:51922 from the global node to connect to the ROS master.
exampleHelperROSStartTfPublisher

Создайте дерево преобразования. Используйте структуры в качестве формата данных сообщений ROS. Используйте AvailableFrames свойство для просмотра доступных систем координат преобразования. Эти преобразования были определены отдельно перед соединением с сетью.

tree = rostf('DataFormat','struct');
pause(1);
tree.AvailableFrames
ans = 3×1 cell
    {'camera_center' }
    {'mounting_point'}
    {'robot_base'    }

Отсоединитесь от сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_24999 with NodeURI http://ah-sradford:49220/
Shutting down ROS master on http://192.168.203.1:51922.

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

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

rosinit
Launching ROS Core...
....Done in 4.3645 seconds.
Initializing ROS master on http://192.168.203.1:60075.
Initializing global node /matlab_global_node_31713 with NodeURI http://ah-sradford:54281/
node = ros.Node('/testTf');
Using Master URI http://localhost:60075 from the global node to connect to the ROS master.
exampleHelperROSStartTfPublisher

Извлечение TransformationTree объект. Пауза, чтобы дождаться tftree для обновления.

tftree = ros.TransformationTree(node,'DataFormat','struct');
pause(1)

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

frames = tftree.AvailableFrames
frames = 3×1 cell
    {'camera_center' }
    {'mounting_point'}
    {'robot_base'    }

updateTime = tftree.LastUpdateTime
updateTime = struct with fields:
     Sec: 1606858118
    Nsec: 439378100

Ждите преобразования между двумя системами координат, 'camera_center' и 'robot_base'. Это будет ждать, пока преобразование не будет допустимым, и блокировать все другие операции. Также дается время из 5 секунд.

waitForTransform(tftree,'robot_base','camera_center',5)

Определите точку в координатной системе координат камеры

pt = rosmessage('geometry_msgs/PointStamped','DataFormat','struct');
pt.Header.FrameId = 'camera_center';
pt.Point.X = 3;
pt.Point.Y = 1.5;
pt.Point.Z = 0.2;

Преобразуйте точку в 'base_link' система координат.

tfpt = transform(tftree, 'robot_base', pt)
tfpt = struct with fields:
    MessageType: 'geometry_msgs/PointStamped'
         Header: [1×1 struct]
          Point: [1×1 struct]

Отображение преобразованных координат точки.

tfpt.Point
ans = struct with fields:
    MessageType: 'geometry_msgs/Point'
              X: 1.2000
              Y: 1.5000
              Z: -2.5000

Очистить узел ROS. Завершите работу хозяина ROS.

clear('node')
rosshutdown
Shutting down global node /matlab_global_node_31713 with NodeURI http://ah-sradford:54281/
Shutting down ROS master on http://192.168.203.1:60075.

Вопросы совместимости

расширить все

Изменение поведения в будущем релизе

Введенный в R2019b