4.ROS节点,服务和参数

ROS节点

图概念概述

  • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
  • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
  • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
  • Master:节点管理器(主机),ROS名称服务 (比如帮助节点找到彼此)。
  • rosout: ROS中相当于stdout/stderr。
  • roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。

roscore

roscore 是你在运行所有ROS程序前首先要运行的命令。

1
roscore

使用rosnode

rosnode 显示当前运行的ROS节点信息。rosnode list 指令列出活跃的节点:

1
rosnode list

rosnode info 命令返回的是关于一个特定节点的信息。

1
rosnode info /rosout

使用 rosrun

rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。

1
2
rosrun turtlesim turtlesim_node
rosrun turtlesim turtlesim_node __name:=my_turtle //自定义package的命名

清除rosnode列表

1
rosnode cleanup

ROS服务和参数

ROS Services

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。

1
2
3
4
5
rosservice list         输出可用服务的信息
rosservice call 调用带参数的服务
rosservice type 输出服务类型
rosservice find 依据类型寻找服务find services by service type
rosservice uri 输出服务的ROSRPC uri

rosservice list

1
rosservice list

list 命令显示turtlesim节点提供了9个服务:重置(reset), 清除(clear), 再生(spawn), 终止(kill), turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, and turtlesim/set_logger_level. 同时还有另外两个rosout节点提供的服务: /rosout/get_loggers and /rosout/set_logger_level.

rosservice type

1
rosservice type clear

rosservice type

1
rosservice call clear

查看再生(spawn)服务的信息,我们来了解带参数的服务:

1
rosservice type spawn| rossrv show

这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。名字参数是可选的,这里我们不设具体的名字,让turtlesim自动创建一个。

1
rosservice call spawn 2 2 0.2 ""

Using rosparam

rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1 是整型, 1.0 是浮点型, one是字符串, true是布尔, [1, 2, 3]是整型列表, {a: b, c: d}是字典. rosparam有很多指令可以用来操作参数,如下所示:

1
2
3
4
5
6
rosparam set            设置参数
rosparam get 获取参数
rosparam load 从文件读取参数
rosparam dump 向文件中写入参数
rosparam delete 删除参数
rosparam list 列出参数名

rosparam list

1
rosparam list

返回:

1
2
3
4
5
6
7
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_ubuntu__57662
/rosversion
/run_id

rosparam set and rosparam get

1
2
3
4
rosparam set background_r 150
rosservice call clear
rosparam get background_g
rosparam get /

rosparam dump and rosparam load

1
2
3
rosparam dump params.yaml
rosparam load params.yaml catkin_ws
rosparam get catkin_ws/background_b