主要内容

变换

将消息实体转换为目标坐标框架

描述

例子

tfentity=变换(tftreetargetframe实体检索之间的最新转换targetframe坐标系实体并将其应用于实体,指定类型的ROS消息。的tftree是包含实体之间已知转换的完整转换树。如果从实体targetframe不存在,MATLAB®产生一个错误。

tfentity=变换(tftreetargetframe实体“msgtime”)在消息头部使用时间戳,实体,作为检索和应用转换的源时间。

tfentity=变换(tftreetargetframe实体sourcetime使用给定的源时间检索并将转换应用到消息,实体

例子

全部折叠

这个例子展示了如何建立一个ROS转换树并基于转换树信息进行帧的转换。它使用时间缓冲转换来在不同的时间访问转换。

创建ROS转换树。使用rosinit连接到ROS网络。取代ipaddress使用您的ROS网络地址。

ipaddress =“192.168.17.129”;rosinit (ipaddress, 11311)
使用NodeURI http://192.168.17.1:56312/初始化全局节点/matlab_global_node_14346
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
使用NodeURI http://192.168.17.1:56312/关闭全局节点/matlab_global_node_14346

这个示例演示了如何访问ROS网络上的时间缓冲转换。为特定时间访问转换并修改BufferTime根据您想要的时间属性。

创建ROS转换树。使用rosinit连接到ROS网络。取代ipaddress使用您的ROS网络地址。

ipaddress =“192.168.17.129”;rosinit (ipaddress, 11311)
使用NodeURI http://192.168.17.1:56344/初始化全局节点/matlab_global_node_78006
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
使用NodeURI http://192.168.17.1:56344/关闭全局节点/matlab_global_node_78006

输入参数

全部折叠

ROS转化树,指定为aTransformationTree对象句柄。可以通过调用rostf函数。

实体转换为的目标坐标框架,指定为字符串标量或字符向量。您可以查看用于转换调用的可用框架tftree。AvailableFrames

初始消息实体,指定为消息对象句柄。

金宝app支持消息:

  • geometry_msgs / PointStamped

  • geometry_msgs / PoseStamped

  • geometry_msgs / QuaternionStamped

  • geometry_msgs / Vector3Stamped

  • sensor_msgs / PointCloud2

ROS或系统时间,指定为标量或时间对象句柄。标量被转换成a时间对象使用rostime

输出参数

全部折叠

转换后的实体,作为消息对象句柄。

另请参阅

|

介绍了R2019b