Toto je starší verze dokumentu!
Author: Jiri Krivak
Calculate the roll and pitch values from a 3-axis accelerometer. Use the development board STM32F4DISCOVERY with LIS302DL / LIS3DSH devices. Consider any accelerometer position relative to the base, i.e. implement the compensation by de-rotation of input data vector as described in DT0076.
For the project, we selected Development Board from STMicroelectronics STM32F4 - Discovery
The application was created by using HAL Drivers, STM32F4-Discovery (to map PINs for Discovery), Driver for accelerometer from STMicroelectronics. Next, we use a Middleware library from STMicroelectronics to create Virtual Com Port. We also used ARM GCC Libraries: stdio.h, stdlib.h, math.h The app was designed for Em::Bitz and its integrated ARM GCC Compiler. Because we use function Printf with floats we need to give the GCC compiler flag that tells it that floats are used for string formatting we also use mathematical library math.h, so we need to give the linker flag to include mathematical libraries. GCC Compiler Flag: -u _printf_float Linker Flag: -lm
To create Virtual Com Port we used middleware libraries from STMicroelectronics. For easier communication, we remapped the Printf function so that when it is called we send data over the USB VCP. Remaping of Printf in ARM GCC is done by modificiation of _write function.
int _write(int fd, char * str, int len) { for (int i = 0; i < len; i++) { VCP_write(&str[i],1); } return len; }
We used Legacy Middleware library for USB so it is necessarz to instal VCP Driver from STMicroelectronics.
Ve video ukázce je předveden výstup zpracování jednoho obrazu všemi implementovanými metodami. K Raspberry Pi je připojení realizováno pomocí VNC, následné nahrávání obrazu je prováděno z windows, aby nedocházelo k zatížení procesoru při výpočtech enkódováním nahrávaného obrazu.
V dolní části pod aplikací je otevřen terminál se spuštěnou konzolovou aplikací htop pro sledování využití jader a paměti. V druhém terminálu je spuštěna smyčka odečítající současný takt a teplotu jádra procesoru. Příkaz kterým je tohoto odečítání dosaženo je zde:
while true; do vcgencmd measure_clock arm; vcgencmd measure_temp; sleep 1; done
Kompletní zdrojový kód aplikace je dostupný na GitLabu:
https://gitlab.com/tbravenec/image_processing_on_rpi
Nebo poslední verze git repozitáře před odevzdáním:
Aplikace má implementovány všechny metody zpracování obrazu zmíněné v zadání, prahování a detekce hran pomocí filtru sobel, mají identický výsledek jako implementace pomocí OpenCV, cannyho detektor hran implementovaný manuálně vyžaduje pro podobný výsledek k OpenCV nižší práh, to může být dáno odlišnou implementací funkce pro potlačení nemaximálních pixelů a nebo odlišně navrženým prahováním s hysterezí. K-Means clustering podává mírně odlišné výsledky, což je ale očekávatelné, když jsou počáteční podmínky generovány náhodně.
Neúmyslným vedlejším efektem psaní aplikace pro Raspbian, je že je aplikace kompatibilní nejen s Raspberry Pi, ale i jakýmkoliv jiným procesorem a operačním systémem, pro který existuje implementace GTK, OpenMP a OpenCV.