ROS笔记五(基于Python、Kinetic):通信机制——服务(server)

ROS系统中Service 通讯的原理及实现 本文我们将会了解 Service 通讯原理和机制,通过编写 Server 端和 Client 端实现 Service 通讯,并通过命令行工具或者图形化工具进行调试。最后再介绍几个常用的 rosservice 命令。 Service 通讯架构 ROS 还提供了节点与节点间通讯的另外一种方式:Service 通讯。 Service 通讯分为 client 端和 server 端。 client 端负责发送请求(Request)给 server 端。 server 端负责接收 client 端发送的 阅读详情

前言:

服务是另一种在节点之间传递数据的方式。服务其实就是同步的跨进程函数调用,让一个节点调用运行在另一个节点中的函数。服务适用于简单的请求/响应式交互场景,如询问节点的当前状态。

catkin_ws工作空间下my_code程序包里的文件目录结构:

1.定义一个节点服务端:

#!/usr/bin/env python

import rospy

from my_code.srv import WordCount,WordCountResponse #导入自定义服务类型WordCount

def count_words(request):
	return WordCountResponse(len(request.words.split())) #定义一个回调函数

rospy.init_node('service_server')  #初始化生成一个服务器节点

service = rospy.Service('word_count',WordCount,count_words) #声明服务(服务名、服务类型、回调函数)

rospy.spin()

这里使用自定义服务类型Word_Count 

2.定义一个节点客户端:

#!/usr/bin/env python

import rospy

from my_code.srv import WordCount

import sys

rospy.init_node('service_client') #初始化声明一个客户端节点

rospy.wait_for_service('word_count') #等待服务端声明"word_count"服务

word_counter = rospy.ServiceProxy('word_count',WordCount) #配置本地代理(服务名,类型)

words = ' '.join(sys.argv[1:])

word_count = word_counter(words) #在客户端通过本地代理调用服务端函数

print words,'->',word_count.count

 rospy.wait_for_service('word_count')   若在服务被声明之前使用,调用会失败,并抛出异常,所以必须等待服务端声明。

3.运行服务端节点:

增加service_server.py可执行权限:

chmod +x service_server.py

 运行ros:

roscore

新开一个终端,启动服务器节点:(my_code为ROS程序包名)

rosrun my_code service_server.py

4.运行客户端节点:

再打开另一个终端,增加service_client.py可执行权限:

chmod +x service_server.py

 启动客户端节点:(hello python!为输入的字符串)

rosrun my_code service_client.py hello python!

ROS服务限制:当服务端不可用或意外终止,客户端将永远等待,造成客户端卡住。

 5.rosservice -h:查看rosservice命令参数:

查看系统服务列表:

sorservice list

查看一个服务的详细信息:

sorservice info word_count

 

 

 

 

 

ROS机器人入门第六课:服务通信自定义srv 服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。比如如下场景:机器人巡逻过程中,控制系统分析传感器数据发现可疑物体或人… 此时需要拍摄照片并留存。在上述场景中,就使用到了服务通信。一个节点需要向相机节点发送拍照请求,相机节点处理请求,并返回处理结果与上述应用类似的,服务通信更适用于对时时性有要求、具有一定逻辑处理的应用场景。概念以请求响应的方式实现不同节点之间数据交互的通信模式。 阅读详情

相关推荐

ROS服务端(Server)和客户端(Client)的python编程实现(保姆级教程)

ROS服务端(Server)和客户端(Client)的python编程实现

☆下山☆的博客 6885

ROS基础(二):ros通讯之服务(service)机制

概念 与topic通讯机制的区别:

miya的博客 1万+

新手避坑指南:在Ubuntu 16.04和树莓派上搭建ROS Kinetic通信环境(含ROS安装与网络配置)

本文详细介绍了在Ubuntu 16.04和树莓派上搭建ROS Kinetic通信环境的完整流程,包括系统镜像选择、rosdep初始化失败解决方案、网络配置与防火墙优化等关键步骤。特别针对多机通信中的常见问题提供了实战验证的解决方法,帮助开发者快速构建稳定的机器人通信环境,并包含语音控制机器人的实战案例。

weixin_30321709的博客 398

编写 ROS 服务节点 Service 和 Client(python/C++)(六)

编写 ROS 服务节点 Service 和 Client(python/C++)

qq_46506007的博客 1852

ROS Kinetic入门教程:Ubuntu 16.04下安装配置与工程实践

ROS(Robot Operating System)是机器人系统开发的核心中间件框架,其核心原理基于分布式节点通信、话题/服务/动作机制及TF坐标变换体系。技术价值在于屏蔽硬件异构性、提供标准化工具链(如rviz、rosbag、roslaunch)并支撑实时控制与多传感器融合。典型应用场景涵盖高校机器人课程实验、工业AGV底盘调试、教学机械臂开发及国产激光雷达(如思岚A1)驱动集成。由于大量教材、实验平台与国产硬件SDK仍深度绑定ROS Kinetic版本,且其运行依赖Ubuntu 16.04 LTS的稳

liudaoru - 悟 796

用树莓派+STM32+ROS Kinetic打造你的第一台语音控制小车(保姆级避坑指南)

本文详细介绍了如何利用树莓派、STM32和ROS Kinetic构建一台语音控制小车,涵盖硬件选型、ROS多机通信、语音识别集成及视觉功能开发等关键技术。特别针对跨设备通信、科大讯飞SDK集成等常见问题提供保姆级解决方案,帮助创客和机器人爱好者快速实现智能移动机器人项目。

weixin_30325487的博客 441

【ROS服务通信笔记】

记录一下ROS学习中的话题通信,

qq_1840998080的博客 566

ROS话题通信原理与实操:从turtlesim拆解发布订阅机制

ROS话题(Topic)是ROS机器人操作系统中最基础的数据通信机制,本质是一种基于类型强约束的发布/订阅(Pub/Sub)广播模型,而非点对点管道。其核心原理依赖ROS Master实现节点自动发现与连接协商,数据在发布者与订阅者之间直连传输,具备松耦合、高内聚、可扩展的技术价值。广泛应用于传感器数据分发(如激光雷达/IMU)、运动控制指令(如/cmd_vel)、状态反馈(如/pose)等实时性要求较高的场景。本文以turtlesim为最小闭环系统,深入解析rostopic、rqt_graph、rosto

ctk87443的博客 454

TurtleBot入门:Ubuntu 16.04+ROS Kinetic系统级部署与状态机验证

机器人操作系统(ROS)是构建智能移动机器人的核心中间件,其本质是一套支持节点通信、坐标变换(TF)、传感器抽象与状态管理的分布式框架。理解ROS的分层架构——从底层硬件驱动、URDF建模、TF树发布,到上层导航栈(move_base、AMCL)——是实现物理小车可靠运动的前提。TurtleBot作为ROS经典教学平台,高度依赖特定软硬协同环境:Ubuntu 16.04内核(4.4)与ROS Kinetic的组合,不仅关乎软件兼容性,更直接决定Kobuki底盘的USB时序稳定性、激光雷达数据精度及实时控制链

weixin_30614109的博客 427

ROS消息与服务创建全指南:从定义到调试的完整实践

ROS消息(.msg)和服务(.srv)是ROS通信机制的核心契约,本质是跨语言、跨节点的数据接口协议。其原理依赖catkin构建系统在编译期动态生成多语言绑定(C++头文件、Python模块等),而非运行时解析文本。这一机制保障了机器人系统在异构环境下的类型安全与二进制兼容性,构成SLAM、导航、控制等上层功能的底层支撑。典型应用场景包括传感器数据发布(如IMU原始值)、设备状态交互(如电池电量、急停信号)以及同步RPC调用(如路径规划请求)。掌握消息定义语法、CMakeLists.txt配置逻辑及pac

an4455的博客 441

ROS话题详解:发布-订阅机制原理与实战调试

ROS话题是机器人操作系统中最基础的通信范式,本质是基于发布-订阅(Publish-Subscribe)模型的数据分发机制。其核心原理在于解耦数据生产者与消费者,通过话题名、消息类型和序列化格式构成严格通信契约,由ROS Master负责节点发现与路由调度,而非中转数据。该机制赋予系统强可扩展性、高可观测性与松耦合特性,广泛应用于传感器数据广播、控制指令分发、TF坐标变换等实时场景。掌握rostopic工具链与rqt_graph可视化方法,是构建稳定、可调试ROS系统的前提。本文深入剖析ros话题工作机制与

chuliaoqiao4046的博客 652

ROS开发者生存指南:从通信机制到硬件调试的实战地图

ROS(Robot Operating System)是一套面向分布式机器人系统的中间件框架,其核心在于解决多节点协同、时间同步、坐标变换与跨进程通信等工程复杂性。理解ROS节点通信机制(基于TCP连接而非广播)、TF坐标变换(依赖精确时间戳与缓存策略)、catkin构建系统(暴露依赖本质)等底层原理,是实现稳定部署的关键。它不仅支撑AGV调度、SLAM建图、机械臂控制等典型场景,更深度耦合Linux权限管理、串口设备配置、消息MD5一致性等硬件交互细节。本文聚焦真实项目中高频踩坑点——如`/tf`树断裂、

weixin_34293141的博客 389

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

ROS Kinetic + Ubuntu 16.04 搭建TurtleBot2教学环境全指南

ROS(Robot Operating System)作为机器人开发的事实标准框架,其版本兼容性与硬件支持能力直接决定初学者的学习效率。ROS Kinetic基于Ubuntu 16.04 LTS,依托稳定内核(4.4)、成熟驱动生态(如Kobuki底盘、Kinect v1)及完整官方教学包(turtlebot_navigation、kobuki_driver),构成了当前最可靠的教学基线。相比后续Python3迁移的Noetic/Humble版本,Kinetic规避了USB权限异常、rviz渲染黑屏、cat

weixin_34099526的博客 451

嵌入式开发必看:STM32 DMA双缓冲配置全攻略(含CubeMX教程)

本文详细解析了STM32 DMA双缓冲机制的原理与优势,并提供了基于CubeMX的完整配置教程。通过硬件自动切换两个缓冲区,实现DMA传输与CPU处理的真正并行,有效降低中断频率,提升高速数据采集、音频流处理等场景下的系统效率和实时性。

weixin_29212429的博客 174

uniApp微信小程序:利用live-pusher人脸活体检测功能+完整示例代码,uniapp使用live-pusher直播推流组件实现人脸验证-活体检测,检测人脸中的动作包括眨眼、张嘴、左右摇头动作

UniApp 使用 live-pusher 实现人脸活体检测(附完整源码)uniapp开发微信小程序人脸检测活体检测,在uni-app的微信小程序项目中使用live-pusher实现人脸识别,uniapp使用live-pusher实现模拟人脸识别效果,张张嘴、眨眨眼、向左摇头、向右摇头等动作,免费使用人脸活体检测的插件方案,uniapp小程序怎么免费使用人脸活体,直播推流,UNIAPP微信小程序使用live-pusher实现人脸识别(拍照)功能,在uni-app项目中实现人脸识别,既使用uni-app中的l

✅ 精选推荐文章 3014

ROS机器人操作系统入门:从核心概念到Python实战Topic与Service通信

在机器人软件开发领域,进程间通信是实现模块化与分布式系统的核心技术。其原理在于通过标准化的消息传递机制,让不同功能模块能够高效协同工作。这一技术价值在于极大地提升了机器人系统的可扩展性、可维护性和代码复用率,是构建复杂机器人应用(如自动驾驶、工业自动化、服务机器人)的基石。ROS(Robot Operating System)作为机器人领域的标准中间件框架,其核心正是提供了Topic(发布/订阅)和Service(请求/响应)两种通信模型。本文将以ROS Noetic为例,通过Python代码实战,手把手教

weixin_33946605的博客 425

【26美赛B题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛数学建模B题解析与备赛指南:本文针对B题"数据+预测+决策优化"的特点,提出通用建模路线图,包含数据预处理、特征工程、预测模型构建、策略优化和稳定性验证等关键环节。提供赛题拆解方法、Python/Matlab双实现方案、AI辅助建模技巧及论文写作模板。适用于2026美赛B题参赛者及其他数学建模竞赛选手,帮助掌握从数据到决策的闭环建模流程,特别强调逻辑严谨性和结果可视化呈现。订阅者可获取历年真题解析和持续更新的备赛资源。

一键难忘的博客 2113

ROS机器人开发:从入门到SLAM实战指南

机器人操作系统(ROS)作为开源的机器人开发框架,通过分布式节点架构实现了模块化设计,支持多种编程语言混合开发。其核心价值在于提供硬件抽象层和通信中间件,使开发者能快速构建复杂的机器人系统。在SLAM(同步定位与建图)等典型应用中,ROS的Topic/Service通信机制和功能包管理系统大幅降低了开发门槛。通过集成激光雷达驱动、GMapping算法等功能包,开发者可快速搭建完整的导航系统。环境配置方面,推荐使用鱼香ROS等工具实现一键部署,配合VSCode插件提升开发效率。对于实时性要求高的场景,可采用N

weixin_34259232的博客 465

Spring Framework 7.002.Spring IoC 容器与 Bean 简介(Introduction to the Spring IoC Container and Beans)

摘要:Spring框架的核心技术包括IoC容器和AOP技术。IoC容器通过依赖注入实现控制反转,提供Bean管理和配置功能。ApplicationContext作为BeanFactory的扩展,增加了企业级特性。文档详细介绍了容器配置、Bean定义、依赖注入、作用域等核心概念,以及基于注解的配置方式。AOP框架支持80%的AOP需求,并可集成AspectJ。此外还涵盖环境抽象、容器扩展点等高级特性,为Java企业应用开发提供全面支持。(150字)

无 213

详解FreeRTOS:FreeRTOSConfig.h系统配置文件(拓展篇—1)

FreeRTOS的系统配置文件为FreeRTOSConfig.h,在配置文件中可以完成FreeRTOS的裁剪和配置,这是非常重要的一个文件,本篇博文就来讲解这个文件。

不脱发的程序猿 1548

ROS自定义消息和服务完整实践指南

在机器人操作系统(ROS)中,消息(Message)和服务(Service)是实现节点间通信的基础抽象,其本质是基于IDL接口定义语言的跨语言数据契约。理解.msg与.srv文件的语法规范、编译时代码生成机制(如genpy/gencpp)、以及catkin构建系统对message_generation和message_runtime的依赖管理,是保障分布式节点可靠协作的前提。这类机制支撑了异步发布/订阅(如传感器数据流)与同步请求/响应(如状态查询、任务触发)两类核心通信模式,广泛应用于导航、感知、控制等R

weixin_30875157的博客 464

基于YOLOv5与改进遗传算法的动态路径规划方法研究

摘要 本文提出一种融合YOLOv5目标检测与改进遗传算法的动态路径规划方法。通过YOLOv5实时感知环境中的动态和静态障碍物,将语义信息转化为栅格地图。针对传统遗传算法在路径规划中易早熟收敛、局部搜索能力差等问题,提出自适应初始化种群策略、动态变异算子及精英保留机制等改进方案。仿真结果表明,该方法在动态环境中能规划出更安全、平滑且长度更优的路径,具有更强的环境适应性和鲁棒性。 关键词:路径规划;YOLOv5;遗传算法;动态环境;目标检测

huanghm88的专栏 939

Ubuntu新手必学:Ansible自动化入门与ROS部署实战

Ansible是一种基于SSH的无代理配置管理工具,其核心原理是将运维操作逻辑转化为可复用、可版本控制的YAML声明式任务,依托Python运行且无需在目标机安装客户端。技术价值在于降低Linux系统批量管理门槛,尤其适配Ubuntu开箱即用的生态——官方源预编译deb包、默认Python兼容性好、文档与社区实践高度聚焦Ubuntu场景。典型应用场景包括服务器初始化、开发环境统一部署、ROS机器人系统跨机协同配置等。本文以Ubuntu 18.04/20.04/22.04为基准,详解Ansible安装避坑、S

weixin_33834137的博客 456

AI之KE:Knowledge Engineering知识工程的简介、发展、应用案例之详细攻略

AI之KE:Knowledge Engineering知识工程的简介、发展、应用案例之详细攻略 目录 Knowledge Engineering知识工程的简介 0.1、What 0.2、How 0.3、Why 1、知识工程过程的5个活动 2、知识图谱的应用 Knowledge Engineering知识工程的发展 1、前知识工程时期——1950-1970时期:图...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 5336

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ROS Indigo下MoveIt apt安装全解析:从入门到系统认知

MoveIt是ROS生态中机器人运动规划的核心框架,其本质是一套集成规划算法、碰撞检测、ROS通信与可视化能力的系统级中间件。理解MoveIt需先把握其模块化架构原理——moveit_core提供无ROS依赖的纯算法层,moveit_ros_planning封装为ROS服务接口,而moveit_ros_visualization支撑Rviz交互验证。这种分层设计赋予了它在工业场景中的高可配置性与可复现性,广泛应用于机械臂轨迹规划、抓取仿真及产线集成。本文聚焦Ubuntu 14.04 + ROS Indigo

weixin_33898233的博客 678

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: ROS笔记四(基于Python、Kinetic):自定义服务类型
下一篇: ROS笔记六(基于Python、Kinetic):自定义动作类型
进击的香皂
博客等级 码龄8年 34粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值