ROS node,topic,services的理解

简介

相信到目前为止,大家已经有接触过这几个名词了,那他们分别是什么,又有什么关系,这里帮大家梳理一下。

ros node

中文说法叫ros节点,实际上就是ros的应用程序,而不同ros节点之间通过rostopic和rosservice进行通信。我们以小乌龟教程举例,首先使用rosnode list查看当前的节点
在这里插入图片描述

比如这里的节点/turtlesim功能就是模拟小乌龟的应用程序
可以使用指令 rosrun <包名> <节点名> 运行ros节点,举例运行小乌龟教程

rosrun turtlesim turtlesim_node

rostopic

中文名叫ros话题,ros话题的操作方式有发布(pub)和订阅(subscribe),rostopic的主要用途是不同节点之间的通信,以小乌龟教程举例,/turtlesim节点会把小乌龟的速度,外观等数据通过topic发布出去,其他应用节点就可以订阅使用。

使用指令

rostopic list

可以列举出机器人当前发布的topic列表:
在这里插入图片描述
先使用指令发布一个topic让小乌龟动起来

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

常用指令如下

rostopic echo <topic name>		# 查看topic实时数据
rostopic type <topic name>		# 查看topic的数据类型,订阅topic的时候需要使用
rostopic hz <topic name>		# 查看topic的发布频率
rostopic pub [topic] [msg_type] [args]  # 发布rostopic
osmsg show <type>				# 查看topic数据的具体格式

以/turtlesim节点发布的topic:/turtle1/cmd_vel举例指令使用结果如下:

sz-0203014018:~$ rostopic echo /turtle1/cmd_vel
linear: 
  x: 2.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: -1.8
---

这里最后的横线,是一次topic内容的结束分隔符,这个topic主要发布了小乌龟的线速度,角速度信息

@sz-0203014018:~$ rostopic hz /turtle1/cmd_vel
subscribed to [/turtle1/cmd_vel]
no new messages
average rate: 1.000
	min: 1.000s max: 1.000s std dev: 0.00000s window: 2
average rate: 1.000
	min: 1.000s max: 1.000s std dev: 0.00008s window: 3
average rate: 1.000
	min: 1.000s max: 1.000s std dev: 0.00011s window: 4
average rate: 1.000      

这里可以看出topic的发布平均频率是1hz,当然这里也包含了最小最大频率等其他信息

narwal@sz-0203014018:~$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist
narwal@sz-0203014018:~$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

这里使用rostopic type获取到topic: /turtle1/cmd_vel的数据类型是 geometry_msgs/Twist
这里进一步使用了指令 rosmsg show geometry_msgs/Twist 查看了该数据类型的具体格式,上面最开始发布的指令就是依据这个格式来发布的

rosservice

中文名叫ros服务,是ros节点之间通信的另一种方式,ros服务的常用操作是请求(request)和响应(response),一些不需要频繁对其他节点广播的信息,或者一些控制指令,可以使用rosservice通信来实现,这是使用topic和service的主要区别。

使用指令

rosservice list

可以列举当前发布的service列表,service比较多,截图如下:
在这里插入图片描述

常用指令如下

rosservice call <service name>	<param>	  # 请求service
rosservice type <service  name>		# 查看service 的数据类型,请求service 的时候需要使用
rossrv show <type>								# 查看数据类型的具体格式

以 节点发布的service :/turtle1/set_pen 举例指令使用结果如下:

narwal@sz-0203014018:~$ rosservice type /turtle1/set_pen
turtlesim/SetPen
narwal@sz-0203014018:~$ rossrv show turtlesim/SetPen
uint8 r
uint8 g
uint8 b
uint8 width
uint8 off
---

narwal@sz-0203014018:~$ rosservice call /turtle1/set_pen -- 255 0 0 1 off

这里先用type指令获取了service的数据类型,再使用rossrv show指令获取了数据格式,最后给rosservice call指令传入数据,就改变了小乌龟的路径显示效果

结语

至此详细大家对rosnode,topic,service有了更清晰的认识,希望大家可以继续深入学习,共勉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩转智能机器人

但行好事,莫问前程,日拱一卒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值