Because of the need for pure "C" functions, there are two sets of lower level "hardware" layer includes. The C++ version is found in the include directory (Motorobots standard tpu_regs.h, qsm_regs, etc.) and the pure "C" versions are found in the src directory (tpu.reg.h, qsm.reg.h, etc.). This ensures that the pure "C" versions are not available for normal use as they usually will not be in the path.
Why so many? Good question, it seems certain orientations are easier at the local level, for instance the oServo seen in isolation make sense from left 0 degrees to right 180 degrees. The problem is when combining, care must be taken to translate the orientation. Orientation synchronization will be looked into at a later time.
With the X axis chosen, the positive Y axis is now found by traveling 90 degrees counterclockwise from the positive X axis.

The servo center at 90 degrees; left most position (counterclockwise) is 0 degrees and rightmost position is 180 degrees.
Servo Coordinate System
The IR_Base 0 degree position is looking straight forward and increases counterclockwise; unfortunately this is opposite of a true compass. Also, the servo turret-like functionality from the sensorbase from which the IR_base is derived assumes the sensor is mounted in the center of the servo.
IR_base Coordinate System