ros service 和topic 的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ros service 和topic 的区别相关的知识,希望对你有一定的参考价值。

区别是:
service指的是服役;服务,服侍;服务业;维修服务;检修,维修;向…提供服务。
topic 指的是主题;话题,论题;标题,细目。

例句辨析:
service
1、Britain still boasts the cheapest postal service.
英国仍拥有最便宜的邮政服务系统。
2、The kitchen maintains a twenty-four hour service and can be contacted via Reception.

厨房提供24小时餐饮服务,可通过前台进行联系。
3、Mining rose by 9.1%, manufacturing by 9.4% and services by 4.3%.

采矿业增长了9.1%,制造业增长了9.4%,服务业增长了4.3%。
4、Taking risks is the only way employees can provide effective and efficient customerservice.

员工能够为客户提供有价值、高效的服务的唯一途径就是敢于冒险。

topic
1、The weather is a constant topic of conversation in Britain.
在英国,天气是交谈中永恒的话题。
2、The main topic for discussion is political union.

讨论的主题是政治联合。
3、They offer tips on topics such as home safety.

他们就家居安全等问题提供建议。
4、I have discussed this topic in some detail.

我已经较为详细地探讨了这个话题。

topic
参考技术A ros中topic可以简单理解为一种类似udp的通信方式。发布topic的节点不考虑接受节点的情况。只是以设定好的频率在话题中发送数据。适合需要不断发送数据的情况
ros中service是一种请求响应机制。适合偶尔进行数据交互的情况。

ROS Node/Topic/Message/Service的一些问题

1.Node

http://blog.exbot.net/archives/1412 (摘自老王说ros)

node干的什么活?callback queue里的活。这个callback queue里的callback是哪里来的呢?常见的是subscriber的callback,当然还有其他的,包括publisher的,service的。那这些callback是什么时候被调用的呢。那就是spin()或者spinonce()。spin调用在queue 里所有的availiable的callback,如果没有availible的,它就阻塞。spinonce,显然只调用一次,看看有没有准备好的callback,有就调用,没有就返回。那什么是availible的、准备好的呢?对于subscribe,准备好的就是那些有新消息的subscriber的callback。现在如果你明白了上述node的运行机理。你在感到舒服之余,请准备接收心烦的问题。

1)第一个问题就是,如果subscriber没有收到新消息,那么它的callback就不会被执行。如果你想每次都运行callback呢?对不起,没办法,不是virgin我不娶。

2)第二个问题,callback执行有个timeout值,如果设置不合理,要么费时,要么callback被中止。被中止呀,兄弟们,多可怕,万一是一个重要逻辑的一环呢?今天就聊到这里,最后送点福利,如果你想实现事件触发的node就用spin;如果你要固定周期的node,那就用spinonce+sleep,但一定要牢记,在每个周期里不是所有callback被执行.

2. Topic 与 Service

http://blog.exbot.net/archives/1605 (摘自西工大一小学生 ROS 通讯层模型)

Topic:ros中广为使用的是异步的 publish-subscribe 通讯模式。这种方式将信息的产生和使用双方解耦。一般来说,节点没有通讯对方那边的信息。Node从需要的topic那取得消息,topic 可以有多个 subscriber 与publisher。Topic 一般用于单向,消息流通讯。Node 需要同步通讯交换信息时一般使用service。Topic 一般拥有很强的类型定义:一种类型的topic只能接受/发送特定数据类型(message type)的message。Publisher 没有被要求类型一致性,但是接受时subscriber会检查类型的md5,进而报错。

 Service: service 用于处理ros通讯中的同步通讯,采用server/client 语义。每个service type拥有 request 与 response两部分,对于service中的 server,ros不会检查重名(name conflict),只有最后注册的server会生效,与client建立连接。

3.Nodelet

http://wiki.ros.org/nodelet

This package provides both the nodelet base class needed for implementing a nodelet, as well as the NodeletLoader class used for instantiating nodelets

提供了turtlebot的一个控制led灯的例子

以及简单的教程

http://wiki.ros.org/nodelet/Tutorials

以上是关于ros service 和topic 的区别的主要内容,如果未能解决你的问题,请参考以下文章

[ROS] Chinese MOOC || Chapter-7.3 topic_demo 7.4 service_demo

[ROS] Chinese MOOC || Chapter-4.1 通信架构 - Service和srv

ROS入门之基础功能详解--编写消息和服务

ROS nodelet的使用

两台电脑使用ROS通讯

《ROS理论与实践》学习笔记ROS通信编程