Depends on a modified version of rmw_implementation
to provide topic statistics calculation within the RMW layer of each node, without having to instrument application code.
This component
- Wraps & intercepts some RMW API calls
- Calculates "published period" statistics for every Publisher
- Calculates "received period" statistics for every Subscription
- Calculates "take age" statistics for every Subscription
- This is the different between publish system timestamp and the time at which
rmw_take
is called, so is the sum of network latency plus executor latency
- This is the different between publish system timestamp and the time at which
- Creates a
/topic_statistics
Publisher for every Node and publishes to it periodically about the statistics from within the node
Key points:
- Requires no subscriptions, no extra copies, to do statistics on all topics
- Requires no modification to application code to use
Set the following environment variables before launching a node to configure topic statistics
- Required:
RMW_IMPLEMENTATION_WRAPPER=rmw_stats_shim
ROS_TOPIC_STATISTICS_WINDOW_SIZE
- how many messages to use in rolling buffer for stats (stores only timestamp information, not contents data)- Default:
50
- Default:
ROS_TOPIC_STATISTICS_TOPIC_NAME
- name of the topic to publish statistics on- Default:
/topic_statistics
- Default:
ROS_TOPIC_STATISTICS_PUBLISH_PERIOD
- Interval in seconds at which to periodically publish stats- Default:
1.0
- Default:
colcon build --packages-select rmw_implementation rmw_stats_shim
source install/setup.bash
export RMW_IMPLEMENTATION_WRAPPER=rmw_stats_shim
# run any ROS 2 node/launch/etc