# 7.2 使用rosservice

rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令，如下所示：

使用方法:

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

## 7.2.1 rosservice list

```
$ 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.

```
/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
```

我们使用rosservice type命令更进一步查看clear服务:

## 7.2.2 rosservice type

使用方法:

```
rosservice type [service]
```

我们来看看clear服务的类型:

```
$ rosservice type clear
```

```
std_srvs/Empty
```

服务的类型为空（empty),这表明在调用这个服务是不需要参数（比如，请求不需要发送数据，响应也没有数据）。下面我们使用rosservice call命令调用服务：

## 7.2.3 rosservice call

使用方法:

```
rosservice call [service] [args]
```

因为服务类型是空，所以进行无参数调用：

```
$ rosservice call clear
```

正如我们所期待的，服务清除了turtlesim\_node的背景上的轨迹。 通过查看再生（spawn）服务的信息，我们来了解带参数的服务:

```
$ rosservice type spawn| rossrv show
```

```
float32 x
float32 y
float32 theta
string name
---
string name
```

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

```
$ rosservice call spawn 2 2 0.2 ""
```

服务返回了新产生的乌龟的名字：

```
name: turtle2
```

现在我们的可以看到２只乌龟
