磁力計の X 軸と Y 軸を使用して、電話機がローカル グラウンドに対して水平な場合に北の方向を計算できます。ただし、電話機をローリングまたはピッチングする場合は、ロールとピッチの角度を使用して傾斜エラーを排除する必要があります。
さて、重力センサーを傾斜センサーとして使用してロールとピッチを取得し、北に向かう精度を向上させるかどうかを知りたいですか?
磁力計の X 軸と Y 軸を使用して、電話機がローカル グラウンドに対して水平な場合に北の方向を計算できます。ただし、電話機をローリングまたはピッチングする場合は、ロールとピッチの角度を使用して傾斜エラーを排除する必要があります。
さて、重力センサーを傾斜センサーとして使用してロールとピッチを取得し、北に向かう精度を向上させるかどうかを知りたいですか?
ここでは、水平面と磁北に対するデバイスの向きを取得する方法について説明します。方位 (回転行列) から磁気方位を取得するのは、わずか 1 行のコードです。
加速度計と磁力計の読み取り値aとmを 3 次元ベクトルとして取得します。a x m 外積は、電話機の向きに関係なく、東または西を指します。外積が東または西を指すかどうかは、符号規則 (上向きは正か負か) と座標系の利き手 (左利きまたは右利き) によって異なります。
外積を計算する前に、少なくとも単純な移動平均をデータに適用することをお勧めします。
一般に、ロール、ピッチ、ヨーを使用することはお勧めできません。使用しないでください。とにかく、あなたはそれを必要としません。
加速度計の読み取り値a、クロス積a x m、および加速度センサーの読み取り値とクロス積a x ( a x m ) のクロス積により、3 つのペアワイズ垂直ベクトルが得られます。それらにそれぞれの長さの逆数を掛けて、それらを単位ベクトルにします。これらの 3 つの単位ベクトルにより、回転行列が得られます。
回転行列は、デバイスの向きに相当します。私のアプリケーションでは、磁方位はatan2(R[Y][Y], R[Y][X])
R が回転行列である場所でした。従う規則によっては、回転行列のさまざまな要素を取り、符号を変更する必要がある場合があります。
デバイスの API が回転行列を提供する場合は、磁気方位を取得するためのコード行だけです。