【服务通信自定义srv调用2】

本文档介绍了如何在ROS环境下,通过修改cmakefiles文件并创建新的客户端demo02_client.cpp来实现服务通信。步骤包括配置编译文件,使用Ctrl+Shift+B编译,通过Ctrl+Alt+T打开终端运行roscore启动ROS,然后在新终端中运行客户端,确保话题名称与服务端匹配以避免请求处理失败。
摘要由CSDN通过智能技术生成

在plumbing_server_client下面的src下面创建一个新的demo02_client.cpp
在这里插入图片描述
输入下面代码:

/*
    需求: 
        编写两个节点实现服务通信,客户端节点需要提交两个整数到服务器
        服务器需要解析客户端提交的数据,相加后,将结果响应回客户端,
        客户端再解析
 
    服务器实现:
        1.包含头文件
        2.初始化 ROS 节点
        3.创建 ROS 句柄
        4.创建 客户端 对象
        5.请求服务,接收响应
 
*/
// 1.包含头文件
#include "ros/ros.h"
#include "plumbing_server_client/AddInts.h"
int main(int argc, char *argv[]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ROS中,srv是一种服务类型,用于在节点之间进行通信。在本教程中,我们将学习如何创建自己的srv文件,以及如何在ROS节点之间使用它。 1. 创建srv文件 在catkin工作区的src目录下创建一个新的包,命名为“my_srv_pkg”。进入该包文件夹并创建一个名为“srv”的文件夹。在“srv”文件夹中创建一个名为“Test.srv”的文件。该文件将定义我们的自定义srv类型。 打开Test.srv文件并输入以下内容: ``` int64 A int64 B --- int64 Sum ``` 这将定义一个名为Test的srv类型。它包含两个int64类型的变量A和B,以及一个名为Sum的响应变量,它也是int64类型的。 2. 编写服务器节点代码 现在我们需要编写一个ROS节点,该节点将提供我们的自定义服务。在“my_srv_pkg”包文件夹中创建一个名为“server.py”的Python文件,输入以下代码: ```python #!/usr/bin/env python import rospy from my_srv_pkg.srv import Test, TestResponse def handle_test(req): print "Returning [%s + %s = %s]"%(req.A, req.B, (req.A + req.B)) return TestResponse(req.A + req.B) def test_server(): rospy.init_node('test_server') s = rospy.Service('test', Test, handle_test) print "Ready to add two ints." rospy.spin() if __name__ == '__main__': test_server() ``` 这个节点将创建一个名为“test_server”的服务节点,该节点将等待来自其他节点的Test服务请求。当它收到Test请求时,它将调用handle_test函数来处理请求,并返回一个Test响应。 3. 编写客户端节点代码 现在我们需要编写一个ROS节点,该节点将通过使用我们的自定义服务服务器节点进行通信。在“my_srv_pkg”包文件夹中创建一个名为“client.py”的Python文件并输入以下代码: ```python #!/usr/bin/env python import sys import rospy from my_srv_pkg.srv import Test, TestRequest def test_client(x, y): rospy.wait_for_service('test') try: add_two_ints = rospy.ServiceProxy('test', Test) resp1 = add_two_ints(x, y) return resp1.Sum except rospy.ServiceException, e: print "Service call failed: %s"%e def usage(): return "%s [x y]"%sys.argv[0] if __name__ == "__main__": if len(sys.argv) == 3: x = int(sys.argv[1]) y = int(sys.argv[2]) else: print usage() sys.exit(1) print "Requesting %s+%s"%(x, y) print "%s + %s = %s"%(x, y, test_client(x, y)) ``` 这个节点将创建一个名为“test_client”的服务客户端,该客户端将向“test_server”节点发送Test请求。它将从命令行获取两个参数,x和y,并使用这些参数来调用test_client函数。test_client函数将连接到服务服务器并发送Test请求。当它收到Test响应时,它将返回Sum。 4. 运行节点 现在我们可以运行我们的节点。首先,在终端中运行以下命令启动ROS Master: ``` roscore ``` 接下来,在一个新的终端中运行以下命令,启动我们的服务节点: ``` rosrun my_srv_pkg server.py ``` 最后,在另一个新的终端中运行以下命令,启动我们的客户端节点: ``` rosrun my_srv_pkg client.py 10 5 ``` 你应该会看到以下输出: ``` Requesting 10+5 10 + 5 = 15 ``` 这表明我们的自定义srv类型已成功使用,并且我们的客户端节点已正常连接到我们的服务节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值