【ROS】服务通信、话题通信的应用

这篇具有很好参考价值的文章主要介绍了【ROS】服务通信、话题通信的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【ROS】服务通信、话题通信的应用

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。


【ROS】服务通信、话题通信的应用

本章将来学习如何利用话题通信,服务通信两种种方式对turtlesim进行一个控制

0. 话题发布

利用话题通信发布一个位姿信息,让乌龟一直做圆周运动

首先,先启动 turtlesim这个节点
【ROS】服务通信、话题通信的应用

rosrun turtlesim    turtlesim_node
rosrun turtlesim turtle_teleop_key

现在可以直接使用键盘来控制乌龟运动了
我们在另一个窗口查看下当前节点关系

rqt_graph

【ROS】服务通信、话题通信的应用

键盘节点通过 turtle1/cmd_vel这个话题向turtlesim发送速度控制消息,我们查看一下这个话题所使用的消息类型,方便进行下一步的修改

rostopic info /turtle1/cmd_vel

可以得到该话题的消息类型为 geometry_msgs/Twist
查看下该消息类型具体有什么参数

rosmsg show geometry_msgs/Twist

其具有两类参数 linear、angular分别为角速度与线速度,对应xyz上的值
【ROS】服务通信、话题通信的应用

因为乌龟是一个2d的,所以linear中z值为0,而angular中只有z值是有效的,其余都为0

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

知道了乌龟的消息类型与控制节点我们可以直接使用命令来控制乌龟的运动

rostopic pub /turtle1/cmd_ geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0

当然我们不想要这样,还可以通过python代码的方式来实现这段功能

import rospy

from geometry_msgs.msg import Twist

rospy.init_node("twist_pub")

pub=rospy.Publisher("/turtle1/cmd_vel",Twist,

queue_size=10)

rate=rospy.Rate(10)

twist=Twist()

twist.linear.x=1

twist.angular.z=1

while not rospy.is_shutdown():

    pub.publish(twist)

    rate.sleep()

这段代码创建了一个节点 twist_pub,实例化消息对象为twist,将其中的值设置后调用pub.publish发出即可。与之前所讲的没有什么差别。
引用msg消息时格式为:主消息包.msg/Twist
接下来,乌龟就会进行一个圆周运动。

1.话题订阅

实时订阅乌龟的位姿信息
先查看下当前话题下有什么话题与这个功能相关

rostopic list

会找到一个这样的话题 turtle1/pose,很明显,其就为发布乌龟位姿的话题。
我们可以直接订阅来看看

rostopic echo /turtle1/pose

就会在屏幕上显示出来乌龟的实时位姿。 说明我们找的方向是没有错的

接下来就是看看他的消息类型与消息内容了

rostopic info /turtle1/pose 

其消息类型为:turtlesim/Pose

rosmsg show turtlesim/Pose

其由五个数据组成

float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity

接下来就是编写接收方节点即可

import rospy

from turtlesim.msg import Pose

def doMsg(msg):

    rate.sleep()

    rospy.loginfo("乌龟x:%fm乌龟y:%f,乌龟角度:%f,乌龟线速度:%f,乌龟角速度:%f",msg.x,msg.y,msg.theta,msg.linear_velocity,msg.angular_velocity)

rospy.init_node("sub_turtle")

sub=rospy.Subscriber("turtle1/pose",Pose,
queue_size=10,callback=doMsg)

rate=rospy.Rate(1)

rospy.spin()

2.服务调用

利用代码生成新的乌龟
首先先查看下当前的服务列表。

rosservice list

会出现一个 /spawn 的节点其中文翻译为产卵,所以很明显就是我们需要的service

利用

rosservice type /spawn

查看下其srv类型 为: turtlesim/Spawn
在查看下具体参数

rossrv show turtlesim/Spawn

传入参数为坐标与名字,服务器返回值为名字

float32 x
float32 y
float32 theta
string name
---
string name

我们直接进行调用试试

rosservice call /spawn "x: 0.0 
y: 4.0
theta: 0.0
name: 'dsa'" 
name: "dsa"

成功出现了新的一只小乌龟
【ROS】服务通信、话题通信的应用

接下来看看代码如何编写

import rospy

from turtlesim.srv import *

rospy.init_node("tospawn")

client=rospy.ServiceProxy("/spawn",Spawn)

request=SpawnRequest()

request.x=5

request.y=4

request.theta=50

request.name="dfg"

#client.wait_for_service()
rospy.wait_for_service("spawn")

try:
    response=client.call(request)

    rospy.loginfo("乌龟的名字%s",response.name)

except:

    rospy.loginfo("异常")

3.话题通信与服务通信的比较

  1. Topic:多对多,异步,适用于连续高频发布消息与接受:雷达等

  2. Service: 一(service)对多,同步,适用于偶尔调用的某一特定功能:拍照等文章来源地址https://www.toymoban.com/news/detail-462414.html

到了这里,关于【ROS】服务通信、话题通信的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS通信机制之话题(Topics)的发布与订阅以及自定义消息的实现

    我们知道在 ROS 中,由很多互不相干的节点组成了一个复杂的系统,单个的节点看起来是没起什么作用,但是节点之间进行了通信之后,相互之间能够交互信息和数据的时候,就变得很有意思了。 节点之间进行通信的一个常用方法就是使用 话题(topic) ,话题表示的是一个定义

    2024年02月11日
    浏览(36)
  • 【vue3】前端应用中使用WebSocket与服务器进行通信并管理连接状态。

    1、写一个hook函数 url 是WebSocket的服务器地址,其中 Math.random() 用于生成一个随机数,以避免缓存问题。 onConnected 、 onDisconnected 和 onError 是连接建立、断开和出错时的回调函数,你可以根据实际需求来定义它们。 onMessageDefault 是当接收到消息时的默认处理函数,在这里将接收

    2024年02月09日
    浏览(59)
  • 无需服务器:Android 应用中使用 P2P 技术进行局域网内设备通信

    随着局域网内设备数量的不断增加和不断演化的 IoT 技术,设备之间的互联变得越来越重要。对于许多 Android 应用程序而言,这样的互联性是必不可少的,需要使用一些技术来实现跨设备的通信。P2P 技术(点对点技术)已证明是一种非常成功的通信技术,可以实现在局域网内

    2024年02月14日
    浏览(38)
  • Golang TCP/IP服务器/客户端应用程序,设计一个简单可靠帧传送通信协议。(并且正确处理基于流式控制协议,带来的应用层沾帧[沾包]问题)

    在 Golang 语言标准库之中提供了,对于TCP/IP链接、侦听器的高级封装支持,这易于上层开发人员轻松基于这些BCL(基础类库)实现期望的功能。 TCP/IP链接(客户端) net.Conn 接口 TCP/IP侦听器(服务器) net.Listener Golang 提供了易用的写入数据到远程(对端)实现,而不比像 C/C

    2024年01月24日
    浏览(59)
  • 移远通信携手MIKROE推出搭载LC29H系列模组的Click boards开发板,为物联网应用带来高精定位服务

    近日,移远通信与MikroElektronika(以下简称“MIKROE”)展开合作,基于移远LC29H系列模组推出了多款支持实时动态载波相位差分技术(RTK)和惯性导航(DR)技术的 Click Boards™ 开发板,为物联网设备带来使用简单、性价比高的厘米级高精定位服务。 开发板上搭载的LC29H是一系列

    2024年02月08日
    浏览(45)
  • ROS:古月居第一次作业(话题与服务编程、动作编程、TF编程)

    话题与服务编程:通过代码新生一只海龟,放置在(5,5)点,命名为“turtle2”;通过代码订阅turtle2的实时位置并打印在终端;控制turtle2实现旋转运动; demo_turtle.launch demo_turtle.cpp CMakeList.txt 运行: 结果: 动作编程:客户端发送一个运动目标,模拟机器人运动到目标位置的过

    2024年02月07日
    浏览(45)
  • Tomcat 应用服务 WEB服务

    简述: 目前来说IBM的 WebSphere ,Oracle的 Weblogic 占据了市场上Java语言Web站点的部分份额,该两种软件由于无与伦比的性能及可靠性等优势被广泛应用于大型互联网公司的Web场景中,但是其高昂的价格也使得中小型互联网公司对此望而却步。 Tomcat自5.x版本以来,其性能上已经得

    2024年02月13日
    浏览(38)
  • 【tomcat】应用服务

    准备环境 三台虚拟机 192.168.1.120 192.168.1.122 192.168.1.131 三台虚拟机关闭防火墙 、查看光盘 、检测yun创库 查看JDK是否安装 [root@localhost ~]# java -version openjdk version \\\"1.8.0_161\\\" //这是系统自带的rpm方式安装 OpenJDK Runtime Environment (build 1.8.0_161-b14) OpenJDK 64-Bit Server VM (build 25.161-b14, mixed

    2024年02月12日
    浏览(36)
  • 服务网关Gateway_微服务中的应用

    没有服务网关 问题: 地址太多 安全性 管理问题 为什么要使用服务网关 网关是微服务架构中不可或缺的部分。使用网关后,客户端和微服务之间的网络结构如下。 注意: 网关统一向外部系统(如访问者、服务)提供REST API。在SpringCloud 中,使用Zuul、Spring Cloud Gateway等作为

    2024年02月07日
    浏览(44)
  • ROS学习——通信机制(服务通信)

     2.2.3 服务通信自定义srv调用A(C++) · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程    068服务通信(C++)3_客户端优化_Chapter2-ROS通信机制_哔哩哔哩_bilibili 服务通信也是ROS中一种极其常用的通信模式,服务通信是基于 请求响应 模式的,是一种应答机制。也即: 一个节点

    2024年02月08日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包