rostf

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

Описание

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

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

tfTree.AvailableFrames

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

Примечание

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

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

Создание

Описание

пример

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

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

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

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

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

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

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

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

Примеры

свернуть все

Соединитесь с сетью ROS и создайте дерево преобразования.

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

rosinit
Launching ROS Core...
Done in 0.71605 seconds.
Initializing ROS master on http://192.168.0.10:57260.
Initializing global node /matlab_global_node_73746 with NodeURI http://bat6312glnxa64:36207/
node = ros.Node('/testTf');
Using Master URI http://localhost:57260 from the global node to connect to the ROS master.
exampleHelperROSStartTfPublisher

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

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

Отключитесь от сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_73746 with NodeURI http://bat6312glnxa64:36207/
Shutting down ROS master on http://192.168.0.10:57260.

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

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

rosinit
Launching ROS Core...
Done in 0.76448 seconds.
Initializing ROS master on http://192.168.0.10:51935.
Initializing global node /matlab_global_node_28430 with NodeURI http://bat6312glnxa64:46597/
node = ros.Node('/testTf');
Using Master URI http://localhost:51935 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 = 3x1 cell
    {'camera_center' }
    {'mounting_point'}
    {'robot_base'    }

updateTime = tftree.LastUpdateTime
updateTime = struct with fields:
     Sec: 1629898136
    Nsec: 891734206

Ожидайте преобразования между двумя системами, '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: [1x1 struct]
          Point: [1x1 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_28430 with NodeURI http://bat6312glnxa64:46597/
Shutting down ROS master on http://192.168.0.10:51935.

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

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

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

Введенный в R2019b