Provide update rate with every Actuator/Sensor(/State?) in the .yaml file. Also specify the rate for each preprocessing node.
Then, we can
1) test that the simulation timestep is atleast smaller than 1/min(rate).
2) If the smalles timestep is a multiple of the simulation timestep, we can perform substeps to accelerate the simulation.
3) In the pb.step(), we check if the sensor/state buffers must be updated. If so, only toggle an update flag per sensor/state and untoggle it if the service is called. Only at that moment update the buffer.
4) Also create buffers on the physics_bridge side for the actions. According to the provided rates, we can infer whether we must update the stored action value in the buffer by calling the RosEnv action_srvs, or if we can reuse a previously stored action.