基于ROS机器人项目开发基础概念 (Service,消息类型srv&msg) - 03

2023-05-16

上文已经介绍了ros topic的基本概念信息

在这篇文章中将介绍ros service <server-client模型>,和ROS中的数据类型,msg和srv

1. ROS Service

Service和我们之前说的Topic都是ROS操作系统中应用/节点之间通讯的方式。但是Service通讯使用的是<server-client模型> ,所以区别可以概括为以下几个方面:

- Service的通讯是同步的,意思是Server节点和Client节点建立连接后,对request需要作出及时反馈response

- Service通讯类型为srv,后面会展开一点说,Topic通讯类型为msg

- 和subscriber订阅topic后只管接收信息不一样,因为这里的服务器消费者模型,所以消费者需要等待服务器响应,建立连接,之后才能得到服务器的response

我们还是使用上一节中的例子

由numberpublisher.py按照一定评率发布数字,numbercounter.py 对发布的数字进行累加,然后再以publisher的身份发出给/rostopic_2901....; 不同的是,numbercounter.py同时还要作为server,对client reset的请求作出响应

#!/usr/bin/env python

import rospy
from std_msgs.msg import Int64
from std_srvs.srv import SetBool 


counter = 0
pub = None


def callback_function(msg):
    global counter
    counter += msg.data
    new_msg = Int64()
    new_msg.data = counter
    pub.publish(new_msg)

def callback_reset_counter(req):
    if req.data:
        global counter 
        counter = 0
        return True, "Counter has been successfully reset"
    return False, "Counter has not been reset"


if __name__ == "__main__":
    rospy.init_node("number_counter")

    sub = rospy.Subscriber("/number", Int64, callback_function)

    pub = rospy.Publisher("/number_counter",Int64, queue_size=10)
    
    reset_service = rospy.Service("/reset_counter", SetBool, callback_reset_counter)

    rospy.spin()

响应如下:

 2. msg数据类型

msg是topic通讯当中经常用到的数据类型,可以自行定义或者用标准的数据类型,比如std_msgs就是ros中已定义的标准数据类型。自定数据类型可以是几种标准数据类型的集合,比如ID:可以有Name(String),Age(Int8),...

std_msgs - ROS Wiki (

 

3. srv数据类型

和topic不一样的是,因为运用于service通讯,所以包含request数据类型和response数据类型,中间用“---”分割。

 新建自己的srv或者msg也很简单,

1. catkin_create_pkg 建立一个package统一管理srv和msg

2. 在文件夹内建立msg和srv文件夹,因为

3. 修改cmakelists.txt文件

 4. 在srv文件夹下新建ComputeDiskArea.srv

 5. 回到catkin_ws重新catkin_make

这样ComputeDiskArea srv通讯数据类型就创建了

今天就讲到这里,基础框架基本搭建完了,后面就开始讲一些功能包比如:TF,SLAM,MoveIt.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于ROS机器人项目开发基础概念 (Service,消息类型srv&msg) - 03 的相关文章

  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • Spring Boot RestController,错误状态响应主体,错误消息为空

    在我的 Spring Boot RestController 上 我想通过抛出自定义异常来将自定义错误消息传递到响应正文 我正在遵循指南https dzone com articles spring rest service excepti
  • Android - 即使应用程序被终止或设备重新启动,也会在后台运行服务

    我想保持服务在后台运行 即使我的应用程序被终止 我在用着android intent action USER PRESENT事件 但该服务仅在屏幕解锁时运行 我试过android intent action BOOT COMPLETED但下
  • 致命信号 11 (SIGSEGV),代码 1,故障地址 (RenderThread)

    当双击附加到窗口管理器的元素时 我试图停止服务 Override public boolean onTouch View v MotionEvent event switch event getAction case MotionEvent
  • Service 或 IntentService 或 AlarmManager 方法

    我正在构建一个类似游戏的应用程序 并且我一直在阅读有关在后台 前台 警报等中使用服务运行事物的所有不同方法 我有点困惑 我的应用程序会像这样 示例 用户按下 Main 中的按钮 然后他可以关闭应用程序 30 分钟后 Activity1 打开
  • 如何在 Android 中与正在运行的线程进行服务通信

    我的目标是推出一项能够满足所有应用程序网络需求的服务 我想也许打开2个套接字用于数据传输 我希望异步处理数据 所以我想我应该在两个单独的线程中运行它们 每个线程针对每个套接字 这样数据就可以在两个不同的 链接 异步中进行流式传输 所以 我希
  • 如何每天中午以及每次启动时运行服务

    在我的应用程序中 我有一个 SQLite 数据库 其中有一个表 其中包含以毫秒为单位的日期行 我希望每天显示一条通知IF自上次存储在我的数据库中的日期值以来已经过去了 30 天 服务似乎是完成此检查的好方法 我遇到了 Commonsware
  • 如果Service在另一个进程中,如何绑定它?

    显现
  • Spring - 如何注入具体的接口实现?

    我需要通过 Autowired 注入服务类的具体实现 服务接口 public interface PostService 执行 Service postServiceImpl public class PostServiceImpl imp
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • Android相机无法从后台服务拍照

    我已经实现了一项从后台线程拍照的服务 但照片永远不会在我的任何设备上拍摄 这是代码 下面记录输出 public class PhotoCaptureService extends Service private static final S
  • 作为后台进程/服务运行命令

    我有一个 Shell 命令 我想在后台运行 并且我读到这可以通过添加后缀来完成 到导致它作为后台进程运行的命令 但我需要一些更多的功能 并且想知道如何去做 我希望每次系统重新启动时该命令都在后台启动并运行 我希望能够像人们一样在需要时启动和
  • 在重新激活 WiFi/移动网络之前,服务中的 Android 位置侦听器无法工作

    我的位置侦听器工作正常 收集数据没有任何问题 但有时它不收集任何数据 我此时必须关闭并重新启动我的位置提供程序 重新启动可以解决问题 但是 这可能不是用户期望做的最好的事情 当我使用 GPS 作为提供商时 没有问题 位置侦听器在服务中工作
  • 如何通过 Angular 6 中的服务将对象发送到不相关的组件?

    所以我是 Angular 的新手 我正在尝试使用服务将对象从组件 1 发送到组件 2 当我将结果记录到 component2 中的控制台时 它没有给我对象的更新值 这可能是因为服务在第二个组件中重新初始化 你能帮忙解决这个问题吗 这是我的代
  • 使用 MediaRecorder 录制屏幕特定视图

    我想录制特定的屏幕视频View链接只想记录里面执行的动作LinearLayout 现在 MediaRecorder正在录制整个屏幕 如何录制屏幕的特定部分 MediaRecorder 通过媒体投影API 记录整个屏幕 至少从 Android
  • 使用基类活动将多个活动(选项卡)绑定到服务

    发帖后发现这些 http code google com p android issues detail id 2665 http code google com p android issues detail id 2665http co
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c
  • 作为服务运行时未找到 PowerShell 模块

    我有一个项目 我将 Office 365 许可证分配给用户 有一个 Web 项目允许管理员查看可用许可证并为用户选择许可证 在后台 有一项服务每 15 分钟执行一次实际的许可证分配 以及许多其他任务 我们不直接分配许可证的原因是用户可能尚未
  • Autowired spring bean 不是代理

    我正在开发一个连接到 MySQL 数据库的非常小的应用程序 我正在尝试创建表记录 但收到 没有正在进行的事务 我已经准备好了所有正确的东西 服务接口 MyService 及其实现 MyServiceImpl 我已经用 Service 注释了
  • 如何调试symfony2服务容器中配置的标签和服务?

    我正在编写一个服务来处理 AccessDeniedException 并且我找到了一种方法来解决它使用 Symfony2 的 AccessDeniedHandlerInterface https stackoverflow com ques

随机推荐

  • Ubuntu利用anaconda安装TensorFlow-gpu版本以及安装paddle-gpu版本

    在Ubuntu系统安装GPU版本的TensorFlow xff0c 主要就是要选择好合适的TensorFlow版本以及与之相对应的cuda以及cudnn版本 第一步 xff0c 确保系统安装了anaconda xff0c 这个安装过程较为简
  • 【笔试】备战秋招,每日一题|20230415携程研发岗笔试

    前言 最近碰到一个专门制作大厂真题模拟题的网站 codefun2000 xff0c 最近一直在上面刷题 今天来进行2023 04 15携程研发岗笔试 xff0c 整理了一下自己的思路和代码 比赛地址 A 找到you 题意 xff1a 给定一
  • 【算法】欧拉路径的DFS存储顺序

    欧拉路径和欧拉回路 对于无向图 xff0c 所有边都是连通的 xff08 1 xff09 存在欧拉路径的充分必要条件 xff1a 度数为奇数的点只能有0个或2个 xff08 2 xff09 存在欧拉回路的充分必要条件 xff1a 度数为奇数
  • 【算法】二分图的相关性质

    二分图的定义 二分图是指将图中所有点分为两个集合 xff0c 任意一条边对应的两个点都不在同一个集合中 二分图的判定 判定一个图是否为二分图 xff0c 是考虑这个图中是否有奇数环 xff0c 如果不存在奇数环 xff0c 则图为二分图 具
  • 【比赛】LeetCode 2023 春季杯团队赛题解

    A 符文储备 题意 xff1a 给定一个数组 xff0c 问可以从中选择最多多少个连续的数 xff0c 使得这些数排序后 xff0c 相邻两个数的差最多是 1 数据范围 xff1a 1 lt 61 runes length lt 61 10
  • 关于puts和printf区别

    又是HDU2004那题 xff0c 开始是直接暴力if else puts输出的 xff0c 结果发现是 Warning passing argument 1 of 39 puts 39 makes pointer from integer
  • 高精度 求n!

    我们知道 xff0c 阶乘这玩意一般来说 xff0c 很大时可以和次方相提并论 xff0c 所以在计算机中很容易溢出 xff0c 所以对于它 xff0c 只能采用高精度求解 下面我们有两个求法 一 当所求n不大时 xff0c 这里限制范围为
  • 出租车费计算

    题目描述 某市出租车计价规则如下 xff1a 起步4公里10元 xff0c 即使你的行程没超过4公里 xff1b 接下来的4公里 xff0c 每公里2元 xff1b 之后每公里2 4元 行程的最后一段即使不到1公里 xff0c 也当作1公里
  • CSP-A - 咕咕东的奇遇

    题意 小明得到了一个神奇的圆环 这个圆环由字母表组成首尾相接的环 xff0c 环上有一个指针 xff0c 最初指向字母a 小明每次可以顺时针或者逆时针旋转一格 例如 xff0c a顺时针旋转到z xff0c 逆时针旋转到b 小明手里有一个字
  • week-4-C-TT的神秘礼物(二分答案)

    题意 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT 任务
  • ITK(Insight Tool Kit) 医疗影像数据后处理软件模块使用和算法02

    上节说到如何在windows xff08 10 xff09 的VS xff08 2017 xff09 平台下导入ITK的library xff0c 这次咱们开始说一下咱们一开始最关心的内容 xff0c 如何用ITK来做3D图像 xff08
  • windows10 64位下tensorflow 3.6+cuda 9.0 +cudnn 9.0安装过程与踩过的雷

    在昨天之前 xff0c 我甚至还不知道GPU运行tf程序到底长啥样 xff0c 就在昨晚我开始尝试了 那么问题来了 如何在windows系统下安装tf并且成功运行呢 xff1f 我先说说大致过程 xff0c 然后吐槽下我遇到的一些坑 第一步
  • 相机校参及C-arm校参 07 - 根据2D图像计算相机的相对位姿

    已知条件为 xff1a 1 calibrated camera 校准后相机的intrisic parameters xff08 K xff09 2 Model geometry 模型中特征点 xff08 有些文献中成为标记物Tag xff0
  • Parallel Platform (Stewart Platform) 类型机械臂的正逆解 01

    并联机器人相对于串联机器人有着不同的应用场景 本文主要是基于并联机械臂的基础控制算法做一些阐述 对于机械臂的架构通讯方式 xff08 RS232 RS485 Canbus Modbus xff09 xff0c 结构设计 xff08 球关节
  • 外科手术器械设计 超声刀设计思路和原理 - 01

    换能器设计和控制是超声刀设计最重要的环节之一 xff0c 内容也比较庞大 xff0c 打算分几个章节慢慢的写 xff0c 顺便在回顾一下之前的设计测试过程 比较喜欢挑战难度从高到低 xff0c 本人硬件EE背景比较薄弱 xff0c 所以我可
  • 外科手术器械设计 超声刀设计思路和原理 - 02

    接着上文 xff0c 对于自动跟踪谐振频率的超声刀控制反馈电路做了简单的介绍 xff0c 该方式非常适合无线超声刀 xff08 无主机系统 xff09 xff0c 一方面减少了元器件的数量降低了成本 并且减少了整个handpiece的重量
  • 外科手术器械设计 超声刀设计思路和原理 - 03

    超声刀的原理通过高频的机械振动产生组织细胞内的空化效应 xff0c 相当于内爆吧 xff0c 从而达到在切割组织的同时又有凝闭血管的效果 而如何产生这类高频的机械振动呢 xff1f 换能器的核心还是压电陶瓷 xff0c 原理机制比较复杂的一
  • 外科手术器械设计 超声刀设计思路和原理 - 04

    根据上文牛顿第二定律的谐振频率模型可以得到 xff1a 又有 xff0c 在无阻尼和无外力的情况下 xff0c 可简化为 xff1a 根据简谐振动的情况 xff0c 里面的t可以用x代替 xff1b 根据二阶齐次微分方程的通解可以求得振速
  • 基于ROS机器人项目开发从零开始 (ros topic, service, msg, srv, launch, oop等基础概念) - 02

    上一节已经给大家介绍了ROS这个多功能的操作系统的概念 xff0c 和在机器人开发中可以基于我们的帮助 那么这一篇我们继续来讲ROS当中最重要的几个概念 topic service msg srv 和 OOP xff08 基于对象编程 xf
  • 基于ROS机器人项目开发基础概念 (Service,消息类型srv&msg) - 03

    上文已经介绍了ros topic的基本概念信息 在这篇文章中将介绍ros service lt server client模型 gt xff0c 和ROS中的数据类型 xff0c msg和srv 1 ROS Service Service和