主要内容

rossubscriber

订阅主题的消息

描述

使用rossubscriber创建一个活性氧ROS网络用户接收消息。发送消息,使用rospublisher。等待一个新的ROS消息,使用收到函数创建用户。

订阅者创建的对象rossubscriber函数代表一个订户ROS网络。的订阅者可用对象订阅一个主题或一个主题,它创造了。这个话题都有一个关联的消息类型。出版商可以通过网络发送消息订阅者接收对象。

请注意

在未来的版本中,ROS工具箱将使用的消息结构,而不是对象ROS的消息。

现在使用的消息结构,设置“DataFormat”名称-值参数“结构”。有关更多信息,请参见ROS消息结构

您可以创建一个订阅者通过使用对象rossubscriber函数,或通过调用ros.Subscriber:

  • rossubscriber只能与全球节点使用rosinit。它不需要节点对象句柄作为参数。

  • ros.Subscriber创建额外的节点使用工作ros.Node。它需要一个节点对象处理作为第一个参数。

创建

描述

例子

= rossubscriber (topicname)订阅一个主题的TopicName,主题必须已经存在的ROS掌握主题建立一个消息类型列表。当ROS节点发布消息主题,MATLAB®通过这个用户接收这些消息。

= rossubscriber (topicname,msgtype)订阅一个主题,有指定的名称,TopicName和类型,MessageType。如果主题列表中ROS主人不包括主题指定的名称和类型,将其添加到主题列表。使用这个语法时避免错误之前订阅一个主题发布者添加了ROS的主题的主题列表的主人。

例子

= rossubscriber (topicname,回调)指定一个回调函数,回调当用户运行对象处理接收到一个主题消息。使用这种语法来避免阻塞接收功能。的回调函数可以是一个函数处理或单元阵列。细胞数组的第一个元素必须是一个函数处理或一个字符串包含一个函数的名称。其余单元阵列的元素可以任意用户的数据传递给回调函数。

= rossubscriber (topicname,msgtype,回调)指定一个回调函数和订阅一个主题指定的名称,TopicName和类型,MessageType

= rossubscriber (___、名称、值)指定的一个或多个提供额外的选项名称,值双参数使用任何参数从以前的语法。的名字属性名和吗价值相应的价值。

= rossubscriber (___“DataFormat”,“结构”)使用的消息结构,而不是对象。有关更多信息,请参见ROS消息结构

子= ros.Subscriber (节点,topicname)订阅一个主题名称,TopicName。的节点ros.Node对象句柄,这个出版商高度。

例子

子= ros.Subscriber (节点,topicname,msgtype)指定消息类型,MessageType的话题。如果存在名称相同的主题,不同的消息类型,MATLAB具有给定消息类型创建一个新的主题。

子= ros.Subscriber (节点,topicname,回调)指定一个回调函数,和可选的数据,当用户对象接收到一个主题的信息。看到NewMessageFcn关于回调函数的更多信息。

子= ros.Subscriber (节点,topicname,类型,回调)指定主题名称、消息类型和用户的回调函数。

子= ros.Subscriber (___“BufferSize”,价值)指定队列大小BufferSize对传入的消息。您可以使用这种语法之前输入的任意组合。

= ros.Subscriber (___“DataFormat”,“结构”)使用的消息结构,而不是对象。有关更多信息,请参见ROS消息结构

属性

全部展开

这个属性是只读的。

订阅主题的名称,指定为一个字符串标量或特征向量。如果主题不存在,对象创建主题使用相关的消息类型。

例子:“/喋喋不休”

数据类型:字符|字符串

这个属性是只读的。

订阅消息的消息类型,指定为字符串标量或特征向量。这消息类型仍然与这个话题有关。

例子:“std_msgs /字符串”

数据类型:字符|字符串

最新的消息发送到主题,指定为一个消息对象。的消息对象是特定于给定的MessageType。如果用户没有收到一条消息,那么消息对象是空的。

传入消息队列的缓冲区大小,指定为逗号分隔组成的“BufferSize”和一个标量。如果消息到达的速度比你的回调函数可以处理它们,它们是删除一旦传入队列已满。

回调属性,指定为一个函数处理或单元阵列。在细胞数组的第一个元素中,指定一个函数处理或一个字符串代表一个函数名。在随后的元素,指定用户数据。

订阅者回调函数至少需要两个输入参数。第一个参数,src是用户对象关联。第二个参数,味精接收到的消息对象。回调函数的头文件是:

函数subCallback (src、味精)

指定NewMessageFcn属性:

sub.NewMessageFcn = @subCallback;

设置回调时,您将额外的参数传递给回调函数,包括回调函数和参数作为单元阵列的元素。回调函数的头文件是:

函数subCallback (src、味精、用户数据)

指定NewMessageFcn属性:

sub.NewMessageFcn = {@subCallback userData};

消息格式,指定为“对象”“结构”。必须设置这个属性在创建使用名称-值输入。有关更多信息,请参见ROS消息结构

对象的功能

收到 等待新的ROS消息
rosmessage 创建ROS消息

例子

全部折叠

连接到一个ROS网络。建立一个示例ROS网络。的“/扫描”主题是发表在网络上。

rosinit
启动ROS核心……在0.6836秒内完成。初始化ROS主在http://172.29.219.144:49913上。初始化全局节点/ matlab_global_node_85550 NodeURI http://dcc273459glnxa64:37641和http://localhost MasterURI: 49913。
exampleHelperROSCreateSampleNetwork

创建一个用户“/扫描”主题使用消息的结构。等待用户注册的主人。

子= rossubscriber (“/扫描”,“DataFormat”,“结构”);暂停(1);

接收数据的用户作为ROS消息结构。指定一个10秒的超时。

[msg2、状态、statustext] =接收(子,10)
msg2 =结构体字段:MessageType:“sensor_msgs /提升”标题:[1 x1 struct] AngleMin: -0.5467 AngleMax: 0.5467 AngleIncrement: 0.0017 TimeIncrement: 0 ScanTime: 0.0330 RangeMin: 0.4500 RangeMax: 10范围:[640 x1单]强度:[]
状态=逻辑1
statustext = '成功'

关闭定时器样品所使用的网络。

exampleHelperROSShutDownSampleNetwork

ROS关闭网络。

rosshutdown
关闭全局节点/ matlab_global_node_85550 NodeURI http://dcc273459glnxa64:37641和http://localhost MasterURI: 49913。在http://172.29.219.144:49913上关闭ROS的主人。

你可以触发回调函数,当用户接收消息。指定回调或使用当您创建它NewMessageFcn财产。

连接到一个ROS网络。

rosinit
启动ROS核心……在0.53886秒内完成。初始化ROS主在http://172.29.219.144:53541上。初始化全局节点/ matlab_global_node_47107 NodeURI http://dcc273459glnxa64:37195和http://localhost MasterURI: 53541。

设置一个发布者发布的消息' /聊天'的话题。这个话题是用来触发用户的回调。指定数据消息的属性。等待1秒钟允许出版商注册网络。

酒吧= rospublisher (' /聊天',“std_msgs /字符串”,“DataFormat”,“结构”);味精= rosmessage(酒吧);味精。数据=“hello world”;暂停(1)

建立一个用户指定的回调函数。的exampleHelperROSChatterCallback功能显示数据在收到的消息。

子= rossubscriber (' /聊天'@exampleHelperROSChatterCallback,“DataFormat”,“结构”);暂停(1)

通过出版商发送消息。订阅者应执行回调显示新消息。等待消息被接收。

发送(酒吧,味精);暂停(1)
ans =“hello world”

ROS关闭网络。

rosshutdown
关闭全局节点/ matlab_global_node_47107 NodeURI http://dcc273459glnxa64:37195和http://localhost MasterURI: 53541。在http://172.29.219.144:53541上关闭ROS的主人。

使用一个活性氧订阅者ROS网络对象来接收消息。

ROS的核心和节点开始。

主= ros.Core;
启动ROS核心……在0.9853秒内完成。
节点= ros.Node (/测试的);

创建发布者和订阅者ROS网络发送和接收消息。使用ROS消息结构。

酒吧= ros.Publisher(节点,' /聊天',“std_msgs /字符串”,“DataFormat”,“结构”);子= ros.Subscriber(节点,' /聊天',“std_msgs /字符串”,“DataFormat”,“结构”);

通过网络发送消息。

味精= rosmessage(酒吧);味精。数据=“hello world”;发送(酒吧、味精)

查看消息数据使用LatestMessage财产的订阅者对象。

暂停(1)sub.LatestMessage
ans =结构体字段:MessageType: std_msgs /字符串的数据:“hello world”

清晰的出版商,订户,ROS节点。关闭了ROS的主人。

清楚(“酒吧”,“子”,“节点”)明确(“大师”)

扩展功能

版本历史

介绍了R2019b

全部展开

在未来的发布行为改变