Intermittently in preparation for the 2013 SRR I experimented with a Phidgets 1042 motion sensor. It is a compass, accelerometer, and gyroscope with a USB interface. You can program it to report the sensor data at various intervals from 4 ms to 100s of msec. I found numerous C++ routines for combining the accelerometer and gyro data but for some reason never got them to work satisfactorily in calculating yaw.
The testing I did used a servo to move the sensor by swinging it on an arm or rotating it on the servo horn. This provided a repeatable movement, within the limits of the servo precision.
The problem with measuring yaw is the lack of an absolute reference. Tilt and roll are more accurately measured since gravity provides the absolute reference that is lacking with yaw. In other words, yaw is difficult to measure because it is a rotation around the gravity vector.
Both the accelerometer and the gyro are subject to various noise and drift problems. Fortunately, these perturbances can be canceled out when combining the inputs properly. Unfortunately, the accelerometer provides little or no input during a yaw and cannot be used to compensate for the gyro perturbances.