Jak szybko uruchomić projekt trójwymiarowego optycznego pomiaru ToF
Dzięki dostępności precyzyjnych, szybkich, wielopikselowych czujników ToF deweloperzy mogą wdrażać bardziej zaawansowane, trójwymiarowe algorytmy pomiarowe.
Aby zapobiec utracie danych pomiarowych, biblioteka główna zapobiega rozpoczęciu nowego cyklu pomiarowego przez zablokowanie bufora danych do czasu uruchomienia procedury ewaluacji. W związku z tym deweloperzy zazwyczaj przewidują dwa bufory dla danych nieprzetworzonych, co umożliwia wykonywanie zadań pomiarowych i ewaluacyjnych naprzemiennie.
Dla deweloperów aplikacji procedury biblioteki głównej stanowią osłonę dla charakterystyki kalibracji, pomiarów i ewaluacji. W rzeczywistości do uzyskania danych pomiarowych do kodu aplikacji wysokiego poziomu deweloperzy mogą wykorzystać zestaw ewaluacyjny i aplikację AFBR-S50 Explorer jako kompletną platformę prototypowania.
Dla deweloperów, którzy muszą wdrożyć niestandardowe oprogramowanie, przewidziano zestaw rozwojowy oprogramowania AFBR-S50, który łączy w sobie wstępnie skompilowane moduły biblioteki głównej z kilkoma przykładami oprogramowania. Dzięki niemu deweloperzy mogą szybko tworzyć własne aplikacje do pomiarów czasu przelotu (ToF), bazując na przykładach dostępnych w zestawie. Deweloperzy mogą uzyskać dostęp do funkcji sprzętu AFBR-S50MV85G i biblioteki głównej AFBR-S50 w spersonalizowanym kodzie oprogramowania, wywołując funkcje w interfejsie API zestawu rozwojowego oprogramowania AFBR-S50 i określając własne funkcje dla różnych wywołań obsługiwanych przez bibliotekę główną (patrz ponownie ilustracja 7).
Firma Broadcom udostępnia obszerną dokumentację interfejsu API i przykładowego oprogramowania, umożliwiając deweloperom szybkie dostosowanie przykładów oprogramowania do ich potrzeb lub rozpoczęcie pracy od zera. W rzeczywistości podstawowy cykl pomiaru i ewaluacji jest prosty - wystarczy dopasować funkcje niestandardowe i wywołania interfejsu API do cyklu pomiarowego (patrz ponownie ilustracja 8). Na przykład omówiony wcześniej cykl pomiarowy obejmuje trzy fazy: integrację urządzeń ToF, odczyt danych i ewaluację. Podstawowe wywołania interfejsu API biblioteki potrzebne do zainicjowania tych trzech faz to:
- Argus_TriggerMeasurement(), które asynchronicznie uruchamia pojedynczą klatkę pomiarową
- Argus_GetStatus(), które zwraca STATUS_OK po pomyślnym zakończeniu pomiaru
- Argus_EvaluateData(), które dokonuje ewaluacji użytecznych informacji na podstawie nieprzetworzonych danych pomiarowych
Firma Broadcom demonstruje tę podstawową pętlę pomiarową w przykładowej aplikacji dołączonej do dystrybucji zestawu rozwojowego oprogramowania (SDK), pokazanej na listingu 1.
Kopiuj int main(void) { status_t status = STATUS_OK; /* Initialize the platform hardware including the required peripherals * for the API. */ hardware_init(); /* The API module handle that contains all data definitions that is * required within the API module for the corresponding hardware device. * Every call to an API function requires the passing of a pointer to this * data structure. */ argus_hnd_t * hnd = Argus_CreateHandle(); handle_error(hnd ? STATUS_OK : ERROR_FAIL, "Argus_CreateHandle failed!"); /* Initialize the API with default values. * This implicitly calls the initialization functions * of the underlying API modules. * * The second parameter is stored and passed to all function calls * to the S2PI module. This piece of information can be utilized in * order to determine the addressed SPI slave and enabled the usage * of multiple devices on a single SPI peripheral. */ status = Argus_Init(hnd, SPI_SLAVE); handle_error(status, "Argus_Init failed!"); /* Print some information about current API and connected device. */ uint32_t value = Argus_GetAPIVersion(); uint8_t a = (value >> 24) & 0xFFU; uint8_t b = (value >> 16) & 0xFFU; uint8_t c = value & 0xFFFFU; uint32_t id = Argus_GetChipID(hnd); argus_module_version_t mv = Argus_GetModuleVersion(hnd); print("\n##### AFBR-S50 API - Simple Example ##############\n" " API Version: v%d.%d.%d\n" " Chip ID: %d\n" " Module: %s\n" "##################################################\n", a, b, c, id, mv == AFBR_S50MV85G_V1 ? "AFBR-S50MV85G (v1)" : mv == AFBR_S50MV85G_V2 ? "AFBR-S50MV85G (v2)" : mv == AFBR_S50MV85G_V3 ? "AFBR-S50MV85G (v3)" : mv == AFBR_S50LV85D_V1 ? "AFBR-S50LV85D (v1)" : mv == AFBR_S50MV68B_V1 ? "AFBR-S50MV68B (v1)" : mv == AFBR_S50MV85I_V1 ? "AFBR-S50MV85I (v1)" : mv == AFBR_S50SV85K_V1 ? "AFBR-S50SV85K (v1)" : "unknown"); /* Adjust some configuration parameters by invoking the dedicated API methods. */ status = Argus_SetConfigurationFrameTime( hnd, 100000 ); // 0.1 second = 10 Hz handle_error(status, "Argus_SetConfigurationFrameTime failed!"); /* The program loop ... */ for (;;) { myData = 0; /* Triggers a single measurement. * Note that due to the laser safety algorithms, the method might refuse * to restart a measurement when the appropriate time has not been elapsed * right now. The function returns with status #STATUS_ARGUS_POWERLIMIT and * the function must be called again later. Use the frame time configuration * in order to adjust the timing between two measurement frames. */ Argus_TriggerMeasurement(hnd, measurement_ready_callback); handle_error(status, "Argus_StartMeasurementTimer failed!"); STATUS_ARGUS_POWERLIMIT) { /* Not ready (due to laser safety) to restart the measurement yet. * Come back later. */ continue; } else { /* Wait until measurement data is ready. */ do { status = Argus_GetStatus(hnd); } while (status == STATUS_BUSY); handle_error(status, "Waiting for measurement data ready (Argus_GetStatus) failed!"); /* The measurement data structure. */ argus_results_t res; /* Evaluate the raw measurement results. */ status = Argus_EvaluateData(hnd, &res, (void*) myData); handle_error(status, "Argus_EvaluateData failed!"); /* Use the obtain results, e.g. print via UART. */ print_results(&res); } } }
Listing 1: Przykładowy kod w dystrybucji zestawu rozwojowego oprogramowania (SDK) AFBR-S50 firmy Broadcom demonstrujący podstawowy schemat projektowania dla pozyskiwania i oceny danych ToF z modułu AFBR-S50MV85G. (Źródło kodu: Broadcom)
Jak widać na listingu, trzy wywołania funkcji interfejsu API wymienione wcześniej stanowią podstawę wykonywania cyklu pomiarowego. Studiując dokumentację API i inne przykładowe aplikacje w zestawie rozwojowym oprogramowania, deweloperzy mogą szybko wdrożyć złożone rozwiązania 3D, wykorzystując zdolność modułu do dostarczania danych potrzebnych do określenia zaawansowanych elementów charakterystyki, takich jak prędkość, kierunek i kąt nachylenia obiektu docelowego.
Podsumowanie
Optyczne urządzenia do pomiaru czasu przelotu (ToF) umożliwiły opracowanie rozwiązań dla różnych dziedzin wymagających precyzyjnego pomiaru odległości, jednak ograniczenia wynikające z zasięgu pomiarowego, dokładności i niezawodności wykluczyły możliwość ich stosowania w przemysłowych układach pomiarowych wymagających urządzeń o niskim poborze mocy, będących w stanie zapewnić dokładne wyniki przy większym zasięgu. Zintegrowany optyczny podsystem pomiaru czasu przelotu (ToF) firmy Broadcom spełnia nowe wymagania, umożliwiając opracowanie urządzeń pomiarowych następnej generacji. Korzystając z zestawu ewaluacyjnego opartego na wspomnianym urządzeniu, deweloperzy mogą szybko wdrożyć systemy do precyzyjnego pomiaru w jednym wymiarze, a także do złożonego śledzenia ruchu obiektów w trzech wymiarach.
Autor: Stephen Evanczuk
Kontakt w Polsce
Arkadiusz Rataj
Sales Manager Central Eastern Europe & Turkey
Digi-Key Electronics Germany
0048 696 307 330
arkadiusz.rataj@digikey.com
poland.support@digikey.pl