スマートフォンのジャイロスコープ――種類と動作原理

著者: IT Sectr 公開日: 2026-03-22 読了時間: 9 分

ジャイロスコープは、デバイスの3軸における回転の角速度を測定するセンサーです。線形加速度を測定する加速度センサーとは異なり、ジャイロスコープは空間における回転と方向を検出します。STMicroelectronics, 2024によれば、現代のMEMSジャイロスコープは毎秒0.01度までの精度を達成し、ナビゲーション、画像定位、ARアプリでの利用を可能にしています。

ポイント

  • ジャイロスコープ—MEMSセンサーで3軸 (X, Y, Z) の角速度を毎秒度単位で測定します。
  • MEMS技術により、2×2mmのサイズで消費電流5mA未満の超小型ジャイロスコープが実現できます。
  • Android Sensor Frameworkは、TYPE_GYROSCOPEおよびTYPE_GYROSCOPE_UNCALIBRATEDのAPIを提供します。
  • カリブレーションにより、MEMSセンサーの主な誤差であるゼロレートドリフトを補正できます。
  • 6軸システム (ジャイロスコープ + 加速度センサー) はARKit、ARCore、ゲームコントローラーで使用されています。

搾式デバイスのジャイロスコープとは

スマートフォンのジャイロスコープは、デバイスの回転の角速度を測定するマイクロ電子機械センサー (MEMS) です。航空機で使用される機械式ジャイロスコープとは異なり、MEMSジャイロスコープはフォンのマザーボードに搭載された2×2×1mmのシリコンチップです。

モバイルデバイスのジャイロスコープの種類

現代のスマートフォンは、振動型のMEMSジャイロスコープ (チューニングフォーク型やリングデザイン型) を専用しています。回転部を持たず、連続動作で10年の耐久性が保証されます。主なメーカーはBosch Sensortec (BMIシリーズ)、STMicroelectronics (L3G、A3Gシリーズ)、InvenSense (ICMシリーズ)です。

主な特性

一般的なMEMSジャイロスコープの測定範囲は±125~±2000°/s、サンプリングレートは最大32kHz、消費電流は3~6mAです。Bosch Sensortec BMI160 (2023)によれば、±125°/sの範囲でのノイズレベルは0.007°/s/√Hzであり、精確な回転追跡に十分です。

パラメータ
技術MEMS (振動型)
範囲±125 — ±2000 °/s
消費電流3–6 mA
サイズ2×2×1 mm
ノイズ0.007 °/s/√Hz

MEMSジャイロスコープの仕組み

MEMSジャイロスコープの動作原理はコリオリ効果に基づいています。チップ内部には、特定の周波数 (15~30kHz) で振動するシリコン質量があります。デバイスが回転すると、コリオリ力が振動する質量に作用し、これが角速度に比例します。

振動型ジャイロスコープの構造

MEMSジャイロスコープの主な要素は、振動を生成するドライブ電極と、位移を検出するセンス電極です。研究論文「MEMS Gyroscopes for Consumer Electronics」 (IEEE, 2023) によれば、一般的な設計には、中央の質量の周りに対称に配置された4~8つの梳状構造が含まれます。

デジタルインターフェース

現代のジャイロスコープは、I²CまたはSPIバスを経由してデータを送信します。スマートフォンのコントローラは、3軸 (X: Pitch、Y: Roll、Z: Yaw) の角速度値を受け取ります。内蔵のADCが電容信号をデジタル値 (16~24ビット分解能) に変換します。ゲーモードでの更新レートは最大400Hzに達します。

ジャイロスコープと加速度センサーの違い

加速度センサーは線形加速度――軸に沿った物体の速度変化――を測定します。ジャイロスコープは回転――角度の変化率――を測定します。これらのセンサーは互いに補完的です。加速度センサーは重力ベクトルに対する方向を提供しますが、倾きと直線運動を区別できません。ジャイロスコープは重力に依存せずに回転を追跡できますが、ドリフトの影響を受けます。

Sensor Fusion――データの統合

実際のアプリケーションではSensor Fusion――ジャイロスコープ、加速度センサー、地磁気センサーのデータを組み合わせるアルゴリズム――が使用されます。マホニフィルタや補完フィルタは、2度 (静止時) および5度 (動的時) の精度で方向四元数を計算します。Androidはフレームワークレベルで仮想センサーTYPE_ROTATION_VECTORを提供しています。

kotlin
val rotationVector = sensorManager
    .getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR)
    
val callback = object : SensorEventListener {
    override fun onSensorChanged(event: SensorEvent) {
        val quat = FloatArray(4)
        SensorManager.getQuaternionFromVector(quat, event.values)
        // quat[0..3] — 方向四元数
    }
}

Android APIでジャイロスコープを使用する

Androidは2種類のジャイロスコープセンサーを提供しています: TYPE_GYROSCOPE (カリブレーション済み、ドリフトなし) と TYPE_GYROSCOPE_UNCALIBRATED (素のデータとドリフト推定値)。SensorManager.getDefaultSensor()からアクセスできます。データはrad/s (ラジアン毎秒) で返されます。

ジャイロスコープの登録例

ジャイロスコープのリスナーを登録するには、遅延を指定する必要があります: ゲーム用SENSOR_DELAY_GAME (20ms)、UI用SENSOR_DELAY_UI (67ms)、最高周波数用SENSOR_DELAY_FASTEST (0ms)。onPause()で登録を解除しないと、バッテリーが2~3時間で消耗されます。

kotlin
class GyroActivity : AppCompatActivity() {
    private lateinit var sensorManager: SensorManager
    private var gyroscope: Sensor? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
        gyroscope = sensorManager.getDefaultSensor(
            Sensor.TYPE_GYROSCOPE
        )
    }

    override fun onResume() {
        super.onResume()
        gyroscope?.let { sensor ->
            sensorManager.registerListener(
                this, sensor, SensorManager.SENSOR_DELAY_GAME
            )
        }
    }
}

ジャイロスコープデータの処理

event.values[0..2]からの素のデータは、X、Y、Zの角速度に対応します。回転角を求めるには、角速度を時間積分する必要があります。50Hzでの積分誤差は約1度/分であり、ゲームでは受け入れられますが、修正なしのナビゲーションには不十分です。

ジャイロスコープのカリブレーションとドリフト

ゼロレートドリフト (バイアスドリフト) は、MEMSジャイロスコープの主な問題です。静止時でも、センサーが非ゼロの角速度 (0.1~2°/s) を示すことがあります。原因は、シリコン構造の温度変化と機械応力です。メーカーはハードウェアレベルでこの効果を補正しています。

  • 温度ドリフト――フォンが25℃から60℃に加熱されたときのバイアス変化。オンチップ温度モデルで補正されます。
  • 長期ドリフト――1~3年の使用で特性が変化。定期的なカリブレーションが必要です。
  • 角ランダムウォークノイズ――ARW (Angle Random Walk)。積分時間にわたる誤差の蓄積を特徴付けます。

Androidでのカリブレーション

Androidシステムは、初回起動時または温度変化時にジャイロスコープを自動カリブレーションします。手順は10~30秒で、ユーザーが何もする必要はありません――静止した面にフォンを置くだけです。calibrate()メソッドはすべてのデバイスで利用できるとは限りません。強制カリブレーションでは、TYPE_GYROSCOPE_UNCALIBRATEDを使用し、event.values[3..5]を経由してバイアスオフセットを取得します。

kotlin
private fun handleUncalibratedGyro(event: SensorEvent) {
    val rawX = event.values[0]    // 未カリブレーションのrad/s
    val biasX = event.values[3]     // X軸バイアス
    val calibratedX = rawX - biasX
    
    applyCalibrationToFusion(
        calibratedX,
        event.values[1] - event.values[4],
        event.values[2] - event.values[5]
    )
}

モバイルアプリにおけるジャイロスコープの応用

ジャイロスコープは、カメラの振れ止めからGoogle CardboardのようなVRヘッドセットまで、多くのシナリオで使用されています。AppleのARKitやGoogleのARCoreは、頭の回転追跡の主センサーとしてジャイロスコープを使用しています。Apple ARKit Technical Specification (2024) によれば、加速度センサーと組み合わせたジャイロスコープは、追跡精度が最大0.5度です。

  • 動画定位――EIS (電子画像定位) はジャイロスコープを使ってカメラの振れを補正します。アルゴリズムは角速度に基づいてフレームを調整します。
  • ゲームコントローラー――デバイスを回して車やキャラクターを操作。ジャイロスコープから画面までのレイテンシは20~50msです。
  • 屋内ナビゲーション――PDR (歩行者推算位置測定) により、GPSなしで動きの方向を決定するためにジャイロスコープデータを積分します。
  • フィットネストラッカー――運動中の回転やターンをカウント。現代のアルゴリズムは93%の精度で活動の種類を判別できます。

産業・科学的な応用

消費者向け電子機器以外では、ジャイロスコープはロボティクスやUAVで使用されています。Android ThingsやROS (Robot Operating System) をベースとしたモバイルロボットは、MEMSジャイロスコープを用いて運動定位とオドメトリーを行います。IEEEの研究「MEMS IMU in Robotics」 (2024) によれば、ジャイロスコープを備えたモバイルロボットの位置測定精度は、車輪オドメトリーだけの場合と比べて、特に滑りやすい地面で3~5倍も高くなります。消費者向けドローンでは、気圧計と組み合わせたジャイロスコープが、風速最大10m/sの環境で0.5mの精度で飛行高度を維持します。

AR・VR追跡

ARアプリケーションでは、ジャイロスコープが主センサーとなり、現実世界に対する仮想オブジェクトの位置を決定します。Google ARCoreは1000Hz (内部サンプリングにより、APIレートとは独立) でデバイス運動追跡にジャイロスコープを使用しています。AppleのARKitは、運動時には0.5度の位置測定精度を達成し、現実のシーンに仮想家具やゲームのキャラクターを重ねるのに十分です。

ジャイロスコープの未来

次世代の6軸IMU (InvenSense ICM-42688, 2024) は、ジャイロスコープと加速度センサーを単一チップに統合し、低消費電力モードでの消費電流は0.45mAです。モバイルデバイス用の勾配計や原子ジャイロスコープの開発は、まだ実験室レベルのプロトタイプ段階です。0.001°/sの精度を持つ商用グレードのMEMSジャイロスコープは、2028年までに登場すると予想されています。

よくある質問

フォンにジャイロスコープが必要なのはながですか?

ジャイロスコープは、空間におけるデバイスの回転と方向を検出します。これがなければ、VRモード、倾きによる自動回転、動画定位、ARアプリは不可能です。現代のフォンはジャイロスコープなしでは機能しません。

ジャイロスコープと加速度センサーの違いは?

加速度センサーは線形加速度 (重力に対する運動と倾き) を測定します。ジャイロスコープは角速度 (回転) を測定します。加速度センサーはデバイスの回転と直線運動を区別できませんが、ジャイロスコープがこの問題を解決します。

フォンのジャイロスコープはカリブレーションできますか?

Androidは自動カリブレーションを使用しています。手動カリブレーションには、“GPS Status & Toolbox”などのアプリをダウンロードして、フォンを平な面に置き、TYPE_GYROSCOPE_UNCALIBRATEDを使ってカリブレーションします。

静止時にジャイロスコープが非ゼロの値を示すのはなぜ?

これはゼロレートドリフトで、MEMSセンサーの自然な特性です。高価なジャイロスコープでも、静止時に0.1~2°/sのオフセットがあります。カリブレーションはこのオフセットを削陛します。ドリフトが5°/sを超える場合、センサーは故障しています。

Androidでジャイロスコープデータを取得するには?

SensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE)を使用し、SensorEventListenerを登録します。データは3軸でrad/sで届きます。ゲームにはSENSOR_DELAY_GAME (20ms)を、バックグラウンドにはSENSOR_DELAY_UI (67ms)を使用します。

まとめ

  • ジャイロスコープ――スマートフォンの3軸の回転角速度を測定するMEMSセンサー。
  • MEMS技術は、振動するシリコン質量に対するコリオリ効果を利用して回転を測定します。
  • ジャイロスコープと加速度センサー――互いに補完するセンサー: 前者は回転、後者は線形加速度を測定します。
  • Android APIはTYPE_GYROSCOPEとTYPE_GYROSCOPE_UNCALIBRATEDをrad/sのデータで提供します。
  • カリブレーションは、ゼロレートドリフト――0.1~2°/sの典型的なオフセットを持つMEMSジャイロスコープの主な誤差――を補正します。
  • 応用はAR/VR、動画定位、ゲームコントローラー、PDRナビゲーションを含みます。
  • 現代の6軸IMUは、ジャイロスコープと加速度センサーを単一チップに統合し、消費電流は0.45mAからです。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください