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

本文涉及的产品
资源编排,不限时长
简介: 现在可以直接使用键盘来控制乌龟运动了

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


服务通信、话题通信的应用


90e54daf9ced4d598c37bb6c0b9dbce8.jpg


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

0. 话题发布


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

首先,先启动 turtlesim这个节点


6b1019ae4c214ac49b8ab588b68213d0.png


rosrun turtlesim    turtlesim_node
rosrun turtlesim turtle_teleop_key


现在可以直接使用键盘来控制乌龟运动了

我们在另一个窗口查看下当前节点关系


rqt_graph

4af88f9733db4adb893d210ec37be606.png


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


rostopic info /turtle1/cmd_vel


可以得到该话题的消息类型为 geometry_msgs/Twist

查看下该消息类型具体有什么参数


rosmsg show geometry_msgs/Twist


其具有两类参数 linear、angular分别为角速度与线速度,对应xyz上的值


7b76fedee5c942c5a7b60379b951d6d3.png


因为乌龟是一个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"


成功出现了新的一只小乌龟


63d2c306c4d24a7ca5c26fde90ccc9de.png


接下来看看代码如何编写


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)对多,同步,适用于偶尔调用的某一特定功能:拍照等

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
2月前
|
弹性计算 持续交付 API
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
48 3
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
|
2月前
|
弹性计算 人工智能 持续交付
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
文章介绍了如何利用ROS和Terraform模板轻松自动化部署阿里云的Qwen-7B-Chat大语言模型服务,提高了部署效率与便捷性,是实现云资源和服务快速上线的最佳实践。
68 2
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
|
3月前
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
88 4
ROS2教程05 ROS2服务
|
3月前
|
传感器 算法 数据可视化
ROS2教程04 ROS2话题
这篇文章是关于ROS2(Robot Operating System 2)的教程,主要介绍了ROS2中话题的概念、特性、使用方式,以及如何编写发布者和订阅者的代码。
85 3
ROS2教程04 ROS2话题
|
3月前
|
机器人
ROS2教程 05 服务Service
本文是关于ROS2(机器人操作系统2)中服务(Service)机制的教程,介绍了服务与话题(Topic)的区别、ROS2服务的相关命令,包括列出服务、查找服务、获取服务类型和调用服务,并通过示例代码展示了如何创建服务端(Server)和客户端(Client),以及如何测试服务调用过程。
147 0
ROS2教程 05 服务Service
|
3月前
|
机器人
ROS2教程 04 话题Topic
本文是关于ROS2(机器人操作系统2)中话题(Topic)机制的教程,详细介绍了ROS2中话题的命令使用,包括列出、回显、发布、信息查询、类型查询等功能,并通过示例代码展示了如何创建发布者(Publisher)和订阅者(Subscriber)节点,以及如何测试发布-话题-订阅通信。
273 0
ROS2教程 04 话题Topic
|
3月前
|
XML 网络协议 机器人
ROS1 Noetic主从机通信使用详解
这篇文章详细介绍了在ROS1 Noetic环境下配置主从机通信的步骤,包括获取IP和主机名、设置`/etc/hosts`文件、配置ROS环境变量以及测试通信是否成功。同时,文章还提供了一些ROS环境变量的相关知识和参考资料链接。
80 0
|
5月前
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
69 1
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
|
4月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
5月前
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
Flowise 是一个开源低代码平台,用于构建定制化的 LLM 流程和 AI 代理。阿里云的 Resource Orchestration Service (ROS) 提供了一键部署 Flowise 到 ECS 实例的方案。用户只需在 ROS 控制台配置模板参数,如可用区和实例类型,即可完成部署。部署后,从资源栈输出获取 Flowise 服务地址以开始使用。ROS 模板定义了 VPC、ECS 实例等资源,并通过 ROS 自动化部署,简化了云上资源和应用的管理。
229 1
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise

推荐镜像

更多