# Deterministic replay and debugging

EDIT: Reposted here, with some responses.

I need to build a ROS system that can log its inputs and node communication such that all calculations can be reproduced exactly during analysis later. The system needs to have two modes:

### Operation

• The system is in control of the physical robot
• All sensor data is recorded
• Sufficient data about the timing and data dependencies between the nodes is recorded.

### Analysis

• The system is not connected to the physical robot
• The recorded sensor data is replayed to the system
• The relative timings and data dependencies between the nodes are preserved. This means other nodes may have to idle if one node is paused in a debugger.

For example there may be a system with this topology A --[/x]--> B --[/y]--> C where A,B,C are nodes and x,y are topics. All three nodes are implemented with a polling loop (using ros::Rate and ros::spinOnce).

During analysis the node B is stopped in a debugger. Now A needs to pause because otherwise the topic queue x would overflow and messages would be dropped that were not dropped during operation. Same with C: It needs to pause because it is not getting the messages from B that it did get during operation.

This seems like a standard problem, yet I cannot find anything in the ROS ecosystem that addresses this.

I have some ideas for developing this myself, but I'd rather use an existing solution.

rosbag appears to be unsuitable: The limitations of rosbag record/play

edit retag close merge delete