ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数
ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数
我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo
1. 理解 ROS 服务 和 ROS 参数:
服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
( 节点之间通讯的方式 : 话题(rostopic) 和 服务(rosservice) )
我们先来启动一个小海龟节点: ( 开3个终端,分别运行下面三个命令 )
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
2. rosservice
: ROS 服务命令
2.1 list
:
我们使用下面的命令来看一下当前有哪些服务在运行: (重新开一个终端(Ctrl+Alt+T))
$ rosservice list
输出:
/clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level
如果你没事先执行
roscore命令来启动/rosout主节点,那么当你执行rosservice list命令,会输出下面的提示信息:ERROR: Unable to communicate with master!你需要先执行
roscore命令。
2.2 type
:
很多服务在运行:我们来看看
/clear这个服务的类型:
$ rosservice type /clear
输出:
std_srvs/Empty
服务的类型为空(
std_srvs/Empty)。这个
std_srvs/Empty是ROS系统自定义的一个变量类型或者说是一个结构体。我们如何查看这个
std_srvs/Empty内究竟是什么:
$ rosmsg show std_msgs/Empty
std_srvs/Empty这个变量类型里面什么都没有,表示你在调用
/clear服务时,不需要参数。 什么意思呢,下面举个例子:
2.3 call
:
第一个例子: 清空小海龟窗口背景里的运行轨迹:
我们使用
rosservice call命令来调用服务:
$ rosservice call [服务名] [需要的参数]
我们来调用上面的
/clear这个服务:(因为
/clear这个服务的类型是
std_srvs/Empty(空),所以对于
/clear这个服务,不需要参数)
$ rosservice call /clear
调用之后,回去看一看小海龟窗口的背景里的运行轨迹都没有了。 (如果你之前使用方向键让小海龟移动过。)
再来一个例子:再生一个小海龟
我们来看看再生(
/spawn)这个服务:
先看看调用这个服务需要什么参数:。执行下面的组合命令:
$ rosservice type /spawn | rossrv show
输出:
float32 x float32 y float32 theta string name --- string name
现在知道调用
/spawn服务需要什么参数,我们就来再产生一个小海龟: (如果你将
nane设为
""(空),那么系统会自动生成一个新名字)
$ rosservice call /spawn 2 2 0.2 ""
这时,服务返回了新产生的乌龟的名字(“turtle2”)。 新产生的乌龟,如下图:
3. rosparam
: ROS 参数命令 :
下面再介绍一个命令:
rosparam参数服务器
使用方法和上面的命令(
rosservice)都类似:
3.1 list
:
先来看一下,当前 ROS 里面有哪些参数 :
$ rosparam list
3.2 set
,get
:
3.2.1 set
:
$ rosparam set [参数名] $ rosparam get [参数名]
如何使用,举例说明:
比如现在我改变小海龟窗口背景的颜色:
$ rosparam set /background_r 150
现在还是小海龟窗口的背景颜色不会改变的, 你必须要先 clear 一下:
$ rosservice call /clear
3.2.2 get
:
我们使用get关键字 来得到当前参数的信息:
$ rosparam get /background_r
得到全部参数的信息:
$ rosparam get /
小结:
因为一个ROS机器人的启动,等同于要启动多个节点程序。也就是说,我们每次想使用键盘的方向键控制小海龟时,我们必须在3个终端中启动3个节点:
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
这样做很麻烦,我们可不可以写一个脚本程序,将我们要运行的命令都写在一个启动脚本程序中,这样,每当我们想启动一个机器人的时候,就不需要记住一堆启动节点的命令,我们直接运行这个启动脚本程序,就可以了。所以我们下一节讲: 如何编写一个简单的启动脚本程序。
- ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数
- ROS Learning-012 beginner_Tutorials (编程) 创建自定义的ROS消息和ROS服务
- ROS Learning-012 beginner_Tutorials (编程) 创建自定义的ROS消息和ROS服务
- ROS Learning-008 beginner_Tutorials ROS话题
- ROS Learning-008 beginner_Tutorials ROS话题
- ROS Learning-004 beginner_Tutorials 介绍简单的ROS命令
- ROS Learning-004 beginner_Tutorials 介绍简单的ROS命令
- ROS Learning-005 beginner_Tutorials 创建ROS程序包(就是软件包)
- ROS Learning-005 beginner_Tutorials 创建ROS程序包(就是软件包)
- ROS Learning-006 beginner_Tutorials 编译ROS程序包
- ROS Learning-006 beginner_Tutorials 编译ROS程序包
- ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)
- ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)
- ROS Learning-007 beginner_Tutorials ROS节点
- ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
- ROS Learning-002 beginner_Tutorials 如何添加ROS环境变量 和 如何更新ROS源代码
- ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
- ROS Learning-002 beginner_Tutorials 如何添加ROS环境变量 和 如何更新ROS源代码
- 关于roscd的roscd: No such package/stack 'beginner_tutorials'
- ROS Learning-003 beginner_Tutorials 创建ROS工作空间