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

时间: 2024-08-26 04:17:35

ROS Node/Topic/Message/Service的一些问题的相关文章

Java Message Service

The Java Message Service(JMS) API is a Java Message Oriented Middleware API for sending messages between two or moreclients . JMS is a part of the Java Platform , Enterprise Edition , and is defined by a specification developed under the Java Communi

Java Message Service学习(一)

一,背景 近期需要用到ActiveMQ接收Oozie执行作业之后的返回结果.Oozie作为消息的生产者,将消息发送给ActiveMQ,然后Client可以异步去ActiveMQ取消息. ActiveMQ作为基于 JMS 开源的Apache Message Provider,故记录下JMS相关基础知识. 二,基础知识&基本概念 1)面向消息的中间件 Message-oriented middleware (MOM) is best described as a category of softwa

GSM Sniffing入门之软件篇:GSMTAP抓取与SMS(Short Message Service)还原

重点介绍如何利用50元左右的设备,抓包并还原SMS短信内容: ps:研究GSM Sniffing纯属个人兴趣,能抓SMS报文只是捡了个明文传输的漏子,切勿用于非法用途.就像sylvain说的,osmocomBB并不是为抓包而实现的,如果没有足够的GSM相关知识,想实现还原语音通话内容根本就无从下手. ---------------------------------------------------------------------------------------------------

Deploying OpenFire for IM (instant message) service (TCP/IP service) with database MySQL , client Spark on linux部署OpenFire IM 消息中间件服务

Are you a hacker? How to build another QQ/Wechat/whatsapp/skype/imessage? Let's go through this!!!! Materials: A linux/unix/windows/mac computer/server, and do some basic things! Are you feeling high? Okay, let's ride the rocket! Get materials: 1. A

通俗深刻地认识JMS(即Java Message Service)

JMS很早就有,网上更是如此,但是大多总结的不太全面不太具体,在现有学习资源基础上结合自己的体悟,现重新总结一下: JMS全称为Java Message Service(即Java 消息服务),它是J2EE技术规范之一(它属于Java平台上有关面向消息中间件(MOM)的技术规范),用于访问消息系统(或向消息系统发送消息或向消息系统接收消息),最终实现不同应用系统之间的消息交互.呵呵呵,当你读到这里的时候恐怕会心里嘀咕--什么它妈的"消息系统"?我们知道通过同一套JDBC接口可以实现不同

ros之自定义message

ros之自定义message 在aruco_map功能包下自定义message aruco_map/msg/aruco_marker.msg std_msgs/Header header bool marker_visibile int32 num_of_visible_markers geometry_msgs/Pose global_camera_pose int32[] marker_ids geometry_msgs/Pose[] global_marker_poses CMakeLis

asp.net core 阿里云消息服务(Message Service,原MQS)发送接口的实现

最近在后台处理订单统计等相关功能用到了大力的mqs,由于官方没有实现asp.net core的sdk,这里简单实现了发送信息的功能,有兴趣的可以参考实现其他相关功能 using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;using System.Security.Cryptography;using System.Tex

17) JMS: java Message Service(Java消息服务)

? ? ?JMS是一个标准,就像EJB,有很多开源的,商业的实现,ms技术对应的规范是jsr914,规范的实现称为jms provider,常见的实现有ActiveMQ.JBoss MQ.IBM Websphere MQ等. ? ? ? ?其主要优点: (1)可以使2个系统或模块实现松耦合,模块A不需要直接调用模块B,只需要往jms provider上发送一条约定格式的消息,模块B收到这条消息,进行后续的业务处理 (2)jms方式是异步的,意味着模块A发送消息之后,不需要等待模块B或者jms p

ROS 命令以及相关内容学习(二)

在上一节中我们已经学习了package node topic message 这些的运行方式,下面我们去理解service 的运行方式. 1.sevice 1 #命令 2 rosservice list print information about active services 3 rosservice call call the service with the provided args 4 rosservice type print service type 5 rosservice