transform

Преобразуйте сущности сообщения в целевую координатную систему координат

Описание

пример

tfentity = transform(tftree,targetframe,entity) получает последнее преобразование между targetframe и координатная система координат entity и применяет его к entity, сообщение ROS определенного типа. tftree полное дерево преобразования, содержащее известные преобразования между сущностями. Если преобразование от entity к targetframe не существует, MATLAB® производит ошибку.

tfentity = transform(tftree,targetframe,entity,"msgtime") использует метку времени в заголовке сообщения, entity, как исходное время, чтобы получить и применить преобразование.

tfentity = transform(tftree,targetframe,entity,sourcetime) использует данное исходное время, чтобы получить и применить преобразование к сообщению, entity.

Примеры

свернуть все

В этом примере показано, как настроить дерево преобразования ROS и преобразовать системы координат на основе информации о дереве преобразования. Это использует преобразования с буфером времени, чтобы получить доступ к преобразованиям в разное время.

Создайте дерево преобразования ROS. Используйте rosinit соединяться с сетью ROS. Замените ipaddress с вашим адресом сети ROS.

ipaddress = '192.168.17.129';
rosinit(ipaddress,11311)
Initializing global node /matlab_global_node_14346 with NodeURI http://192.168.17.1:56312/
tftree = rostf;
pause(1)

Посмотрите на доступные системы координат на дереве преобразования.

tftree.AvailableFrames
ans = 36×1 cell array
    {'base_footprint'            }
    {'base_link'                 }
    {'camera_depth_frame'        }
    {'camera_depth_optical_frame'}
    {'camera_link'               }
    {'camera_rgb_frame'          }
    {'camera_rgb_optical_frame'  }
    {'caster_back_link'          }
    {'caster_front_link'         }
    {'cliff_sensor_front_link'   }
    {'cliff_sensor_left_link'    }
    {'cliff_sensor_right_link'   }
    {'gyro_link'                 }
    {'mount_asus_xtion_pro_link' }
    {'odom'                      }
    {'plate_bottom_link'         }
    {'plate_middle_link'         }
    {'plate_top_link'            }
    {'pole_bottom_0_link'        }
    {'pole_bottom_1_link'        }
    {'pole_bottom_2_link'        }
    {'pole_bottom_3_link'        }
    {'pole_bottom_4_link'        }
    {'pole_bottom_5_link'        }
    {'pole_kinect_0_link'        }
    {'pole_kinect_1_link'        }
    {'pole_middle_0_link'        }
    {'pole_middle_1_link'        }
    {'pole_middle_2_link'        }
    {'pole_middle_3_link'        }
      ⋮

Проверяйте, доступно ли желаемое преобразование теперь. В данном примере проверяйте на преобразование от 'camera_link' к 'base_link'.

canTransform(tftree,'base_link','camera_link')
ans = logical
   1

Получите преобразование в течение 3 секунд с этого времени. getTransform функция будет ожидать, пока преобразование не становится доступным с заданным тайм-аутом.

desiredTime = rostime('now') + 3;
tform = getTransform(tftree,'base_link','camera_link',...
                     desiredTime,'Timeout',5);

Создайте сообщение ROS, чтобы преобразовать. Сообщения могут также быть получены от сети ROS.

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

Преобразуйте сообщение ROS к 'base_link' система координат с помощью желаемого времени, ранее сохраненного.

tfpt = transform(tftree,'base_link',pt,desiredTime);

Дополнительный: можно также использовать apply с сохраненным tform применять это преобразование к pt сообщение.

tfpt2 = apply(tform,pt);

Закройте сеть ROS.

rosshutdown
Shutting down global node /matlab_global_node_14346 with NodeURI http://192.168.17.1:56312/

В этом примере показано, как к преобразованиям с буфером времени доступа в сети ROS. Доступ к преобразованиям в течение определенных времен и изменяет BufferTime свойство на основе ваших желаемых времен.

Создайте дерево преобразования ROS. Используйте rosinit соединяться с сетью ROS. Замените ipaddress с вашим адресом сети ROS.

ipaddress = '192.168.17.129';
rosinit(ipaddress,11311)
Initializing global node /matlab_global_node_78006 with NodeURI http://192.168.17.1:56344/
tftree = rostf;
pause(2);

Получите преобразование от 1 секунду назад.

desiredTime = rostime('now') - 1;
tform = getTransform(tftree,'base_link','camera_link',desiredTime);

Буферное время преобразования составляет 10 секунд по умолчанию. Измените BufferTime свойство дерева преобразования увеличить буферное время и ожидать того буфера, чтобы заполнить.

tftree.BufferTime = 15;
pause(15);

Получите преобразование от 12 секунд назад.

desiredTime = rostime('now') - 12;
tform = getTransform(tftree,'base_link','camera_link',desiredTime);

Можно также получить преобразования за один раз в будущем. getTransform функция будет ожидать, пока преобразование не доступно. Можно также задать тайм-аут к ошибке, если никакое преобразование не найдено. Этот пример ожидает 5 секунд преобразования в 3 секунды с этого времени, чтобы быть доступным.

desiredTime = rostime('now') + 3;
tform = getTransform(tftree,'base_link','camera_link',desiredTime,'Timeout',5);

Закройте сеть ROS.

rosshutdown
Shutting down global node /matlab_global_node_78006 with NodeURI http://192.168.17.1:56344/

Входные параметры

свернуть все

Дерево преобразования ROS, заданное как TransformationTree указатель на объект. Можно создать дерево преобразования путем вызова rostf функция.

Целевая координатная система координат, которую сущность преобразовывает в, заданный как скаляр строки или вектор символов. Можно просмотреть доступные системы координат для преобразования, вызвав tftree.AvailableFrames.

Начальная сущность сообщения, заданная как Message указатель на объект.

Поддерживаемые сообщения:

  • geometry_msgs/PointStamped

  • geometry_msgs/PoseStamped

  • geometry_msgs/QuaternionStamped

  • geometry_msgs/Vector3Stamped

  • sensor_msgs/PointCloud2

ROS или системное время, заданное как скаляр или Time указатель на объект. Скаляр преобразован в Time объект с помощью rostime.

Выходные аргументы

свернуть все

Преобразованная сущность, возвращенная как Message указатель на объект.

Смотрите также

|

Введенный в R2019b