【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/
目录
相关文章
|
6天前
ROS 2 - Gazebo 通信入门教程
ROS 2 - Gazebo 通信入门教程
11 0
|
1月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
2月前
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
39 1
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
|
2月前
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
Flowise 是一个开源低代码平台,用于构建定制化的 LLM 流程和 AI 代理。阿里云的 Resource Orchestration Service (ROS) 提供了一键部署 Flowise 到 ECS 实例的方案。用户只需在 ROS 控制台配置模板参数,如可用区和实例类型,即可完成部署。部署后,从资源栈输出获取 Flowise 服务地址以开始使用。ROS 模板定义了 VPC、ECS 实例等资源,并通过 ROS 自动化部署,简化了云上资源和应用的管理。
201 1
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
|
3月前
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 应用开发平台 Dify
Dify是一款开源的LLM应用开发平台,融合BaaS和LLMOps理念,助力开发者快速构建生产级AI应用。阿里云的ROS提供IaC自动化部署服务,通过JSON/YAML/Terraform模板轻松部署Dify环境。以下是简化的部署步骤: 1. 登录ROS控制台的Dify部署页面。 2. 配置ECS实例参数。 3. 创建资源栈,完成部署后从输出获取Dify服务地址。 ROS模板定义了VPC、VSwitch、ECS实例等资源,通过ROS控制台创建资源栈实现自动化部署。这种方式高效、稳定,体现了IaC的最佳实践。
542 1
|
3月前
|
弹性计算 持续交付 数据中心
一键云部署:ROS的Terraform托管服务助你轻松上线2048经典游戏
阿里云的资源编排服务ROS提供了Terraform托管能力,用户可以直接在ROS控制台上部署Terraform脚本,本文将详细介绍如何使用ROS的Terraform托管服务一键部署经典的2048小游戏到云端,让全世界的玩家都能在线体验。
215 1
|
3月前
|
机器人 Python Windows
ROS机器人编程技术应用与实践
ROS机器人编程技术应用与实践
50 1
|
3月前
|
机器人 Unix C++
ROS机器人编程技术架构命令应用
ROS机器人编程技术架构命令应用
49 1
|
3月前
|
弹性计算 关系型数据库 API
ECS安装问题之安装资源编排服务(ROS)如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
3月前
|
机器人 C++ Python
[ROS2] --- 通信接口
[ROS2] --- 通信接口
[ROS2] --- 通信接口

推荐镜像

更多