Aracılığıyla paylaş


Azure Kinect IMU örneklerini alma

Azure Kinect cihazı, hem ivmeölçer hem de jiroskop türleri dahil olmak üzere, Inertial Motion Units'e (ISU) erişim sağlar. IMU örneklerine erişmek için önce cihazınızı açıp yapılandırmanız, ardından IMU verilerini yakalamanız gerekir. Daha fazla bilgi için bkz . Cihazı bulma ve açma.

IMU örnekleri görüntülerden çok daha yüksek sıklıkta oluşturulur. Örnekler, örneklenenden daha düşük bir hızda konağa bildirilir. Bir IMU örneği beklerken, aynı anda sık sık birden çok örnek kullanılabilir duruma gelir.

IMU raporlama hızıyla ilgili ayrıntılar için bkz. Azure Kinect DK donanım belirtimi .

Kameraları yapılandırma ve başlatma

Not

IMU algılayıcıları yalnızca renk ve/veya derinlik kameraları çalışırken çalışabilir. IMU algılayıcıları tek başına çalışamaz.

Kameraları başlatmak için k4a_device_start_cameras() kullanın.

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 örneklerine erişme

Her k4a_imu_sample_t neredeyse aynı anda yakalanan bir ivmeölçer ve jiroskop okuması içerir.

IMU örneklerini görüntü yakalamalarıyla aynı iş parçacığında veya ayrı iş parçacıklarında alabilirsiniz.

IMU örneklerini kullanılabilir oldukları anda almak için kendi iş parçacığını çağırmak k4a_device_get_imu_sample() isteyebilirsiniz. API ayrıca yalnızca her görüntü yakalama döndürüldükten sonra örnekleri denetlemenize olanak sağlamak için yeterli iç kuyruğa alma özelliğine sahiptir.

IMU örneklerinin bazı iç kuyrukları olduğundan, herhangi bir veri bırakmadan aşağıdaki deseni kullanabilirsiniz:

  1. Herhangi bir kare hızında yakalamayı bekleyin.
  2. Yakalamayı işleyin.
  3. Kuyruğa alınan tüm IMU örneklerini alın.
  4. Sonraki yakalamada beklerken tekrarlayın.

Şu anda kuyruğa alınmış olan tüm IMU örneklerini almak için, işlevi döndürene K4A_WAIT_RESULT_TIMEOUTkadar döngüde 0 ile çağırabilirsiniz.k4a_device_get_imu_sample() timeout_in_ms K4A_WAIT_RESULT_TIMEOUT , kuyruğa alınmış örnek olmadığını ve hiçbiri belirtilen zaman aşımına ulaşmış olmadığını gösterir.

Kullanım örneği

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

Sonraki adımlar

Artık IMU örnekleriyle nasıl çalışabileceğinizi biliyorsunuz, ayrıca