exponenta event banner

rostf

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

Описание

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

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

tfTree.AvailableFrames

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

Примечание

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

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

Создание

Описание

пример

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

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

пример

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

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

Свойства

развернуть все

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

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

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

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

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

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

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

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

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

waitForTransformДождитесь доступности преобразования
getTransformИзвлечение преобразования между двумя координатными кадрами
transformПреобразование объектов сообщения в целевой кадр координат
sendTransformПередача преобразования в сеть ROS

Примеры

свернуть все

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

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

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'    }

Отключитесь от сети АФК.

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