getTransform

检索两个坐标框架之间转换

描述

TF= getTransform(tftreetargetframesourceframe返回两个之间最新的已知坐标变换帧tftree。创建tftree使用对象rostf,这需要给ROS网络的连接。

变换被构造作为3 d翻译(三元素向量)和3-d的旋转(四元数)。

TF= getTransform(tftreetargetframesourceframesourcetime返回从改造tftree在给定源的时间。如果转换不可在那个时候,会显示一个错误。

TF= getTransform(___,“超时”,超时还指定超时时间,以秒,等待改造为可供。如果转型不成为超时时间可用,该函数返回一个错误。此选项可以与以前的语法相结合。

TF= getTransform(bagSeltargetframesourceframe返回两帧之间的最新改造的rosbag在bagSel。为了得到bagSel输入,使用加载rosbagrosbag

TF= getTransform(bagSeltargetframesourceframesourcetime返回改造在指定sourcetime在rosbag在bagSel

例子

全部收缩

这个例子显示了如何建立一个ROS改造树和改造基础上改造树信息帧。它使用时间缓冲的转换在不同时间访问转换。

创建ROS改造树。用rosinit连接到网络的ROS。更换IP地址与ROS的网络地址。

IPADDRESS ='192.168.17.129';rosinit(IPADDRESS,11311)
初始化的全球节点/ matlab_global_node_14346与NodeURI http://192.168.17.1:56312/
tftree = rostf;暂停(1)

只看改造树可用的框架。

tftree.AvailableFrames
ANS =36×1细胞{ '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'} { '奥多姆'} { '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 =合乎逻辑1

从现在获得3秒的转变。该getTransform功能会等到改造成为可与指定的超时。

desiredTime = rostime('现在')+ 3;TForm的= getTransform(tftree,'base_link''camera_link'...desiredTime,'超时',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 =变换(tftree,'base_link',PT,desiredTime);

可选的:您还可以使用应用与存储TForm的这种转换应用于PT信息。

tfpt2 =申请(TForm的,PT);

关闭ROS网络。

rosshutdown
关闭全球节点/ matlab_global_node_14346与NodeURI http://192.168.17.1:56312/

这个例子显示了如何把ROS访问网络上的时间缓冲转换。访问转换为特定的时间和修改的bufferTime物业基于您的期望时间。

创建ROS改造树。用rosinit连接到网络的ROS。更换IP地址与ROS的网络地址。

IPADDRESS ='192.168.17.129';rosinit(IPADDRESS,11311)
初始化的全球节点/ matlab_global_node_78006与NodeURI http://192.168.17.1:56344/
tftree = rostf;暂停(2);

获得1秒前的转变。

desiredTime = rostime('现在') -  1;TForm的= getTransform(tftree,'base_link''camera_link',desiredTime);

变换缓冲器时间为10秒默认。修改的bufferTime改造树的属性,以增加缓冲时间,等待缓冲区填充。

tftree.BufferTime = 15;暂停(15);

12秒前获得的转变。

desiredTime = rostime('现在') -  12;TForm的= getTransform(tftree,'base_link''camera_link',desiredTime);

您也可以在未来一段时间得到转变。该getTransform功能会等到改造可用。您还可以指定一个超时错误,如果不转型中找到。本实施例中等待5秒,在3秒变换从现在是可用的。

desiredTime = rostime('现在')+ 3;TForm的= getTransform(tftree,'base_link''camera_link',desiredTime,'超时',5);

关闭ROS网络。

rosshutdown
关闭全球节点/ matlab_global_node_78006与NodeURI http://192.168.17.1:56344/

获得从rosbag变换(。袋)通过加载rosbag并检查可用的框架文件。从这些帧,使用getTransform查询两个坐标帧之间的转换。

加载rosbag。

袋= rosbag('ros_turtlesim.bag');

获取可用的帧的列表。

帧= bag.AvailableFrames;

获取两个坐标帧之间的最新改造。

TF = getTransform(袋,'世界',帧{1});

检查在特定时间可用的变换和检索的转变。用canTransform检查转变为可用。使用指定时间rostime

tfTime = rostime(bag.StartTime + 1);如果(canTransform(袋,'世界',帧{1},tfTime))TF2 = getTransform(袋,'世界',帧{1},tfTime);结束

输入参数

全部收缩

ROS改造树,指定为TransformationTree对象的句柄。您可以通过调用创建变换树rostf功能。

rosbag消息的选择,指定为BagSelection对象的句柄。要创建一个选择rosbag消息,使用rosbag

目标坐标系,指定为字符串标量或特征向量。你可以通过调用查看改造现有框架tftree.AvailableFrames

初始坐标系,指定为字符串标量或特征向量。你可以通过调用查看改造现有框架tftree.AvailableFrames

ROS或系统时间,指定为时间对象的句柄。默认情况下,sourcetime是ROS模拟时间上发表时钟话题。如果use_sim_timeROS参数设置为真正sourcetime返回系统时间。您可以创建一个时间使用对象rostime

超时接收变换,指定为以秒为一个标量。该函数返回如果达到了超时错误,并且没有变换变为可用。

输出参数

全部收缩

坐标帧之间变换,返回为TransformStamped对象的句柄。变换被构造作为3 d翻译(三元素向量)和3-d的旋转(四元数)。

兼容性注意事项

展开全部

在未来的版本中行为改变

介绍了在R2019b