功能介绍

以自定义数据类型为基础,完成一个节点作为服务器,另一个节点接收传送两个数字到服务端,服务端计算后反馈到客户端进行打印输出

1、工作空间

1.1 创建工作空间lee_ws

mkdir -p ~/lee_ws/src
cd ~/lee_ws/src/
catkin_init_workspace
cd ~/lee_ws/
catkin_make
echo "source ~/lee_ws/devel/setup.bash" >> ~/.bashrc
source devel/setup.bash

1.2 创建功能包lee_srv

cd ~/lee_ws/src
catkin_create_pkg lee_srv std_msgs rospy roscpp
cd ~/lee_ws/
catkin_make
source ~/lee_ws/devel/setup.bash

1.3 创建srv文件

路径: /home/lee/lee_ws/src/lee_srv/srv/AddTwoInts.srv

int64 num1
int64 num2
---
int64 sum

1.4 package.xml配置

在package.xml最下面的build_dependexec_depend附近添加即可

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

1.5 CMakeLists.txt配置

在CMakeLists.txt中配置下面相应的代码

# 需要加入 message_generation,必须有 std_msgs
find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)# 配置 srv 源文件
add_service_files(FILESAddTwoInts.srv
)# 生成消息时依赖于 std_msgs
generate_messages(DEPENDENCIESstd_msgs
)#执行时依赖
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES leeCATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)

1.6 编译后的中间文件查看

Python 需要调用的中间文件(…/工作空间/devel/lib/python3/dist-packages/包名/srv)

1.7 总结步骤1.3-1.5

  • 1.3建立的自定义srv文件
  • 需要通过1.4和1.5两个步骤的配置才能通过catkin_make对1.3的文件进行编译
  • 1.6为通过编译自定义文件生成的python、C++和js等头文件,用于相应编程代码的头文件调用

1.8 VScode编辑ros参数配置

快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build这一行,点击小齿轮配置设置,修改.vscode/tasks.json 文件,将下面复制进去即可
这么配置的原因:下一次快捷键 ctrl + shift + B直接进行代码编译
路径: /home/lee/lee_ws/.vscode/tasks.json

{"version": "2.0.0","tasks": [{//代表提示的描述性信息"label": "catkin_make:debug", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行"type": "shell",  //这个是我们需要运行的命令"command": "catkin_make","args": [],"group": {"kind":"build","isDefault":true},//可选always或者silence,代表是否输出信息           "presentation": {"reveal": "always"},"problemMatcher": "$msCompile"}]
}

1.9 vscode 头文件配置

为了方便代码提示以及避免误抛异常,需要先配置 vscode,将1.3-1.5生成的 head 中间文件路径配置进 c_cpp_properties.json 的 includepath属性,如果不配置vscode会报错代码,但是编译不受影响
路径: /home/lee/lee_ws/.vscode/c_cpp_properties.json

{"configurations": [{"browse": {"databaseFilename": "","limitSymbolsToIncludedHeaders": true},"includePath": ["/opt/ros/noetic/include/**","/home/lee/catkin_ws/src/lee/include/**","/usr/include/**","/home/lee/catkin_ws/devel/include/**" //配置 head 文件的路径 ],"name": "ROS","intelliSenseMode": "gcc-x64","compilerPath": "/usr/bin/gcc","cStandard": "c11","cppStandard": "c++17"}],"version": 4
}

2、服务端代码 Python

路径: /home/lee/lee_ws/src/lee_srv/scripts/lee_srv_add_server.py

2.1 代码部分

#! /usr/bin/env python
# coding=utf-8import rospy
from lee_srv.srv import AddTwoInts,AddTwoIntsRequest,AddTwoIntsResponse#接收到数据请求后,进入回调函数
def chatterCallback(req):# 解析提交的数据sum = req.num1 + req.num2rospy.loginfo("提交的数据:num1 = %d, num2 = %d, sum = %d",req.num1, req.num2, sum)# 创建响应对象,赋值并返回# resp = AddIntsResponse()# resp.sum = sumresp = AddTwoIntsResponse(sum)return respif __name__ == "__main__":#初始化 ROS 节点:命名(唯一)rospy.init_node("lee_srv_add_server")#创建一个Service,服务名为chatter_srv的topic,注册回调函数为chatterCallbackserver = rospy.Service("chatter_srv",AddTwoInts,chatterCallback)#设置循环调用回调函数rospy.loginfo("服务已经启动....")rospy.spin()

2.2 CMakeLists.txt部分

在install下面直接添加如下代码即可

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

3、客户端代码 Python

路径: /home/lee/lee_ws/src/lee_srv/src/lee_srv_add_client.cpp

3.1 代码部分

#! /usr/bin/env python
# coding=utf-8import rospy
from lee_srv.srv import AddTwoInts,AddTwoIntsRequest,AddTwoIntsResponse
import sysif __name__ == "__main__":#优化实现#if len(sys.argv) != 3  如果通过 launch 的 args 传参,需要传递的参数个数 3#if len(sys.argv) != 5  传参(0-文件路径 1传入的参数 2传入的参数 3节点名称 4日志路径)if len(sys.argv) != 3:rospy.logerr("请正确提交参数,需要两个数字")sys.exit(1)#初始化 ROS 节点:命名(唯一)rospy.init_node("lee_srv_add_client")#创建一个ServiceProxy,订阅名为chatter_srv的topicclient = rospy.ServiceProxy("chatter_srv",AddTwoInts)# 请求前,等待服务已经就绪,如服务器没启动则一直在此等待client.wait_for_service()#整理请求的数据req = AddTwoIntsRequest()# req.num1 = 100# req.num2 = 200 #优化req.num1 = int(sys.argv[1])req.num2 = int(sys.argv[2]) #发送请求,并接收并打印显示resp = client.call(req)rospy.loginfo("响应结果:%d",resp.sum)

3.2 CMakeLists.txt部分

在install下面直接添加如下代码即可

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

4、代码测试

4.1 启动rosmaster

roscore

4.2 启动 lee_srv_add_server 节点

rosrun lee_srv lee_srv_add_server.py

4.3 启动 lee_srv_add_client 节点,并带参数

rosrun lee_srv lee_srv_add_client.py 1 2

5、结果

2.6 自定义srv python相关推荐

  1. 2.5 自定义srv C++

    功能介绍 以自定义数据类型为基础,完成一个节点作为服务器,另一个节点接收传送两个数字到服务端,服务端计算后反馈到客户端进行打印输出 1.工作空间 1.1 创建工作空间lee_ws mkdir -p ~ ...

  2. python导入自定义模块_如何Import自定义的Python模块?

    原标题:如何Import自定义的Python模块? 实际工作中,经常要用的功能能不能像导入python模块一样,通过import导入呢?答案当然是可以的,本文教你如何做,大家一起来学习吧! 背景 在实 ...

  3. 【服务通信自定义srv调用3----客户端的优化】

    客户端的优化 服务通信自定义srv调用,客户端随意提交两个数,完成数的相加.也就是实现参数的动态提交: 1.格式:rosrun xxxx xxxx 12 34 2.节点执行时候,需要获取命令中的参数, ...

  4. 聊聊如何制作自定义ArcGIS Python工具箱

    前言 有时候手里就是闲不住,大好假期竟然无意休息.于是想和大家分享分享ArcGIS工具箱制作的一些经验.最先接触自定义工具箱制作是在大四,当时毕设就是写数字水印工具箱,但当时主要任务在于算法实现,所以 ...

  5. python文件用pyinstaller库进行打包时,代码中用到的图片和我们自定义的python package包的处理办法

    在使用python打包.py文件时,如果我们在代码中使用到了图片,那么在打包成功后,运行.exe文件时会提示 Failed to execute script xxx的错误,当我们自定义了python ...

  6. 自定义制作python版本的CIFAR数据集

    自定义制作python版本的CIFAR数据集 CIFAR-10/CIFAR-100数据集 1.准备图像 (以制作小数据集为例,便于理解) 这里自定义制作的数据集只包含2个类:dog,parrot,每个 ...

  7. #自定义srv消息:实现四则运算

    #自定义srv消息:实现四则运算 tips:养成良好习惯,新建工作包之前,先把工作空间编译一下,确保之前建好的工作包没有错误,再新建新的工作包,以免后续编译出现错误一直找不到原因. 1.在工作空间下创 ...

  8. 自定义srv消息之ros

    自定义消息 前言 在Ros中,如果没有现成的消息类型来描述要去传递的消息时,我们会自定义消息. 我们会新建一个Package来去自定义消息,通常这个Package写任何的业务逻辑,只是用来声明自定义的 ...

  9. 自定义安装python,退格,方向键无法正常使用(转)

    请教下: redhat 5.3 64位的系统 系统自带的python  2.4.3箭头和退格正常使用 #python Python 2.4.3 (#1, Sep 17 2008, 16:07:00 [ ...

最新文章

  1. ajax form不回调函数,jQuery ajax form提交在IE8下不执行回调函数
  2. excel单元格斜线_如何用EXCEL做一套田字格模板?在家给小孩练习写字
  3. 又拍云上传文件后,如何访问?
  4. Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146
  5. PHP的错误处理机制
  6. Python 线程优先队列 PriorityQueue - Python零基础入门教程
  7. entity framework框架生成摘要文档为空(没有元数据文档可用)的bug解决方案
  8. 厨师刀行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. CentOS 缺少mysqli扩展 请检查PHP配置
  10. TP LINK交换机 console 超级终端链接设置
  11. 虚拟仿真实验室 服务器,中国美术学院|虚拟仿真实验教学共享平台
  12. 纽约州立大学环境与林业学院计算机科学专业,2020年纽约州立大学环境科学与林业科学学院专业设置...
  13. 20090726选股
  14. 怎么找主播卖货?最靠谱的5种直播带货方式
  15. 从现实世界的角度去理解计算机领域的知识
  16. 【技术方案】如何基于高清摄像头设备,搭建慢直播平台?
  17. python众数问题给定含有n个元素的多重集合s_ACM题目:众数给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数...
  18. EM算法双硬币模型的python实现
  19. mybatis-plus 主键自增问题
  20. CSS中min-height、min-width、max-width、max-height的理解及优先级问题

热门文章

  1. 坐标轴删了怎么恢复_cad中坐标标注恢复xy轴的方法
  2. 数据分析——Tableau数据可视化与仪表盘搭建
  3. OA办公系统,为企业内部管理“铺桥搭路”
  4. Windows的使用技巧(一)
  5. 查询windows系统的MAC和IP地址
  6. Python这个黑科技,让你走上致富道路
  7. O2OA组织架构,组织职位,组织属性
  8. 基于单片机的多功能出租车计价器设计资料
  9. 微信小程序旅游服务平台+后台管理系统|前后分离VUE
  10. IE11 中的兼容性更改