Apriltag lib Windowsra

Hogyan telepítettem az apriltaget meg mindent, hogy windowson működjön.

apriltag-gpu windows forráskód: https://github.com/wykvictor/AprilTag-GPU

kell még:

-Visual studio (nekem VS 14 2015 Community x64)

-OpenCV 3.2. fontos hogy 3.2 legyen! (CUDA kompatibilis kell, ezt később így telepítjük, ha alapból nem az): https://github.com/opencv/opencv/releases/tag/3.2.0

ezt később találtam, ez alapból tartalmazza a CUDA konfigurációt, lehet hogy ezt érdemesebb használni: http://jamesbowley.co.uk/downloads/

-CMake (legutóbbi verziót töltöttem le - 3.9.2): https://cmake.org/download/

-Cuda (ez valami NVidiás toolkit): https://developer.nvidia.com/cuda-downloads

-Eigen (mátrix kezelő, az apriltagek használják): http://eigen.tuxfamily.org/index.php?title=Main_Page

-getopt windowshoz (linuxos header amit windowson helyettesíteni kell. Lehet más getopt.h valahonnan máshonnan): https://github.com/skandhurkat/Getopt-for-Visual-Studio

(-gettimeofday windowshoz. Header fájlként lehet használni (linuxos időfüggvény): https://social.msdn.microsoft.com/Forums/vstudio/en-US/430449b3-f6dd-4e18-84de-eebd26a8d668/gettimeofday?forum=vcgeneral

vagy másik link (nem ezt használtam): https://gist.github.com/ugovaretto/5875385

Ez csak az apriltags_demo.cpp fájlhoz kell ami LINUXról lett portolva)

lépések: Az alap lépéseket a következő link alapján követtem (a readme alapján): https://github.com/wykvictor/AprilTag-GPU

-VS, és CMake installálás magától értetődő.

-Eigen kicsomagolása a .zip-ből

-getopt fájl bemásolása a VS include mappájába: Program Files\Microsoft Visual Studio xxx\VC\include

(Így ezzel már nem kell törődni az includeolásokkal, a VS magától megtalálja)

-Cuda installálása is a wizardon keresztül (drivert, meg GeForceExperincet is lehet vele telepíteni.) Samples-t mindenképp kell telepíteni! ez az 'SDK'.

Lehetőleg mindent telepítsen, ha van rá hely meg idő. ((sok hely kell neki. ~kb 6-7 giga kellett a C-n hogy legyen neki hely dolgozni, pedig nem is C-re telepítettem))

ha települt, érdemes újraindítani a gépet, főleg ha grafikus drivert telepített, vagy vacakolt a telepítés után. Meggyőződni hogy minden jó a driverrel!

Ha valahova kell a CUDA SDK gyökérkönyvtára, az az ahova a sample-ket telepítettük

-OpenCV telepítése CUDA támogatással - !!! le lehet tölteni készen, eleve konfigurálva: http://jamesbowley.co.uk/downloads/

Én magamtól telepítettem a következő guide segítségével (nem írom ki külön a lépéseket, de írok pár hozzáfűzést): http://jamesbowley.co.uk/build-opencv-v3-2-with-cuda-8-0-and-intel-mkltbb/

A CUDA_ARCH_BIN opcióhoz a GPU-k típusát ezen a linken lehet kikeresni: https://developer.nvidia.com/cuda-gpus

A beállításokra az apriltag-es readme is ad javaslatokat, ezeket érdemes beállítani: https://github.com/wykvictor/AprilTag-GPU

Kiadhat olyan hibát hogy nem találja a CUDA SDK ROOT DIR-t, ide azt kell megadni ahova a sample-k települtek. Ha nem talál valamit, meg kell adni a helyét

Ha nincs több piros a logban (csak ilyen developer warning), akkor lehet generálni.

A CMAKE configure és generate után az elkészült projektben a CMakeTargets/INSTALL projektet Visual Studioban meg kell nyitni és buildelni kell.

Ez nagyon fontos, gyakorlatilag ez installálja az OpenCV-t. Ezután a kész OpenCV libraryk az install mappán belül lesznek.

Ez sokáig tarthat, de ha nagyon sokáig tart (2-3 óra), és nem pörög az output log, lehet hogy nincs elég hely a lemezen. Ekkor fel kell szabadítani helyet, és újrabuildelni.

Ha bármi probléma előfordul, a guide alatti kommentek segíthetnek (http://jamesbowley.co.uk/build-opencv-v3-2-with-cuda-8-0-and-intel-mkltbb/)

-Az OpenCV telepítés után be is kell állítani. - !!! Akkor is, ha készen lett letöltve !!!. Ehhez egy jó guide: (Youtube - Setting Up OpenCV in Visual Studio) https://www.youtube.com/watch?v=l4372qtZ4dc

A lényeg a környezeti változó beállítása, includeok és libraryk beállítása.

A környezeti változó az opencv dll-eket állítja be (ha telepítettük az OpenCV-t az előző pont alapján, akkor az install mappán belülit kell beállítani)

A C/C++ includeok, az opencv projektek elején lévő #includeok helyét adja meg.

A Linker a szükséges libraryk helyét adja meg. A Linker -> Input meg a konkrét .lib-et amit használ.

Ha az OpenCV + CUDA megvan, és be van állítva:

-Az apriltag forráskód CMAKE buildelése

apriltag-GPU forráskód innen: https://github.com/wykvictor/AprilTag-GPU

CMAKE-ben megnyitni ezt a mappát mint source (GROUPED opció asszem jó ha be van pipálva)

Ha nem találja az OpenCV mappát, meg kell adni.

Ha nincs más hiba, lehet generálni.

-A generált Apriltag-demo solutiont kell megnyitni, és beállítgatni. (A CMAKE buildelés miatt már pár dolog be lehet állítva, a hiányzókat kell kitölteni)

C/C++ Additional include libraryket meg kell adni, amik hiányoznak. pl:

(-OpenCV az install mappán belüli include mappa.)

(-az eredeti apriltag forráskód include mappája (ahonnan buildeltük, nem a buildelt mappa!))

-Az Eigen mappa (simán kicsomagolás után)

Rövid magyarázat a projektről (Apriltag-demo solution):

a windows_port generál egy windows_port.lib fájlt a Debug mappába. Ez a .lib kell az apriltag projekthez (valahol hivatkozik rá).

az apriltag projekt eredeti beállítás szerint egy apriltag.dll fájlt generál. (Ezt lehet hogy át kell állítani .lib-re. Erről bővebben lentebb)

-saját projekt hozzáadása ehhez a solutionhöz. Ez lehet saját, vagy pl apriltags_demo.cpp

Létrehozni egy üres projektet. Win32 console app. Precompiled headers kikapcsolása a projekt generálásakor. A projektet hozzá kell adni a solutionhöz.

apriltags_demo.cpp esetén példa:

-az új projekthez Add -> Existing file apriltags_demo.cpp (többi source file törlése (pl stdafx meg ami még generálódott (főleg amiben van main() függvény)))

-Ugyanígy hozzáadni a gettimeofday.h headert (vagy végsősoron írni egy C++ verziót ami az időt számolja)

-Includeok és Linker beállítása a korábbi módokon: hiányzó Include mappák hozzáadása. (OpenCV, Eigen, AprilTag - az eredeti source include mappája, nem amit mi buildeltünk CMAKE-kel!)

Linker Additional library megadása: OpenCV library (...install\x64\vc14\lib))

Linker -> Input: Additional Dependency-hez hozzáadni az "opencv_world320d.lib"-et. (az előző ...install\x64\vc14\lib mappán belülről))

Ha már nincs error a kódban, jöhetnek a további beállítások, egyébként a maradó kódhibákat javítani kell.

(pl: #include "AprilTags/TagXY.h" lehet hogy ki kell törölni az "AprilTags/"-részt;

a linuxos maradékokat, pl EXPOSURE_CONTROL kiszedni;

Arduinos dolgok kiszedése ha csak gépen futtajuk)

-Az új projekt Reference-ét be kell állítani (a solution explorerben). jobklikk -> Add Reference -> bepipálni mind a 4et (ZERO_CHECK, windows_port, apriltag, ALL_BUILD - lehet hogy elég a windows_port és az apriltag)

(Nem lehetne buildelni az új projektet, mert external symbol hibákat dobna)

-Az apriltag projekt outputját át kell állítani. Project Properties -> General -> Project Default -> Configuration Type -> beállítani Static library (.lib)-re

!fölül a Target Extension legyen .lib!

(Ez azért kell, mert az apriltags_demo - vagy valahol a saját projektünk - hivatkozik a Debug\apriltag.lib-re. Ha nem állítjuk ezt át, ez a .lib nem fog létrejönni, mert ezt az apriltag projekt hozza létre a build során, de alapból nem .lib a kiterjesztése, hanem .dll, és ezt nem találja meg a mi projektünk. -Ettől függetlenül, lehet hogy később az kell hogy a .dll-t hozza létre...majd kiderül)

-Az új saját projektünket be kell állítani StartUp Projectre. jobbklikk a projektre -> Set as StartUp Project.

(Ez azért kell, mert csak a mi projektünk generál .exe fájlt, így ez kell a futtathatáshoz. )

Ha mindent jól csináltunk, akkor már nem csak Buildelhetünk, Debuggolhatunk is (futtathatjuk).

(az apriltags_demo.cpp-ben még át kell állítani pár dolgot, hogy fusson is, ne álljon le rögtön.

-m_exposure, m_gain, m_brightness beállítása -1-ről. pl: 20, 100, 150.

-a loopból az "if (cv::waitKey(1) >= 0) break;" kódosort kiszedni (rögtön breakel 1 kör után)

át lehet állítani valami másra (break nélkül örökké fog futni amíg le nem állítjuk a debuggolást)

-"cv::waitKey(1);" hozzáadása a loop végére (az előző pont helyett/annak módosításaként, de kell bele a cv::waitKey(x) - x miliszekundumig tartja meg a kirajzolt képet (0 örökre megtartja az alap képet))

)

Ezek után már futnia kell az apriltags_demo.cpp-nek, de nagyon lassan fut, kb 1,8 másodpercig tart egy frameben megtalálni a tageket.

2017.09.09. 22:59

Egri Péter