Possible to calculate yaw,pitch,roll from x,y,z magnetic field values alone?

by RS » Mon, 12 Oct 2009 19:23:54 GMT

Sponsored Links
 DD, there are a few special cases that won't work:

If mag a sensor's first axis (say x) is already pointing mag north
exactly, the mag components on the other two axis (say y,z) would be

here your x axis is not just towards north but is exactly tangential
to one of the field lines connecting south-north.

The Earth and hence the mag field *curves* being too large in
comparison to the tiny sensor, this x axis is essentially parallel to
the local field *line* and not just tangential at a point.

While you continue to point the x axis to mag north if you try to
cause a roll alone (around the x axis here), the readings won't change
in any way. Also, the y,z components would continue to remain zero.

Combine it with another sensor and you are in luck. Android does these
internally already. Further there are APIs available to remap
coordinates, get rotation matrices etc.

You'll have to read the sensor related stuff on d.android.com for



Possible to calculate yaw,pitch,roll from x,y,z magnetic field values alone?

by DD » Sun, 18 Oct 2009 20:47:20 GMT

 Thanks R.S.  I think you are talking about the special case. But for
the time being, I feel this doesn't need to be considered that much.
so may I know exactly the physics formulas (or other methods) that can
be used to calculate yaw,pitch and roll solely based on the data given
by the magnetometer.

Yeah, you mentioned to combine the mag readings with other sensors and
to use the APIs in Android. Actually, this is just the reason why I
brought this question up. I have seen the APIs that actually calculate
yaw,pitch and roll by the mag AND the accelerometer. From my
experiments, I found that yaw,pitch and roll were strongly affected by
the acceleration, for example, if you move the phone horizontally with
a very big acceleration, the screen orientation is probably changed,
meaning the yaw,pitch and roll changes much as the accelerations

This is why I want to see if I can use the mag alone to get the
orientation(yaw, pitch, roll) so that the orientation readings are
independent on the accelerations.

Thank you very much.


Sponsored Links

Possible to calculate yaw,pitch,roll from x,y,z magnetic field values alone?

by Scott » Tue, 20 Oct 2009 01:42:24 GMT

 I'm afraid it's not mathematically possible to generate a full
attitude solution from a single vector observation (mag vector,
gravity vector, etc..). There simply isn't enough information there.
It doesn't matter if you're not pointed along the mag field, you will
still only get a partial attitude solution in the shape of a cone
centered around the mag field. This has been an issue in the aerospace
industry for a while now, and usually the problem is solved by
combining information from two or more sensors. In this case, the
Android API is probably using the mag field and what it assumes is a
gravity vector from the accelerometer (that's why the solution is
affected by external accelerations).

If you're interested in how to generate an attitude solution from two
vector observations, you should look up the TRIAD algorithm for
attitude determination.



Possible to calculate yaw,pitch,roll from x,y,z magnetic field values alone?

by DD » Sat, 24 Oct 2009 16:44:20 GMT

 Thanks Scott. Yes, you are right. the Android API is calculating the
orientation by using the mag and gravity(acceleration), and this is
why the orientation is affected (strongly affected) by the
acceleration. So just wondering if you have any idea to get the pure
acceleration data without gravity involved?meaning at any time the
phone only shows the net moving acceleration of the phone without G
added on. Thank you!


Other Threads

1. Identifying HSDPA usage

Is is possible to find out if HSDPA is used by the phone?

telephonyManager.getNetworkType() only returns UMTS which seems to
include HSDPA. Since HSDPA is based on UMTS there is nothing wrong
with that:However, there is a significant bandwidth difference between
UMTS and HSDPA. HSDPA is actually something like 3.5G.

Any idea how a HSDPA connection could be identified?

2. Receiving Changes to the Phone state

Hi All,

I'm using the following code in an attempt to get notification that
the phone state has changed.  However, when I run it on the emulator I
can make and receive calls without ever triggering my breakpoint on
the 'Log.d' line.  Can anyone tell me what I'm doing wrong here?

<manifest package="com.technicana.customercontact"
        <uses-permission android:name="android.permission.READ_PHONE_STATE"></
        <receiver android:name=".CallBroadcastReceiver">

And the code file: CallBroadCastReceiver.java

package com.technicana.customercontact;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class CallBroadcastReceiver extends BroadcastReceiver {

        public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                Log.d("Here", "Broadcast received");



Chris Spicer


3. G1 calendar sync not working

4. File download help

5. PAN services

6. Calendar Content Provider

7. how to be affiliate to the android consortium / Open Hanset Alliance