主题统计
概述
ROS 2 为任何订阅收到的消息提供综合的统计数据测量。 允许用户收集订阅统计数据使他们能够描述系统的性能或帮助诊断任何当前问题。
提供的测量结果是接收消息的年龄和接收消息的周期。 对于每个测量,提供的统计数据是平均值、最大值、最小值、标准偏差和样本数。 这些统计数据是在移动窗口中计算的。
如何计算统计数据
每个统计集都是使用 libstatistics_collector 包中实现的实用程序在恒定时间和恒定内存中计算的。 当订阅收到新消息时,这是当前测量窗口中计算的新样本。 计算出的平均值只是一个 移动平均值。 收到每个新样本后,最大值、最小值和样本计数都会更新,而标准偏差则使用 Welford 在线算法 计算。
计算的统计数据类型
接收消息周期
单位:毫秒
使用系统时钟测量接收消息之间的周期
接收消息年龄
单位:毫秒
要求消息在标头字段中填充时间戳,以便计算从发布者发送的消息的年龄
行为
默认情况下,未启用主题统计测量。 通过订阅配置选项为特定节点启用此功能后,该特定订阅的接收消息年龄和接收消息周期测量均已启用。
数据以 statistics_msg/msg/MetricsMessage 的形式发布到可配置的主题(默认 /statistics
)中,周期为可配置的时间段(默认为 1 秒)。
请注意,发布周期也可用作样本收集窗口周期。
由于接收消息周期需要标头字段中的消息时间戳,因此会发布空数据。 也就是说,如果未找到时间戳,则所有统计值均为 NaN。 发布 NaN 值而不是完全不发布可避免信号问题的缺失,并旨在明确表明无法进行测量。
接收消息周期统计的每个窗口的第一个样本不会产生测量值。 这是因为计算此统计数据需要知道上一条消息到达的时间,因此窗口中的后续样本会产生测量值。
与 ROS 1 的比较
与 ROS 1 主题统计信息 类似,尽管是从订阅端计算的,但消息年龄和消息周期都是计算出来的。
目前不提供其他 ROS 1 指标,例如丢弃的消息数量或流量。
支持
此功能目前仅在 ROS 2 Foxy for C++ (rclcpp) 中受支持。
未来的工作和改进,例如 Python 支持,可以在 此处 找到。