ROS服务

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)  

使用 rosservice

rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令  
rosservice list         输出可用服务的信息
rosservice call         调用带参数的服务
rosservice type         输出服务类型
rosservice find         依据类型寻找服务find services by service type
rosservice uri          输出服务的ROSRPC uri
 

使用 rosparam

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

使用 rqt_console 和 roslaunch

rqt_console属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括 DEBUG、WARN、INFO和ERROR) 现在让我们来看一下turtlesim在rqt_console中的输出信息,同时在rqt_logger_level中修改日志等级。在启动turtlesim之前先在另外两个新终端中运行rqt_console和rqt_logger_level  
rosrun rqt_console rqt_console
rosrun rqt_logger_level rqt_logger_level
 

使用roslaunch

roslaunch可以用来启动定义在launch文件中的多个节点  
roslaunch [package] [filename.launch]
 

Launch 文件

 
 <launch>
   <group ns="turtlesim1">
      <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
   </group>
     <group ns="turtlesim2">
       <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
 </group>
 <node pkg="turtlesim" name="mimic" type="mimic">
      <remap from="input" to="turtlesim1/turtle1"/>
      <remap from="output" to="turtlesim2/turtle1"/>
   </node>
 </launch>
   
  1. 现在让我们通过roslaunch命令来启动launch文件
 
roslaunch beginner_tutorials turtlemimic.launch
 
  1. 然后在一个新终端中使用rostopic命令发射速度设定消息
rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
 
  1. 你会看到两个turtlesims会同时开始移动,虽然发布命令只是给turtlesim1发送了速度设定消息。
  1  
  1. 我们也可以通过rqt_graph来更好的理解在launch文件中所做的事情。运行rqt并在主窗口中选择rqt_graph:或者直接运行:rqt_graph
 

创建ROS消息和ROS服务

 
消息(msg)和服务(srv)介绍
 
消息(msg)
  1. 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码
  2. 服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应
  3. msg文件存放在package的msg目录下,srv文件则存放在srv目录下
  4. msg文件实际上就是每行声明一个数据类型和变量名
  5. srv文件分为请求和响应两部分,由’—'分隔。下面是srv的一个样例
 
int64 A
int64 B
---
int64 Sum
 
  1. 其中 A 和 B 是请求, 而Sum 是响应
  2. 创建一个 msg和使用rosmsg参考
服务(srv)介绍