关于话题统计

概述

ROS 2为任何订阅者收到的消息提供了统计信息的集成度量。允许用户收集订阅者统计信息使他们能够表征其系统的性能或帮助诊断任何当前问题。 [Alyssa@10248]

所提供的测量是接收到的消息年龄和接收到的消息周期。对于每次测量,所提供的统计数据包括平均值、最大值、最小值、标准差和样本数量。这些统计数据是在移动窗口中计算的。 [Alyssa@10249]

如何计算统计数据

通过使用 libstatistics_collector 包中实现的实用程序,在恒定时间和恒定内存中计算每个统计集。当订阅者收到新消息时,这是用于在当前测量窗口中计算的新样本。计算的平均值仅仅是 移动平均值(moving average) 。最大、最小和样本数量在收到每个新样本后更新,而标准偏差使用 Welford's online algorithm 计算。 [Alyssa@10251]

计算的统计信息类型

  • 接收的消息周期 [Alyssa@10253]

    • 单位: 毫秒

    • 使用系统时钟测量接收到的消息之间的时间间隔 [Alyssa@10255]

  • 收到的消息年龄 [待校准@10256]

    • 单位: 毫秒

    • 要求消息在头字段中填充时间戳,以便计算从发布者发送的消息的年龄。 [Alyssa@10257]

行为

默认情况下,话题统计测量不启用。通过订阅者配置选项为特定节点启用此功能后,将为该特定订阅者启用接收消息年龄和接收消息周期测量功能。 [Alyssa@10259]

数据以 statistics_msg/msg/MetricsMessage 作为消息类型,以一个可配置的周期 (默认1秒) 发布到一个可配置话题 (默认 /statistics )。请注意,发布周期也用作样本收集窗口周期。 [Alyssa@10260]

由于接收到的消息周期需要头字段中的消息时间戳,因此将发布空数据。也就是说,如果未找到时间戳,则所有统计值均为NaN。发布NaN值而不是根本不发布避免了信号问题的缺失,并且旨在明确表明无法进行测量。 [Alyssa@10261]

接收到的消息周期统计的每个窗口的第一个样本不会产生测量。这是因为计算这一统计数据需要知道前一条消息到达的时间,因此窗口中的后续样本会产生测量值。 [Alyssa@10262]

与ROS 1的比较

与ROS 1 话题统计(Topic Statistics) 相似,消息年龄和消息周期都是从订阅端计算的。目前不提供其他ROS 1指标,例如丢弃消息的数量或流量。 [Alyssa@10263]

支持

目前,在ROS 2Foxy 中仅C++ 客户端 (rclcpp) 支持此功能。未来的工作和改进,如Python支持,可以在 这里 找到。 [Alyssa@10265]