3.3.1 检测节点、主题、服务和参数
坦白地讲,我们应该先回顾一下学习过的基本内容。如何获得正在运行的节点、主题、给定时间可用服务的清单,如下表所示。
获取所有列表 命令
运行的节点 rosnode list
所有节点运行的主题 rostopic list
所有节点运行的服务 rosservice list
服务器中的参数 rosparam list
我们建议你回顾第2章,熟悉如何使用这些命令,同时看一下如何使用rosmsg show获取特定主题和字段发出的消息类型。
所有这些命令可以结合bash命令,如grep,寻找所需的节点、主题、服务或参数。例如,启动目标主题可以使用以下命令:
bash命令grep在文件列表或标准输出中查找文本或模式,如本例所示。
此外,ROS提供几个GUI检测主题和服务。首先,在一个类似于进程表(ToP)窗口rqt_top中显示运行的节点,可以快速查看正在使用的所有节点和资源。以REEM导航栈运行仿真为例,如下图所示:
另一方面,rqt_topic显示主题调试信息,包括发布者、接收者、发布速率和发布的消息。可以查看消息字段的主题并选择你想要订阅的主题,分析带宽和速率(Hz)以及查看最新消息发布。注意锁定的主题通常不会持续发布,所以不会看到任何关于它们的信息。如下图
所示。
同样,rqt_publisher允许我们在一个接口管理rostopic pub命令的多个实例。它还支持Python发布消息和固定值的表达式。在下图中,我们看到发布了两个示例主题(我们将在两个不同的终端看到使用rostopic echo <topic>发布消息)。
另一种更灵活的GUI是rqt_ez_publisher。对ROS hydro而言,必须使用下面的代码从一个空的工作空间手动安装:
对ROS indigo而言,它将会作为一个Debian功能包,所以只需要运行下面命令:
然后,运行:
在example5节点运行时,你可以发布将被该节点读取的消息。在下图中,我们将选择accel和temp主题(删除accel/y和accel/z字段):
注意,当启用重复(repeat)后,消息会不断发布。否则,GUI只在你改变值时发布消息。
rqt_service_caller和rosservice call命令的多个实例一样。在下图中,我们将调用/move_base/NavfnROS/make_plan服务,我们必须为空服务设置请求。这对于来自/amcl节点的
/global_localization服务而言是不需要的。点击Call按钮之后,我们将获得响应消息。对于本例,我们运行导航栈的REEM仿真,如下图所示: