使用命令行工具进行自省

ROS 2 包含一套用于自检 ROS 2 系统的命令行工具。

用法

工具的主要入口点是命令“ros2”,它本身有各种子命令,用于自省和处理节点、主题、服务等。

要查看所有可用的子命令,请运行:

ros2 --help

可用的子命令示例包括:

  • action: Introspect/interact with ROS actions

  • bag: Record/play a rosbag

  • component: Manage component containers

  • daemon: Introspect/configure the ROS 2 daemon

  • doctor: Check ROS setup for potential issues

  • interface: Show information about ROS interfaces

  • launch: Run/introspect a launch file

  • lifecycle: Introspect/manage nodes with managed lifecycles

  • multicast: Multicast debugging commands

  • node: Introspect ROS nodes

  • param: Introspect/configure parameters on a node

  • pkg: Introspect ROS packages

  • run: Run ROS nodes

  • security: Configure security settings

  • service: Introspect/call ROS services

  • test: Run a ROS launch test

  • topic: Introspect/publish ROS topics

  • trace: Tracing tools to get information on ROS nodes execution (only available on Linux)

  • wtf: An alias for doctor

示例

要使用命令行工具生成典型的 talker-listener 示例,可以使用 topic 子命令发布和回显有关主题的消息。

使用以下命令在一个终端中发布消息:

$ ros2 topic pub /chatter std_msgs/msg/String "data: Hello world"
publisher: beginning loop
publishing #1: std_msgs.msg.String(data='Hello world')

publishing #2: std_msgs.msg.String(data='Hello world')

使用以下命令在另一个终端中回显收到的消息:

$ ros2 topic echo /chatter
data: Hello world

data: Hello world

幕后

ROS 2 使用分布式发现过程让节点相互连接。 由于此过程有意不使用集中式发现机制,因此 ROS 节点可能需要一些时间才能发现 ROS 图中所有其他参与者。 因此,后台有一个长期运行的守护进程,用于存储有关 ROS 图的信息,以便更快地响应查询,例如节点名称列表。

首次使用相关命令行工具时,守护进程会自动启动。 您可以运行“ros2 daemon –help”以获取更多与守护进程交互的选项。

实施

“ros2”命令的源代码可在 https://github.com/ros2/ros2cli 上找到。

“ros2”工具已实现为可通过插件扩展的框架。 例如,sros2 包提供了一个 security 子命令,如果安装了 sros2 包,该子命令会被 ros2 工具自动检测到。