Robot Data Transmission and Processing Times
From MobileRobots Research and Academic Customer Support
How soon after sending a motion command will it take effect on the robot? How soon will my client recieve a SIP?
If you send a command from Aria using an ArAction object, or using a the motion command functions such as ArRobot::transVel() or ArRobot::setTransAccel(), then the command is sent to the robot platform by the next invocation of the State Reflection tasks in ArRobot's synchronized task cycle. At most this will normally be within 100ms, unless one of the tasks takes too long and delays the task cycle (or if the timing of the cycle has changed due to different SIP frequency or by disassociating the task cycle from SIP reception). See the Aria reference manual for discussion on the task cycle. If you send a command directly using ArRobot::comInt() or a similar direct-command method, however, it is sent immediately.
The robot firmware (e.g. ARCOS) stores recieved motion commands (such as SETV, SETA, SETRV, SETRA) and evaluates them shortly afterwards in a separate internal loop, at most about 10ms later.
Clients send and recieve packets by writing and reading from the serial port via the computer operating system, which may buffer the data. (Plus, it takes some short amount of time, approximately 1.6ms at 38,400 baud rate for a 10 byte command packet, for the packet to be transmitted from the computer's serial port interface to the robot microcontroller's serial port interface.) We don't have any firm estimates of operating system buffer latency, since it depends on conditions, but the buffers ought to be mostly empty most of the time; one of the purposes of ArRobot's task cycle is to read packets at a rate that matches ARCOS' sending rate, with one cycle per packet, reading the most recent packet. (If a the tasks in a cycle take too long, Aria prints a warning message.)
