SLAM
|
Jedná se o hlavní třídu programu, v které se používají všechny zbylé třídy a zpracovují se vstupy od uživatele. V konstruktoru se inicializují výchozí hodnoty proměnných a spojují se signály se sloty pomocí funkce connect() (vysvětlení v další kapitole). Používají se dvě mapy map a mapRender, kde mapRender je pouze pro vykreslování a má nastavenou maxDistance na 1500 ( MapClass).
Při připojeném LIDARU nebo po nahrání dat ze souboru, jsou všechny oblasti uložené v DataPreProcessor ve struktuře area_t. Po celou dobu běhu programu se s daty v této třídě pracuje a aktualizují nebo doplňují se tam hodnoty. Jedinou výjimkou je mapa, která má svůj soubor bodů a důležitých objektů.
Důležité objekty se ukládají také do struktury area_t, která obashuje rohy, přímky, průsečíky. Ve výsledné mapě se potom objekty doplňují a důvěryhodnost, kterou představuje struktura landmark_t. K hledání důležitých objektů se používá třída LandmarkExtraction.
V mainwindow.cpp se také vyskytují funkce bez příslušnosti k nějaké třídě. Tyto funkce jsou spouštěny ve vlastních vláknech a jedná se o fileToDataReader, loadSubmap, twoPointSetsRegistrationOneStep, landmarkExtractionThread.
Pro připojení a komunikaci se serverem se používá třída UdpClient.
Signály a sloty se používají ke komunikaci mezi objekty, kde signál se slotem lze spojit pomocí funkce connect(). Oba typy se definují v hlavičkovém souboru. Signál si lze představit jako odesílatele a Slot jako příjemce. Pokud chceme aby se signál v daném okamžiku emitoval (odeslal), stačí napsat na tom místě:
Pro příjem signálu, musí být funkce buď typu private nebo public slot. Potom k spojení se používá funkce connect (viz. příklad dole), kde tato funkce má 4 parametry. První je odesílatel signálu, následuje definice, který signál chceme odchytit, dále je to příjemce. Pokud se použije this, znamená to "tato třída" (v příkladě MainWindow). A poslední parametr je funkce neboli Slot, ktery signál zpracuje.
Pro více informací, dokumentace QT http://doc.qt.io/qt-4.8/signalsandslots.html
Zatím není vytvořen instalační program, proto je potřeba aplikaci spouštět z QT Creator. K spuštění je potřeba knihovna Armadillo a FGT. Armadillo doporučuji nahradit pomocí BLAS a LAPACK, které jsou dostupné předkompilované knihovny. Při změně těchto knihoven není potřeba v kódu nic měnic, akorát je potřeba tyto knihovny přidat do .pro souboru (stále se používá hlavičkové soubory armadilla). Při stahování Armadilla z oficiálních stránek je potřeba v config.hpp povolit použití BLAS a LAPACK a zakázat používat WRAPPER. V případě FGT se může použít zkompilovaná verze, a nebo se může obsah složky src, nakopírovat k zdrojovým souborům SLAM aplikace (snadnější).
FGT: https://github.com/gadomski/fgt
Zkompilované BLAS a LAPACK pro Windows: https://icl.cs.utk.edu/lapack-for-windows/lapack/
Doporučuji používat kompilátor MinGW, protože kompilátory od Visual Studia mají často problémy s knihovnami.
Správnou funkci programu lze poznat po nahrání mapy a spuštění registrace. Pokud registrace proběhne strašně rychle bez skládání mapy atd. je problém v linkování knihoven (ne vždy se tyto problémy objeví při kompilování).