概述
ROS 2为任何订阅所接收的消息提供综合统计功能。这允许用户收集订阅统计信息,同时可以更好地描述系统的性能或帮助诊断当前问题。
按照接收到的消息耗时和周期提供相关度量标准。对于每一项数据,本功能提供平均值、最大值、最小值、标准偏差和样本计数等统计数据。 这些统计数据是在一个移动窗口中计算的。
如何计算统计数据
统计功能使用固定内存在固定周期内通过libstatistics_collector包中的工具加以计算。每个新消息的接收将会被作为现在度量窗口的新样本。
统计数据种类
- 接收消息的间隔时间
- 单位:毫秒
- 使用系统时钟计算接收到的两条消息间的间隔时间
- 接受消息的传播耗时
- 单位:毫秒
- 要求消息在报头字段中填充时间戳,以便计算单条消息从发布端发送到达消息接收端的耗时
行为
主题的统计默认是不启用的。需要通过订阅配置选项,为特定节点启用此功能,才能收集上述相关的统计数据。
数据以statistics_msg/msg/MetricsMessage的形式发布到一个可配置的主题(默认为1秒发送至/statistics)。
注意
发布周期也将作为样本采集用的窗口周期。
为了采集消息的间隔时间,我们在消息报头字段中加入了消息时间戳,因此我们有时需要空数据以保持消息间隔的一致性。如果没有在消息中找到相关的时间戳,所有的统计值都会是NaN。通过发布空数据而不是不进行消息发布,我们就可以避免信号缺失,并明确表示该数值无法被测定。
每个窗口的第一个样本不进行测定,因为要计算统计信息,我们至少需要知道前一个消息的到达时间。
同ROS 1的比较
类似于ROS 1的话题统计,所有消息耗时和消息间隔都会被计算,从发送端开始计算。其他的ROS 1指标例如丢失的消息数量或流量,目前没有提供。
支持
本功能现在仅在ROS 2 Foxy版本C++库rclcpp
中支持。未来的支持计划可参照以下issue3。