首页 > 其他分享 >ROS学习笔记(二)- 提供服务和调用服务

ROS学习笔记(二)- 提供服务和调用服务

时间:2023-04-13 18:37:16浏览次数:47  
标签:__ 服务 two 笔记 add rospy numbers srv ROS

书接上回 - https://www.cnblogs.com/lihan829/p/17315435.html

前面展示了ROS节点发布和订阅消息,这次展示如何提供服务和调用服务。

提供服务和调用服务很好理解,概念和行为上并不深奥,就是远程过程调用,可类比为http接口的远程调用,grpc接口的远程调用等等。

1,服务提供方,定义服务,服务就是一个可以远程调用的方法,是方法,就要有传入参数和返回值,需要先定义好。在lesson001目录下新建一个srv目录,注意你没有看错,就是srv目录,不是src目录,据说是专门用来存放服务定义的。

cd ~/ros-learning
roscd lesson001
mkdir srv
cd srv
touch Number.srv

Number.srv内容如下:

int64 a
int64 b
---
int64 sum

前两行表示两个传入参数及其类型,三个小减号是分隔符,据说也是专用的,ROS规范的一部分,分隔符下面是返回值及其类型。

2,在srv同层级的src目录下写提供服务和调用服务的python源码:

add_two_numbers_client.py(调用者):

#!/usr/bin/env python
import rospy
from lesson001.srv import Number, NumberRequest

def add_two_numbers_client(x, y):
    rospy.wait_for_service('add_two_numbers')
    try:
        add_two_numbers = rospy.ServiceProxy('add_two_numbers', Number)
        resp = add_two_numbers(x, y)
        return resp.sum
    except rospy.ServiceException as e:
        rospy.logerr("Service call failed: %s" % e)

if __name__ == "__main__":
    rospy.init_node('add_two_numbers_client')
    x = 5
    y = 10
    rospy.loginfo("Requesting %d + %d" % (x, y))
    result = add_two_numbers_client(x, y)
    rospy.loginfo("Sum is %d" % (result))

add_two_numbers_server.py(提供者):

#!/usr/bin/env python
import rospy
from lesson001.srv import Number, NumberResponse

def handle_add_two_ints(req):
    result = req.a + req.b
    rospy.loginfo("Sum of %d and %d is %d" % (req.a, req.b, result))
    return NumberResponse(result)

def add_two_numbers_server():
    rospy.init_node('add_two_numbers_server')
    s = rospy.Service('add_two_numbers', Number, handle_add_two_ints)
    rospy.loginfo("Ready to add two numbers.")
    rospy.spin()

if __name__ == "__main__":
    add_two_numbers_server()

3,在src同级别的package.xml和CMakeLists.txt加入一些内容,注意要加入到对应的位置,找一下不难发现的

package.xml:

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

CMakeLists.txt,注意有些内容本来是注释了的,可以取消注释:

find_package(catkin REQUIRED COMPONENTS
  rospy
  std_msgs
  message_generation
)

add_service_files(
  FILES
  Number.srv
)

generate_messages(
  DEPENDENCIES
  std_msgs
)

catkin_package(
  CATKIN_DEPENDS rospy std_msgs message_runtime
)

4,先给server和client文件赋予执行权限`chmod +x add_two_numbers_server.py add_two_numbers_client.py`,再来到项目根目录也就是`cd ~/ros-learning`,执行`catkin_make`

5,roscore每启动的话先启动,然后分别在不同的终端启动server和client:

#终端1
source devel/setup.bash
roscore

#终端2
source devel/setup.bash
rosrun lesson001 add_two_numbers_server.py

#终端3
source devel/setup.bash
rosrun lesson001 add_two_numbers_client.py

无图无真相:

 

标签:__,服务,two,笔记,add,rospy,numbers,srv,ROS
From: https://www.cnblogs.com/lihan829/p/17315969.html

相关文章

  • 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并
    场景目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca等。1、SRShttps://github.com/ossrs/srs2、EasyDarwinhttps://github.com/EasyDarwin/EasyDarwin3、Monibucahttps://github.com/Monibuca4、ZLMediaKithttps://github.co......
  • Java 程序连接数据库服务端程序的助手类
    username=用户名password=密码jdbcURL=jdbc:mysql://IP地址:端口号/数据库名?useUnicode=true&useSSL=false&amp&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=truejdbcDriver=com.mysql.cj.jdbc.Driver import......
  • 恒创科技:香港服务器如何屏蔽美国的ip地址?
    ​一、确定香港服务器IP地址范围首先,我们需要确定香港服务器IP地址范围,以便阻止美国用户访问。在确定IP地址范围之前,我们需要了解美国的IP地址范围。根据网络信息,美国的IP地址段为:172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255和12......
  • redis-4-2,使用docker在同一台服务器配置redis主从复制
    拉取redis镜像dockerpullredis下载redis配置文件https://redis.io/docs/management/config/在这里面找到需要的版本的配置文件使用配置文件的时候可能会出错,从docker拉取下来的最新镜像是6.2.8版本的......
  • 解决方案帮助保护您的服务器
    解决方案帮助保护您的服务器我们可以帮助您保护您的服务器,并了解最常见的安全风险,包括注入、身份验证、跨站点脚本、拒绝服务和安全错误配置。防火墙防火墙是服务器的第一道防线,通过根据一组可定制的规则过滤流量来保护您的数据。有了防火墙,您的服务器和互联网的其余部分之间就......
  • 解决方案帮助保护您的服务器
    解决方案帮助保护您的服务器我们可以帮助您保护您的服务器,并了解最常见的安全风险,包括注入、身份验证、跨站点脚本、拒绝服务和安全错误配置。防火墙防火墙是服务器的第一道防线,通过根据一组可定制的规则过滤流量来保护您的数据。有了防火墙,您的服务器和互联网的其余部分之间就......
  • GAMES101笔记-01
    前言:这篇以及未来的一系列随笔是根据b站上的GAMES101现代计算机图形学入门课程所写的笔记,但笔记的篇章并非和课程一一对应。比如这篇对应的是第二课~第三课的内容。并且整理时不一定会将推导过程全部列出,做成只有总结概括的内容也不是没有可能。 1.向量叉乘的矩阵表示:  ......
  • 电子商务网站用户行为分析及服务推荐
     importpandasaspdfromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:102011@localhost/test?charset=utf8')sql=pd.read_sql('all_gzdata',engine,chunksize=10000)counts=[i['fullURLId'......
  • 电子商务网站行为分析及服务推荐
    #-*-coding:utf-8-*-#代码11-1importosimportpandasaspd##修改工作路径到指定文件夹#os.chdir("./")##第一种连接方式fromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:[email protected]:3306/test?charset=utf8',echo=T......
  • 服务器通用背板管理(UBM)实现
    本文分享自天翼云开发者社区《服务器通用背板管理(UBM)实现》,作者:乘风  一UBM概述通过SGPIO进行SAS和SATA背板管理的SCSI机箱服务(SES)标准于2003年首次推出。该规范提供主机控制LED,并允许主机检测槽位和已安装驱动器的存在,以及槽位编号方案。该规范提供了驱......