From a control system perspective it really does not matter where you place your sensors. The most important thing is that you know where they actually are!!! I mean this with regards to knowing where the sensor is relative to the centre of the rotary wings. As long as you know the offsets you can apply translations to calculate what your vehicle is doing.
From an electrical and performance perspective away from motor wiring and h bridges, away from vibrations sources and suitably mounted and damped. The dampening is important for the accelerometers to ensure that they do hit mechanical rails from high frequency vibration (do the math to work out the maximum displacement your accelerometer can with stand at various frequencies and you will understand this point). Similar for, but not as important for the gyros.
It's possible that your confusion stems from the fact that there are multiple solutions to the problem. While your accelerometer can tell you which way is up, it cannot distinguish between North and West. I.E. If you rotate the device about the vertical axis, the outputs of the accelerometers won't change.
How can you distinguish between North and West? The best way is probably to add a digital compass to the mix. Alternatively, you may not care to know the difference between real North and real West. You may only want two orthogonal horizontal axes. I'll assume the latter.
Define our frames first. The device's frame is (X, Y, Z). The earth's frame is (V, H1, H2).
Lets assume your accelerometer readings (Ax, Ay, Az) are in the range -1 .. +1, where +1 means straight up. Immediately you know which direction is up: it's simply (Ax, Ay, Az). But how do we obtain a horizontal axis? There's a function called the Cross Product, which takes any two vectors as inputs, and returns another vector at right angles to both. Therefore, we can easily find a vector at right angles to Up. In C:
Vector3D V = (Ax, Ay, Az);
Vector3D H1 = RANDOM_VECTOR;
Vector3D H2 = CrossProduct(V, H1);
H1 = CrossProduct(V, H2);
Normalise(H1);
Normalise(H2);
So, now we have a vertical vector V, and two horizontal vectors H1 and H2. Now we just need to rotate the gyroscope readings into the same frame.
Let's call the gyroscope readings (Gx, Gy, Gz). We're going to convert them into earth frame rotation coordinates (GV, GH1, GH2). All you have to do is to think about the gyro readings like a single 3D vector. Which way is it pointing in the device's frame. Which way is it pointing in the Earth's frame?
The answer is simply:
GV = (Gx*V.x) + (Gy*V.y) + (Gz*V.z);
GH1 = (Gx*H1.x) + (Gy*H1.y) + (Gz*H1.z);
GH2 = (Gx*H2.x) + (Gy*H2.y) + (Gz*H2.z);
(I hope that's right)...
Best Answer
If you have the kind of gyro that tells you its rate of rotation, you have to integrate that to get rotational position. This means errors accumulate over time, so any such rotational position has a limited useful lifetime from the last known rotational position.
Cheap MEMS accelerometers can track rotational position for a few seconds. Systems costing 10s of k$ can produce useful rotational position for hours. Mechanical gyros that inherently give you angles instead of rate of rotation don't have the problem of integrating errors, but have other long term effects. Still, such systems, called intertial navigation, have been used in spacecraft and airplanes.
The famous Korean Airlines disaster where a flight from Alaska strayed off course over Kamchatka and got shot down was due to improper initialization of the inertial navigation system on the ground before takeoff. Even very small errors can accumulate to many miles of error after a few hours.