您正在阅读的是开发版本的文档。有关最新发布的版本,请访问 Jazzy.

专题统计

概述

ROS 2 提供了对任何订阅接收到的信息进行统计的综合测量功能。允许用户收集订阅统计信息,使他们能够确定其系统的性能特征,或帮助诊断任何现有问题。

提供的测量值包括接收信息年龄和接收信息周期。对于每个测量值,提供的统计数据包括平均值、最大值、最小值、标准偏差和样本数。这些统计数据是在移动窗口中计算的。

如何计算统计数据

每个统计集的计算都是在恒定时间和恒定内存内进行的,计算方法是使用 libstatistics_collector 包。当订阅收到新信息时,这就是当前测量窗口中的一个新计算样本。计算出的平均值只是一个 移动平均.最大值、最小值和样本数会在收到每个新样本时更新,而标准偏差的计算方法是 维尔福的在线算法.

计算的统计数据类型

  • 接收信息时间

    • 单位:毫秒

    • 使用系统时钟测量接收信息的间隔时间

  • 接收信息的年龄

    • 单位:毫秒

    • 要求在报文标题字段中填入时间戳,以便计算从发布者发送的报文的年龄

行为

默认情况下,不启用主题统计测量功能。通过订阅配置选项为特定节点启用此功能后,该特定订阅的接收信息年龄和接收信息周期测量都将启用。

数据以 statistics_msg/msg/MetricsMessage 在可配置的周期(默认值为 1 秒)内,向可配置的主题(默认值为 2 秒)发送信息。 /统计).请注意,发布期也是样本收集窗口期。

由于接收报文期间需要在报文头字段中输入报文时间戳,因此会发布空数据。也就是说,如果找不到时间戳,所有统计值都是 NaN。公布 NaN 值而不是完全不公布,可以避免没有信号的问题,并明确表明无法进行测量。

每个窗口中第一个样本的接收报文周期统计量不产生测量值。这是因为计算该统计量需要知道上一条信息到达的时间,因此窗口中的后续采样会产生测量值。

与 ROS 1 的比较

与 ROS 1 相似 主题统计在 ROS 1 中,信息年龄和信息周期都是通过订阅端计算的。目前还没有提供其他 ROS 1 指标,例如丢弃信息的数量或流量。

支持

ROS 2 Foxy 目前仅支持 C++ (rclcpp)。未来的工作和改进,如对 Python 的支持,请参见 这里.