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>
- 现在让我们通过roslaunch命令来启动launch文件
roslaunch beginner_tutorials turtlemimic.launch
- 然后在一个新终端中使用rostopic命令发射速度设定消息
rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
- 你会看到两个turtlesims会同时开始移动,虽然发布命令只是给turtlesim1发送了速度设定消息。
- 我们也可以通过rqt_graph来更好的理解在launch文件中所做的事情。运行rqt并在主窗口中选择rqt_graph:或者直接运行:rqt_graph
创建ROS消息和ROS服务
消息(msg)和服务(srv)介绍
消息(msg)
- 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码
- 服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应
- msg文件存放在package的msg目录下,srv文件则存放在srv目录下
- msg文件实际上就是每行声明一个数据类型和变量名
- srv文件分为请求和响应两部分,由’—’分隔。下面是srv的一个样例
int64 A
int64 B
---
int64 Sum
- 其中 A 和 B 是请求, 而Sum 是响应
- 创建一个 msg和使用rosmsg参考
服务(srv)介绍