transform

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

Описание

пример

tfentity = transform(tftree,targetframe,entity) извлекает последнее преобразование между targetframe и координатную систему координат entity и применяет его к entity, сообщение ROS определенного типа. The 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
    {'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 секунды с этого момента. The 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);

Вы также можете получить преобразования за раз в будущем. The 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
Для просмотра документации необходимо авторизоваться на сайте