استرداد Azure Kinect عينات IMU

يوفر جهاز Azure Kinect إمكانية الوصول إلى وحدات الحركة بالقصور الذاتي (IMUs)، بما في ذلك نوعي مقياس التسارع والجيروسكوب. للوصول إلى عينات IMUs، يجب عليك أولا فتح جهازك وتكوينه، ثم التقاط بيانات IMU. لمزيد من المعلومات، راجع البحث عن الجهاز وفتحه.

يتم إنشاء عينات IMU بتردد أعلى بكثير من الصور. يتم الإبلاغ عن العينات إلى المضيف بمعدل أقل مما يتم أخذ عينات منه. عند انتظار عينة IMU ، ستصبح عينات متعددة متاحة بشكل متكرر في نفس الوقت.

راجع مواصفات أجهزة Azure Kinect DK للحصول على تفاصيل حول معدل تقارير IMU.

تكوين الكاميرات وتشغيلها

ملاحظة

يمكن أن تعمل مستشعرات IMU فقط عند تشغيل كاميرات الألوان و / أو العمق. لا يمكن أن تعمل أجهزة استشعار IMU بمفردها.

لبدء تشغيل الكاميرات، استخدم 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;
}

الوصول إلى عينات IMU

يحتوي كل k4a_imu_sample_t على مقياس تسارع وقراءة جيروسكوب تم التقاطها في نفس الوقت تقريبا.

يمكنك الحصول على عينات IMU إما على نفس مؤشر الترابط الذي تحصل عليه من التقاط الصور ، أو على مؤشرات ترابط منفصلة.

لاسترداد عينات IMU بمجرد توفرها، قد تحتاج إلى الاتصال k4a_device_get_imu_sample() بمؤشر الترابط الخاص بها. تحتوي واجهة برمجة التطبيقات أيضا على طوابير داخلية كافية للسماح لك بالتحقق من وجود عينات فقط بعد إرجاع كل التقاط صورة.

نظرا لوجود بعض قوائم الانتظار الداخلية لعينات IMU ، يمكنك استخدام النمط التالي دون إسقاط أي بيانات:

  1. انتظر الالتقاط، بأي معدل إطارات.
  2. معالجة الالتقاط.
  3. استرداد كافة عينات IMU في قائمة الانتظار.
  4. كرر الانتظار في اللقطة التالية.

لاسترداد جميع عينات IMU الموجودة حاليا في قائمة الانتظار ، يمكنك الاتصال k4a_device_get_imu_sample() باستخدام timeout_in_ms 0 في حلقة حتى تعود K4A_WAIT_RESULT_TIMEOUTالدالة . K4A_WAIT_RESULT_TIMEOUT إلى أنه لا توجد عينات في قائمة الانتظار ولم يصل أي منها في المهلة المحددة.

مثال على الاستخدام

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);
}

الخطوات التالية

الآن أنت تعرف كيفية العمل مع عينات IMU ، يمكنك أيضا