1. A method for controlling a robot, comprising: receiving, from a robot controller software module, a robot-independent software command that is independent of the robot's hardware capabilities, wherein the robot-independent software command includes an absolute starting time that indicates when to execute the robot-independent software command based on a clock; determining a first configurable time period based on the absolute starting time; waiting for the first configurable time period to elapse; determining by a processor, after the first configurable time period has elapsed, a robot-dependent software command that is not independent of the robot's hardware capabilities based on the robot-independent software command; sending, to a robot driver software module, the robot-dependent software command; receiving, from the robot driver software module, a first reply; waiting for a second configurable time period to elapse; determining, after the second configurable time period has elapsed, a second reply based on the first reply; and sending, to the robot controller software module, the second reply.