快速记录 ros 写service 与 client 节点

本文档详细介绍了如何在ROS环境中创建服务与客户端节点。首先创建一个名为test_pkg_service的功能包,包含一个服务AddTwo.srv,定义了加法操作。接着编写服务端节点service_node.py,处理加法请求并返回结果。然后创建客户端节点client.py,调用服务并打印结果。最后,更新相关配置文件,编译并运行服务和客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续上节快速回忆了 ros publisher 与subscriber 节点的写法之后,继续回顾 service与client 节点写法

在相同的工作空间 ~/catkin_ws/src 下新建一个功能包:

$catkin_create_pkg test_pkg_service std_msgs rospy roscpp

回到 ~/catkin_ws/下

catkin_make 一下, source ./devel/setup.bash

$roscd test_pkg_service

创建脚本与服务-响应的数据类文件夹

$mkdir scripts

$mkdir srv

新建一个AddTwo.srv 的文本文件

内容:

int64 a
int64 b
---
int64 sum

此格式为ros service 的一般格式,发送请求数据 为 a和b, 返回数据为 sum

之后修改 package.xml 与CMakelist.txt

1 ) 然后在 package.xml中

<build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

不被注释;

2) CMakelist.txt 中(改动4个地方):

1.在find_package 改动:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

2.改动add_service_files

add_service_files(
  FILES
  AddTwo.srv
)

3. 去掉注释

generate_messages(
   DEPENDENCIES
   std_msgs
)

4.增加依赖脚本

catkin_install_python(PROGRAMS
  scripts/service_node.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

然后 

回到 ~/catkin_ws/下

catkin_make 一下, source ./devel/setup.bash

 $rossrv list 一下 可以看到:

test_pkg_service/AddTwo

$ rossrv info test_pkg_service/AddTwo 就可以看到 service数据格式定义的内容

在scripts 文件夹下增加文件 service_node.py

#!/usr/bin/python

import rospy
from test_pkg_service.srv import AddTwo, AddTwoResponse

# define the function to handle the request
def handle_add_two(req):
    rospy.loginfo('Receive the req: %d + %d' % (req.a, req.b))
    re = req.a + req.b
    rospy.loginfo('The results is %d' % re)
    return AddTwoResponse(re)


def add_two_ints_service():
    
    rospy.init_node('adding_node',anonymous=True)
    
    s = rospy.Service('add_two_ints',AddTwo,handle_add_two)
    
    rospy.loginfo('The service started...')
    rospy.spin()


if __name__ =="__main__":
    add_two_ints_service()

chmod +x service_node.py 

运行服务:

$ rosrun test_pkg_service service_node.py 

不编写客户端进行 快速测试服务:

$ rosservice call /add_two_ints 2 3 

编写客户端情形:

在scripts 文件夹下 建立 client.py

#!/usr/bin/python

import rospy
from test_pkg_service.srv import AddTwo, AddTwoResponse
import sys 


def add_two_ints_call_service(x,y):
    rospy.wait_for_service('add_two_ints')
    func = rospy.ServiceProxy('add_two_ints',AddTwo)
    rospy.loginfo('ready to call the service from client!')
    res = func(x, y)
    return res.sum


if __name__ == "__main__":
    x = int(sys.argv[1])
    y = int(sys.argv[2])
    re = add_two_ints_call_service(x,y)
    print('The sum of %d and %d is %d' % (x,y,re))

chmod +x client.py

需要在 CMakelist.txt中增加脚本引用

catkin_install_python(PROGRAMS
  scripts/service_node.py
  scripts/client.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

回到 ~/catkin_ws/下

catkin_make 一下, source ./devel/setup.bash

运行客户端

$rosrun test_pkg_service client.py 3 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenxin0215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值