Bagikan melalui


Mengambil sampel IMU Azure Kinect

Perangkat Azure Kinect menyediakan akses ke Inertial Motion Unit (IMU), termasuk jenis akselerometer dan giroskop. Untuk mengakses sampel IMU, Anda harus terlebih dahulu membuka dan mengonfigurasi perangkat, lalu mengambil data IMU. Untuk informasi selengkapnya, lihat menemukan dan membuka perangkat.

Sampel IMU dihasilkan pada frekuensi yang jauh lebih tinggi daripada gambar. Sampel dilaporkan ke host pada tingkat yang lebih rendah daripada sampelnya. Saat menunggu sampel IMU, beberapa sampel akan sering tersedia secara bersamaan.

Lihat spesifikasi perangkat keras Azure Kinect DK untuk detail tentang tingkat pelaporan IMU.

Mengonfigurasi dan memulai kamera

Catatan

Sensor IMU hanya dapat bekerja saat warna dan/atau kamera kedalaman sedang berjalan. Sensor IMU tidak bisa bekerja sendiri.

Untuk memulai kamera, gunakan k4a_device_start_cameras().

k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
config.color_format = K4A_IMAGE_FORMAT_COLOR_MJPG;
config.color_resolution = K4A_COLOR_RESOLUTION_2160P;

if (K4A_RESULT_SUCCEEDED != k4a_device_start_cameras(device, &config))
{
    printf("Failed to start cameras\n");
    goto Exit;
}

if (K4A_RESULT_SUCCEEDED != k4a_device_start_imu(device))
{
    printf("Failed to start imu\n");
    goto Exit;
}

Akses sampel IMU

Setiap k4a_imu_sample_t berisi pembacaan akselerometer dan giroskop yang diambil pada waktu yang hampir bersamaan.

Anda bisa mendapatkan sampel IMU baik di alur yang sama dengan pengambilan gambar, atau di alur terpisah.

Untuk mengambil sampel IMU segera setelah tersedia, Anda dapat menghubungi k4a_device_get_imu_sample() di alurnya sendiri. API juga memiliki antrean internal yang cukup untuk memungkinkan Anda hanya memeriksa sampel setelah setiap pengambilan gambar dikembalikan.

Karena ada beberapa antrean internal sampel IMU, Anda dapat menggunakan pola berikut tanpa menghilangkan data apa pun:

  1. Tunggu pengambilan, pada kecepatan bingkai apa pun.
  2. Proses pengambilan.
  3. Ambil semua sampel IMU yang ada dalam antrean.
  4. Ulangi menunggu pada pengambilan berikutnya.

Untuk mengambil semua sampel IMU yang sedang antre, Anda dapat memanggil k4a_device_get_imu_sample() dengan timeout_in_ms 0 dalam perulangan hingga fungsi mengembalikan K4A_WAIT_RESULT_TIMEOUT. K4A_WAIT_RESULT_TIMEOUT menunjukkan bahwa tidak ada sampel yang diantrekan dan tidak ada yang tiba dalam batas waktu yang ditentukan.

Contoh penggunaan

k4a_imu_sample_t imu_sample;

// Capture a imu sample
switch (k4a_device_get_imu_sample(device, &imu_sample, TIMEOUT_IN_MS))
{
case K4A_WAIT_RESULT_SUCCEEDED:
    break;
case K4A_WAIT_RESULT_TIMEOUT:
    printf("Timed out waiting for a imu sample\n");
    continue;
    break;
case K4A_WAIT_RESULT_FAILED:
    printf("Failed to read a imu sample\n");
    goto Exit;
}

// Access the accelerometer readings
if (imu_sample != NULL)
{
    printf(" | Accelerometer temperature:%.2f x:%.4f y:%.4f z: %.4f\n",
            imu_sample.temperature,
            imu_sample.acc_sample.xyz.x,
            imu_sample.acc_sample.xyz.y,
            imu_sample.acc_sample.xyz.z);
}

Langkah berikutnya

Sekarang Anda tahu cara bekerja dengan sampel IMU, Anda juga dapat