ROS 服务端客户端机制~

在ROS中,服务-客户机制通常涉及两个节点:一个是服务节点(服务提供方),另一个是客户端节点(服务请求方)。下面是一个简单的例子,其中服务用于将两个整数相加,并返回结果。

1. 定义服务类型(.srv文件)

首先,我们需要定义服务的类型。假设我们有一个名为AddTwoInts.srv的文件,内容如下:

int64 a

int64 b 

……

int64 sum

这表示服务接收两个int64类型的整数ab作为输入,并返回一个int64类型的整数sum作为输出。

2. 创建服务节点(服务端)

在Python中,服务节点可能如下所示:

#!/usr/bin/env python  
import rospy  
from your_package.srv import AddTwoInts, AddTwoIntsResponse  
  
def add_two_ints_server(req):  
    print("Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b)))  
    return AddTwoIntsResponse(req.a + req.b)  
  
def server():  
    rospy.init_node('add_two_ints_server')  
    s = rospy.Service('add_two_ints', AddTwoInts, add_two_ints_server)  
    print("Ready to add two ints.")  
    rospy.spin()  
  
if __name__ == "__main__":  
    server()

3. 创建客户端节点(客户端)

同样,在Python中,客户端节点可能如下所示:

#!/usr/bin/env python  
import rospy  
from your_package.srv import AddTwoInts, AddTwoIntsResponse  
  
def add_two_ints_client(x, y):  
    rospy.wait_for_service('add_two_ints')  
    try:  
        add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)  
        resp1 = add_two_ints(x, y)  
        return resp1.sum  
    except rospy.ServiceException as e:  
        print("Service call failed: %s"%e)  
  
def client():  
    rospy.init_node('add_two_ints_client')  
    num1 = 124  
    num2 = 45  
    print("Requesting %s+%s"%(num1, num2))  
    print("Got %s"%add_two_ints_client(num1, num2))  
  
if __name__ == "__main__":  
    client()

4. 使用示例

# 启动ROS核心(如果还没有运行):
roscore

# 运行服务节点(确保你的工作空间已经构建):
rosrun your_package add_two_ints_server.py

# 运行客户端节点(在另一个终端窗口中):
rosrun your_package add_two_ints_client.py

你应该能在客户端节点的输出中看到类似Requesting 124+45Got 169这样的信息,这表示服务已经成功执行并返回了结果。

请注意,你需要将your_package替换为你的ROS包的实际名称,并确保.srv文件已经被正确地放置在包的srv目录中,并且你的工作空间已经被构建(通过catkin_makecolcon build)。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值