Bagikan melalui


Mengakses sensor perangkat

Browse sample. Telusuri sampel

Perangkat memiliki semua jenis sensor yang tersedia untuk Anda. Beberapa sensor dapat mendeteksi gerakan, yang lain berubah di lingkungan, seperti cahaya. Memantau dan bereaksi terhadap sensor ini membuat aplikasi Anda dinamis dalam beradaptasi dengan cara perangkat digunakan. Anda juga dapat merespons perubahan sensor dan memberi tahu pengguna. Artikel ini memberi Anda gambaran singkat tentang sensor umum yang didukung oleh .NET Multi-platform App UI (.NET MAUI).

Jenis terkait sensor perangkat tersedia di Microsoft.Maui.Devices.Sensors namespace layanan.

Kecepatan sensor

Kecepatan sensor mengatur kecepatan sensor akan mengembalikan data ke aplikasi Anda. Saat memulai sensor, Anda memberikan kecepatan sensor yang diinginkan dengan SensorSpeed enumerasi:

  • Fastest
    Dapatkan data sensor secepat mungkin (tidak dijamin akan kembali pada utas UI).

  • Game
    Nilai yang cocok untuk game (tidak dijamin akan kembali pada utas UI).

  • UI
    Nilai yang cocok untuk antarmuka pengguna umum.

  • Default
    Laju default yang cocok untuk perubahan orientasi layar.

Peringatan

Memantau terlalu banyak sensor sekaligus dapat memengaruhi data sensor laju dikembalikan ke aplikasi Anda.

Di .NET 8, SensorSpeed interval identik di semua platform:

  • Default menggunakan interval 200ms.
  • UI menggunakan interval 60ms.
  • Game menggunakan interval 20ms.
  • Fastest menggunakan interval 5ms.

Handler peristiwa sensor

Penanganan aktivitas yang ditambahkan ke sensor dengan Game kecepatan atau Fastest tidak dijamin berjalan pada utas UI. Jika penanganan aktivitas perlu mengakses elemen antarmuka pengguna, gunakan MainThread.BeginInvokeOnMainThread metode untuk menjalankan kode tersebut pada utas UI.

Akselerometer

Sensor akselerometer mengukur akselerasi perangkat di sepanjang tiga sumbunya. Data yang dilaporkan oleh sensor mewakili bagaimana pengguna memindahkan perangkat.

Antarmuka IAccelerometer menyediakan akses ke sensor, dan tersedia melalui Accelerometer.Default properti . IAccelerometer Antarmuka dan Accelerometer kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Mulai

Untuk mengakses fungsionalitas akselerometer, penyiapan khusus platform berikut mungkin diperlukan:

Jika aplikasi Anda menargetkan Android 12+ (API 31+), sistem menempatkan batas 200 Hz pada laju refresh data dari sensor ini. Jika aplikasi Anda perlu mengumpulkan data sensor menggunakan Fastest kecepatan sensor, Anda harus mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin. Anda dapat mengonfigurasi izin dengan cara berikut:

  • Tambahkan izin berbasis rakitan:

    Buka file Platforms/Android/MainApplication.cs dan tambahkan atribut assembly berikut setelah using direktif:

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - atau -

  • Perbarui Manifes Android:

    Buka file Platforms/Android/AndroidManifest.xml dan tambahkan baris berikut di nodemanifest:

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - atau -

  • Perbarui Manifes Android di editor manifes:

    Di Visual Studio klik dua kali pada file Platforms/Android/AndroidManifest.xml untuk membuka editor manifes Android. Kemudian, di bawah Izin yang diperlukan periksa izin HIGH_SAMPLING_RATE_SENSORS . Ini akan secara otomatis memperbarui file AndroidManifest.xml .

Catatan

Jika pengguna menonaktifkan akses mikrofon menggunakan tombol perangkat, sensor gerakan, dan posisi selalu dibatasi lajunya, terlepas dari apakah Anda mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin.

Memantau sensor akselerometer

Untuk mulai memantau sensor akselerometer, panggil IAccelerometer.Start metode . .NET MAUI mengirimkan perubahan data akselerometer ke aplikasi Anda dengan menaikkan IAccelerometer.ReadingChanged peristiwa. IAccelerometer.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan akselerometer dengan IAccelerometer.IsMonitoring properti , yang akan terjadi true jika akselerometer dimulai dan saat ini sedang dipantau.

Contoh kode berikut menunjukkan pemantauan akselerometer untuk perubahan:

public void ToggleAccelerometer()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ReadingChanged += Accelerometer_ReadingChanged;
            Accelerometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ReadingChanged -= Accelerometer_ReadingChanged;
        }
    }    
}

private void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
{
    // Update UI Label with accelerometer state
    AccelLabel.TextColor = Colors.Green;
    AccelLabel.Text = $"Accel: {e.Reading}";
}

Pembacaan akselerometer dilaporkan kembali di G. A G adalah unit gaya gravitasi yang sama dengan gravitasi yang dierahkan oleh bidang gravitasi bumi $(9,81 m/s^2)$.

Sistem koordinat didefinisikan relatif terhadap layar perangkat dalam orientasi defaultnya. Sumbu tidak ditukar saat orientasi layar perangkat berubah.

Sumbu X adalah horizontal dan menunjuk ke kanan, sumbu Y vertikal dan mengarah ke atas dan sumbu Z menunjuk ke luar wajah depan layar. Dalam sistem ini, koordinat di belakang layar memiliki nilai Z negatif.

Contoh:

  • Ketika perangkat terletak datar pada tabel dan didorong di sisi kirinya ke kanan, nilai akselerasi X positif.

  • Ketika perangkat terletak datar pada tabel, nilai akselerasi adalah +1,00 G atau $(+9,81 m/s^2)$, yang sesuai dengan akselerasi perangkat $(0 m/s^2)$ dikurangi kekuatan gravitasi $(-9,81 m/s^2)$ dan dinormalisasi seperti pada G.

  • Ketika perangkat terletak datar di atas meja dan didorong ke langit dengan akselerasi A $m /s^2$, nilai akselerasi sama dengan $A+9,81$ yang sesuai dengan akselerasi perangkat $(+A m/s^2)$ dikurangi gaya gravitasi $(-9,81 m/s^2)$ dan dinormalisasi dalam G.

Informasi khusus platform (Akselerometer)

Tidak ada informasi khusus platform yang terkait dengan sensor akselerometer.

Barometer

Sensor barometer mengukur tekanan udara sekitar. Data yang dilaporkan oleh sensor mewakili tekanan udara saat ini. Data ini dilaporkan pertama kali Anda mulai memantau sensor dan kemudian setiap kali tekanan berubah.

Antarmuka IBarometer menyediakan akses ke sensor, dan tersedia melalui Barometer.Default properti . IBarometer Antarmuka dan Barometer kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Untuk mulai memantau sensor barometer, panggil IBarometer.Start metode . .NET MAUI mengirimkan pembacaan tekanan udara ke aplikasi Anda dengan menaikkan IBarometer.ReadingChanged acara. IBarometer.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan barometer dengan IBarometer.IsMonitoring properti , yang akan jika true barometer saat ini sedang dipantau.

Pembacaan tekanan diwakili dalam hektopaskal.

Contoh kode berikut menunjukkan pemantauan barometer untuk perubahan:

public void ToggleBarometer()
{
    if (Barometer.Default.IsSupported)
    {
        if (!Barometer.Default.IsMonitoring)
        {
            // Turn on barometer
            Barometer.Default.ReadingChanged += Barometer_ReadingChanged;
            Barometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off barometer
            Barometer.Default.Stop();
            Barometer.Default.ReadingChanged -= Barometer_ReadingChanged;
        }
    }
}

private void Barometer_ReadingChanged(object sender, BarometerChangedEventArgs e)
{
    // Update UI Label with barometer state
    BarometerLabel.TextColor = Colors.Green;
    BarometerLabel.Text = $"Barometer: {e.Reading}";
}

Informasi khusus platform (Barometer)

Bagian ini menjelaskan detail implementasi khusus platform yang terkait dengan sensor barometer.

Tidak ada detail implementasi khusus platform.

Compass

Sensor kompas memantau arah utara magnetik perangkat.

Antarmuka ICompass menyediakan akses ke sensor, dan tersedia melalui Compass.Default properti . ICompass Antarmuka dan Compass kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Untuk mulai memantau sensor kompas, panggil ICompass.Start metode . .NET MAUI menaikkan ICompass.ReadingChanged peristiwa ketika judul kompas berubah. ICompass.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan kompas dengan ICompass.IsMonitoring properti , yang akan menjadi true jika kompas saat ini sedang dipantau.

Contoh kode berikut menunjukkan pemantauan kompas untuk perubahan:

private void ToggleCompass()
{
    if (Compass.Default.IsSupported)
    {
        if (!Compass.Default.IsMonitoring)
        {
            // Turn on compass
            Compass.Default.ReadingChanged += Compass_ReadingChanged;
            Compass.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off compass
            Compass.Default.Stop();
            Compass.Default.ReadingChanged -= Compass_ReadingChanged;
        }
    }
}

private void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
    // Update UI Label with compass state
    CompassLabel.TextColor = Colors.Green;
    CompassLabel.Text = $"Compass: {e.Reading}";
}

Informasi khusus platform (Kompas)

Bagian ini menjelaskan detail implementasi khusus platform yang terkait dengan fitur kompas.

Android tidak menyediakan API untuk mengambil judul kompas. .NET MAUI menggunakan sensor akselerometer dan magnetometer untuk menghitung judul utara magnetik, yang direkomendasikan oleh Google.

Dalam kasus yang jarang terjadi, Anda mungkin melihat hasil yang tidak konsisten karena sensor perlu dikalibrasi. Mengkalibrasi ulang kompas di Android bervariasi menurut model telepon dan versi Android. Anda harus mencari di internet tentang cara mengkalibrasi ulang kompas. Berikut adalah dua tautan yang dapat membantu dalam mengkalibrasi ulang kompas:

Menjalankan beberapa sensor dari aplikasi Anda secara bersamaan dapat mengganggu kecepatan sensor.

Filter lowpass

Karena bagaimana nilai kompas Android diperbarui dan dihitung, mungkin ada kebutuhan untuk memuluskan nilai. Filter Lowpass dapat diterapkan yang rata-rata nilai sinus dan kosinus sudut dan dapat diaktifkan dengan menggunakan Start metode kelebihan beban, yang menerima bool applyLowPassFilter parameter:

Compass.Default.Start(SensorSpeed.UI, applyLowPassFilter: true);

Ini hanya diterapkan pada platform Android, dan parameter diabaikan di iOS dan Windows. Untuk informasi selengkapnya, lihat komentar masalah GitHub ini.

Goyang

Meskipun artikel ini mencantumkan goyangan sebagai sensor, itu tidak. Akselerometer digunakan untuk mendeteksi kapan perangkat dikocok.

Antarmuka IAccelerometer menyediakan akses ke sensor, dan tersedia melalui Accelerometer.Default properti . IAccelerometer Antarmuka dan Accelerometer kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Catatan

Jika aplikasi Anda perlu mengumpulkan data sensor akselerometer menggunakan Fastest kecepatan sensor, Anda harus mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin. Untuk informasi selengkapnya, lihat Akselerometer.

API goyangan deteksi menggunakan pembacaan mentah dari akselerometer untuk menghitung akselerasi. Ini menggunakan mekanisme antrean sederhana untuk mendeteksi apakah 3/4 dari peristiwa akselerometer baru-baru ini terjadi pada paruh kedua terakhir. Akselerasi dihitung dengan menambahkan kuadrat X, Y, dan Z ($x^2+y^2+z^2$) dari akselerometer dan membandingkannya dengan ambang tertentu.

Untuk mulai memantau sensor akselerometer, panggil IAccelerometer.Start metode . Ketika kocok terdeteksi, IAccelerometer.ShakeDetected peristiwa dinaikkan. IAccelerometer.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan akselerometer dengan IAccelerometer.IsMonitoring properti , yang akan terjadi true jika akselerometer dimulai dan saat ini sedang dipantau.

Disarankan untuk menggunakan Game atau lebih cepat untuk SensorSpeed.

Contoh kode berikut menunjukkan pemantauan akselerometer untuk peristiwa:ShakeDetected

private void ToggleShake()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ShakeDetected += Accelerometer_ShakeDetected;
            Accelerometer.Default.Start(SensorSpeed.Game);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ShakeDetected -= Accelerometer_ShakeDetected;
        }
    }
}

private void Accelerometer_ShakeDetected(object sender, EventArgs e)
{
    // Update UI Label with a "shaked detected" notice, in a randomized color
    ShakeLabel.TextColor = new Color(Random.Shared.Next(256), Random.Shared.Next(256), Random.Shared.Next(256));
    ShakeLabel.Text = $"Shake detected";
}

Informasi khusus platform (Shake)

Tidak ada informasi khusus platform yang terkait dengan sensor akselerometer.

Giroskop

Sensor giroskop mengukur kecepatan rotasi sudut di sekitar tiga sumbu utama perangkat.

Antarmuka IGyroscope menyediakan akses ke sensor, dan tersedia melalui Gyroscope.Default properti . IGyroscope Antarmuka dan Gyroscope kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Mulai

Untuk mengakses fungsionalitas giroskop, penyiapan khusus platform berikut mungkin diperlukan:

Jika aplikasi Anda menargetkan Android 12+ (API 31+), sistem menempatkan batas 200 Hz pada laju refresh data dari sensor ini. Jika aplikasi Anda perlu mengumpulkan data sensor menggunakan Fastest kecepatan sensor, Anda harus mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin. Anda dapat mengonfigurasi izin dengan cara berikut:

  • Tambahkan izin berbasis rakitan:

    Buka file Platforms/Android/MainApplication.cs dan tambahkan atribut assembly berikut setelah using direktif:

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - atau -

  • Perbarui Manifes Android:

    Buka file Platforms/Android/AndroidManifest.xml dan tambahkan baris berikut di nodemanifest:

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - atau -

  • Perbarui Manifes Android di editor manifes:

    Di Visual Studio klik dua kali pada file Platforms/Android/AndroidManifest.xml untuk membuka editor manifes Android. Kemudian, di bawah Izin yang diperlukan periksa izin HIGH_SAMPLING_RATE_SENSORS . Ini akan secara otomatis memperbarui file AndroidManifest.xml .

Catatan

Jika pengguna menonaktifkan akses mikrofon menggunakan tombol perangkat, sensor gerakan, dan posisi selalu dibatasi lajunya, terlepas dari apakah Anda mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin.

Memantau sensor giroskop

Untuk mulai memantau sensor giroskop, panggil IGyroscope.Start metode . .NET MAUI mengirimkan perubahan data giroskop ke aplikasi Anda dengan menaikkan IGyroscope.ReadingChanged peristiwa. Data yang disediakan oleh peristiwa ini diukur dalam rad/dtk (radian per detik). IGyroscope.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan giroskop dengan IGyroscope.IsMonitoring properti , yang akan terjadi true jika giroskop dimulai dan saat ini sedang dipantau.

Contoh kode berikut menunjukkan pemantauan giroskop:

private void ToggleGyroscope()
{
    if (Gyroscope.Default.IsSupported)
    {
        if (!Gyroscope.Default.IsMonitoring)
        {
            // Turn on gyroscope
            Gyroscope.Default.ReadingChanged += Gyroscope_ReadingChanged;
            Gyroscope.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off gyroscope
            Gyroscope.Default.Stop();
            Gyroscope.Default.ReadingChanged -= Gyroscope_ReadingChanged;
        }
    }
}

private void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
    // Update UI Label with gyroscope state
    GyroscopeLabel.TextColor = Colors.Green;
    GyroscopeLabel.Text = $"Gyroscope: {e.Reading}";
}

Informasi khusus platform (Giroskop)

Tidak ada informasi khusus platform yang terkait dengan sensor giroskop.

Magnetometer

Sensor magnetometer menunjukkan orientasi perangkat relatif terhadap medan magnet Bumi.

Antarmuka IMagnetometer menyediakan akses ke sensor, dan tersedia melalui Magnetometer.Default properti . IMagnetometer Antarmuka dan Magnetometer kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Mulai

Untuk mengakses fungsi magnetometer, pengaturan khusus platform berikut mungkin diperlukan:

Jika aplikasi Anda menargetkan Android 12+ (API 31+), sistem menempatkan batas 200 Hz pada laju refresh data dari sensor ini. Jika aplikasi Anda perlu mengumpulkan data sensor menggunakan Fastest kecepatan sensor, Anda harus mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin. Anda dapat mengonfigurasi izin dengan cara berikut:

  • Tambahkan izin berbasis rakitan:

    Buka file Platforms/Android/MainApplication.cs dan tambahkan atribut assembly berikut setelah using direktif:

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - atau -

  • Perbarui Manifes Android:

    Buka file Platforms/Android/AndroidManifest.xml dan tambahkan baris berikut di nodemanifest:

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - atau -

  • Perbarui Manifes Android di editor manifes:

    Di Visual Studio klik dua kali pada file Platforms/Android/AndroidManifest.xml untuk membuka editor manifes Android. Kemudian, di bawah Izin yang diperlukan periksa izin HIGH_SAMPLING_RATE_SENSORS . Ini akan secara otomatis memperbarui file AndroidManifest.xml .

Catatan

Jika pengguna menonaktifkan akses mikrofon menggunakan tombol perangkat, sensor gerakan, dan posisi selalu dibatasi lajunya, terlepas dari apakah Anda mendeklarasikan HIGH_SAMPLING_RATE_SENSORS izin.

Memantau sensor magnetometer

Untuk mulai memantau sensor magnetometer, panggil IMagnetometer.Start metode . .NET MAUI mengirimkan perubahan data magnetometer ke aplikasi Anda dengan menaikkan IMagnetometer.ReadingChanged peristiwa. Data yang disediakan oleh peristiwa ini diukur dalam $μT$ (microteslas). IMagnetometer.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan magnetometer dengan IMagnetometer.IsMonitoring properti , yang akan terjadi true jika magnetometer dimulai dan saat ini sedang dipantau.

Contoh kode berikut menunjukkan pemantauan magnetometer:

private void ToggleMagnetometer()
{
    if (Magnetometer.Default.IsSupported)
    {
        if (!Magnetometer.Default.IsMonitoring)
        {
            // Turn on magnetometer
            Magnetometer.Default.ReadingChanged += Magnetometer_ReadingChanged;
            Magnetometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off magnetometer
            Magnetometer.Default.Stop();
            Magnetometer.Default.ReadingChanged -= Magnetometer_ReadingChanged;
        }
    }
}

private void Magnetometer_ReadingChanged(object sender, MagnetometerChangedEventArgs e)
{
    // Update UI Label with magnetometer state
    MagnetometerLabel.TextColor = Colors.Green;
    MagnetometerLabel.Text = $"Magnetometer: {e.Reading}";
}

Informasi khusus platform (Magnetometer)

Tidak ada informasi khusus platform yang terkait dengan sensor magnetometer.

Orientasi

Sensor orientasi memantau orientasi perangkat dalam ruang 3D.

Catatan

Sensor ini tidak digunakan untuk menentukan apakah tampilan video perangkat dalam mode potret atau lanskap. Gunakan properti DeviceDisplay.Current.MainDisplayInfo.Orientation sebagai gantinya. Untuk informasi selengkapnya, lihat Informasi tampilan perangkat.

Antarmuka IOrientationSensor menyediakan akses ke sensor, dan tersedia melalui OrientationSensor.Default properti . IOrientationSensor Antarmuka dan OrientationSensor kelas terkandung dalam Microsoft.Maui.Devices.Sensors namespace layanan.

Untuk mulai memantau sensor orientasi, panggil IOrientationSensor.Start metode . .NET MAUI mengirimkan perubahan data orientasi ke aplikasi Anda dengan menaikkan IOrientationSensor.ReadingChanged peristiwa. IOrientationSensor.Stop Gunakan metode untuk berhenti memantau sensor. Anda dapat mendeteksi status pemantauan orientasi dengan IOrientationSensor.IsMonitoring properti , yang akan terjadi true jika orientasi dimulai dan saat ini sedang dipantau.

Contoh kode berikut menunjukkan pemantauan sensor orientasi:

private void ToggleOrientation()
{
    if (OrientationSensor.Default.IsSupported)
    {
        if (!OrientationSensor.Default.IsMonitoring)
        {
            // Turn on orientation
            OrientationSensor.Default.ReadingChanged += Orientation_ReadingChanged;
            OrientationSensor.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off orientation
            OrientationSensor.Default.Stop();
            OrientationSensor.Default.ReadingChanged -= Orientation_ReadingChanged;
        }
    }
}

private void Orientation_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
    // Update UI Label with orientation state
    OrientationLabel.TextColor = Colors.Green;
    OrientationLabel.Text = $"Orientation: {e.Reading}";
}

IOrientationSensor pembacaan dilaporkan kembali dalam bentuk Quaternion yang menjelaskan orientasi perangkat berdasarkan dua sistem koordinat 3D:

Perangkat (umumnya ponsel atau tablet) memiliki sistem koordinat 3D dengan sumbu berikut:

  • Sumbu X positif menunjuk ke kanan tampilan dalam mode potret.
  • Sumbu Y positif menunjuk ke bagian atas perangkat dalam mode potret.
  • Sumbu Z positif menunjuk keluar dari layar.

Sistem koordinat 3D Bumi memiliki sumbu berikut:

  • Sumbu X positif bersinggungan dengan permukaan Bumi dan titik timur.
  • Sumbu Y yang positif juga bersinggungan dengan permukaan Bumi dan titik utara.
  • Sumbu Z positif tegak lurus dengan permukaan Bumi dan menunjuk ke atas.

Menjelaskan Quaternion rotasi sistem koordinat perangkat relatif terhadap sistem koordinat Bumi.

Nilai Quaternion terkait erat dengan rotasi di sekitar sumbu. Jika sumbu rotasi adalah vektor yang dinormalisasi ($a_x, a_y, a_z$), dan sudut rotasi adalah $\theta$, maka komponen (X, Y, Z, W) dari quaternion adalah:

$(a_x \times \sin(\theta/2), a_y \times \sin(\theta/2), a_z \times \sin(\theta/2), \cos(\theta/2))$

Ini adalah sistem koordinat tangan kanan, jadi dengan jempol tangan kanan menunjuk ke arah positif sumbu rotasi, kurva jari menunjukkan arah rotasi untuk sudut positif.

Contoh:

  • Ketika perangkat terletak datar di atas meja dengan layar menghadap ke atas, dengan bagian atas perangkat (dalam mode potret) menunjuk ke utara, kedua sistem koordinat selaras. Nilai Quaternion mewakili kuaternion identitas (0, 0, 0, 1). Semua rotasi dapat dianalisis relatif terhadap posisi ini.

  • Ketika perangkat terletak datar di atas tabel dengan layar menghadap ke atas, dan bagian atas perangkat (dalam mode potret) menunjuk ke Quaternion barat, nilainya adalah (0, 0, 0,707, 0,707). Perangkat telah diputar 90 derajat di sekitar sumbu Z Bumi.

  • Ketika perangkat dipegang tegak sehingga bagian atas (dalam mode potret) menunjuk ke langit, dan bagian belakang perangkat menghadap ke utara, perangkat telah diputar 90 derajat di sekitar sumbu X. Nilainya Quaternion adalah (0,707, 0, 0, 0,707).

  • Jika perangkat diposisikan sehingga tepi kirinya berada di atas meja, dan titik atas utara, perangkat telah diputar -90 derajat di sekitar sumbu Y (atau 90 derajat di sekitar sumbu Y negatif). Nilainya Quaternion adalah (0, -0,707, 0, 0,707).

Informasi khusus platform (Orientasi)

Tidak ada informasi khusus platform yang terkait dengan sensor orientasi.