Share via


Voorbeelden van Azure Kinect IMU ophalen

Het Azure Kinect-apparaat biedt toegang tot ICU's (Inertial Motion Units), met inbegrip van het type versnellingsmeter en gyroscoop. Voor toegang tot voorbeelden van IKU's moet u eerst uw apparaat openen en configureren en vervolgens IMU-gegevens vastleggen. Zie Apparaat zoeken en openen voor meer informatie.

IMU-voorbeelden worden gegenereerd met een veel hogere frequentie dan afbeeldingen. Voorbeelden worden met een lagere snelheid aan de host gerapporteerd dan ze worden bemonsterd. Wanneer u wacht op een IMU-steekproef, zijn er vaak meerdere monsters tegelijk beschikbaar.

Zie de Hardwarespecificatie van Azure Kinect DK voor meer informatie over het IMU-rapportagepercentage.

Camera's configureren en starten

Notitie

IMU-sensoren werken alleen wanneer de kleur- en/of dieptecamera's actief zijn. IMU-sensoren kunnen niet alleen werken.

Gebruik k4a_device_start_cameras() om de camera's te starten.

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

Toegang tot IMU-voorbeelden

Elke k4a_imu_sample_t bevat een versnellingsmeter en gyroscoop die bijna tegelijkertijd worden vastgelegd.

U kunt de IMU-voorbeelden ophalen op dezelfde thread als u afbeeldingsopnamen krijgt of op afzonderlijke threads.

Als u IMU-voorbeelden wilt ophalen zodra deze beschikbaar zijn, kunt u een eigen thread aanroepen k4a_device_get_imu_sample() . De API heeft ook voldoende interne wachtrijen, zodat u alleen kunt controleren op voorbeelden nadat elke opname van een afbeelding is geretourneerd.

Omdat er een interne wachtrij van IMU-voorbeelden is, kunt u het volgende patroon gebruiken zonder gegevens te verwijderen:

  1. Wacht op een opname, met elke framessnelheid.
  2. Verwerk de opname.
  3. Haal alle IMU-voorbeelden in de wachtrij op.
  4. Herhaal het wachten op de volgende opname.

Als u alle IMU-voorbeelden in de wachtrij wilt ophalen, kunt u aanroepen k4a_device_get_imu_sample() met een timeout_in_ms van 0 in een lus totdat de functie retourneert K4A_WAIT_RESULT_TIMEOUT. K4A_WAIT_RESULT_TIMEOUT geeft aan dat er geen voorbeelden in de wachtrij zijn en dat er geen zijn aangekomen in de opgegeven time-out.

Verbruiksvoorbeeld

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

Volgende stappen

Nu u weet hoe u met IMU-voorbeelden werkt, kunt u ook