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

需求:
编写服务通信,客户端提交两个整数至服务端,服务端求和并响应结果到客户端。

分析:
在模型实现中,ROS master不需要实现,而连接的建立也已经被封装了,需要关注的关键点有三个:
1.服务端
2.客户端
3.数据

流程:
1.编写服务端实现;
2.编写客户端实现;
3.编辑配置文件;
4.编译并执行。

0.vscode配置
需要像之前自定义msg 实现一样配置c_cpp_properies.json文件,如果以前已经配置且没有变更工作空间,可以忽略,如果需要配置,配置方式与之前相同:
比如说我这是

"/home/ros/demo03_ws/devel/include/plumbing_server_client"

在这里插入图片描述
添加之后:
在这里插入图片描述
不知道路径查一下:
在devel下面的include的下面找到自己的包,在集成终端中打开
在这里插入图片描述
输入pwd就可以知道路径。

  • 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、付费专栏及课程。

余额充值