ROS入门(三):如何使用服务

本文介绍了ROS中的服务(srv)使用,通过add_two_ints_client和add_two_ints_server两个节点,展示了如何创建和调用服务。ROS服务基于request-response模式,不同于异步的publish-subscribe消息通讯。文章详细解析了服务请求、响应的流程,并探讨了srv文件的结构。此外,还讨论了服务连接头(_connection_header)在服务通讯中的作用。
摘要由CSDN通过智能技术生成

上一节提到了如何自定义消息,这一节来看一下如何自定义服务。其实“自定义服务”这个说法有点奇怪,因为ROS是没有标准服务的,都需要用户进行开发。

首先回顾一下消息和服务的区别。
ROS作为一个分布式计算框架,各节点之间的通讯有点像我们平时上网。消息(msg)的收发类似于直播博主和订阅用户之间的关系,以主题(topic)来限定通讯的内容和格式,允许有多个直播博主推送内容,而用户只需要登记订阅信息即可接受主题中的内容。博主和用户之间通过roscore来连接,这里roscore就像youtube网站的服务器。此时信息的传输是单向的。当然,一个节点可以同时作为某个topic的发布者和订阅者。
主题topic采用异步的 publish-subscribe 通讯模式,使用TCP/IP或UDP传输,适用于多对多的场景。而服务srv属于同步的request-response通讯模式。类似于出租车的通讯系统,控制中心向全员广播的信息是topic,而如果直接派单给司机A,则需要呼叫司机A并要求A回复,此时用的是服务service。

注:基于TCP传输称为TCPROS,使用TCP/IP长连接,是ROS默认的传输方式; 基于UDP传输称为UDPROS,是一种低延迟高效率的传输方式,但可能丢失数据,适用于远程操控类任务。

接下来我们通过rospy_tutorials中005_add_two_ints示例学习如何使用srv。

这一示例涉及两个节点的py文件以及srv文件的正例与反例。
关于节点的惯用名称,消息中发布者一般称为talker/publisher, 订阅者称为listener/subscriber. 而服务中消息的两个节点分别称为client和server.client发出请求,而server作出响应。

add_two_ints_client

#!/usr/bin/env python
import sys
import os

import rospy

# imports the AddTwoInts service 
from rospy_tutorials.srv import *

## add two numbers using the add_two_ints service
## @param x int: first number to add
## @param y int: second number to add
def add_two_ints_client(x, y):

    # NOTE: you don't have to call rospy.init_node() to make calls against
    # a service. This is because service clients do not have to be
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值