czech english

OAK-D Pro

chytrá 3D OpenCV kamera

Co když zkombinujete stereo-kameru s malým počítačem s podporou pro výpočet neuronek? Přidáte-li možnost nasvícení scény a vše to zabalíte do malé krabičky tak dostanete OAK-D od firmy Luxonis. Ale to rozhodně není vše … Blog update: 29/3/2022 — IMU a SLAM

Obsah



Blog

22. březen 2022 — Měsíc čekání

Jak začít? O OAK-D jsem poprvé slyšel od týmu Sĺňava (Robotour 2021). Pak jsem se cca před měsícem dozvěděl o existenci firmy Luxonis a rozhodl si udělat představu „z první ruky”. Doporučení jsem dostal na novou kameru OAK-D Pro, která je zatím zařazena v beta programu. Byl jsem i varován, že doručení bude nějaký čas trvat (expeduje se z Hong Kongu).
Vlastně mne velmi potešilo, když objednávka byla ještě ten den potvrzena a druhý den expedována … tak to třeba nebude tak dlouho trvat? Ale trvalo. Přes týden to viselo v Belgii na celnici (to je ta „výhoda” online sledování — člověk se může permanentně nervovat, místo aby počítal s dlouhou dobou a pak byl překvapen) a vrchol byl pak v Čechách. Z adresy vypadly všechny znaky s diakritikou (na rovinu bych jí nepoužíval, ale mám pocit, že tam byla nějaká nápověda pro dohledání adresy, ale už je to dlouho, takže ani tím si nejsem jist). V každém případě „tracking number” není to samé v ČR a pokud ho nemáte, tak se dohledává podle adresy. Zkrátím to, skončilo to v koši „nedoručitelné”, ale po dvou dnech telefonování a „intervencí” se balíček na depu v Praze našel. Doporučení: odmažte diakritiku.
A když už jsem měl krabičku doma, tak jsem se zase nemohl rozhoupat jí vůbec otevřít. Začal jsem totiž pořádně „listovat” dokumentací a narazil jsem na: Due to the large power consumption of dot projector/illumination LED, a Y-adapter is required when using these functions! F-slovo. Znamená to, že teď budu muset objednávat nějaky Y-adaptér, abych si mohl kameru vůbec pustit?! To mi asi vzalo trošku vítr z plachet. Pak jsem alespoň otevřel krabičku a našel jsem tam toto:
Obsah krabičky
Obsah krabičky
Vlastně tedy dobrá a špatná zpráva:
  • Y-adaptér je součástí balení
  • trošku to vypadá, že tam něco chybí, třeba kabel?
Kabel tam byl — pod krabičkou. Ale jestli tam má být takto poloprázdná krabička úplně nevím. Na druhou stranu i druhý kus vypadal stejně.
A teď dobré zprávy — First steps with DepthAI … prostě návod co udělat od zapojení nové kamery do USB konektoru. A fungovalo to bezchybně!
p.s. a ano, na extra přísvit a extra zdroj dojde někdy později … tj. na první pokusy nebyl nutný.

25. březen 2022 — Druhý krok

První krok byl snadný, ale co bude druhý krok? Napsal bych si nějaky mini-prográmek, ale jaký? Konečně jsem začal více koukat do dokumentace API a užitečný mi přijde tento obrázek:

Host je váš počítač a OAK Device je „chytrá kamera” … stále nevím, co OAK (v překladu dub) znamená? Node, connection a pipeline připomíná klasický robotický systém, jenom to vše běží přímo na „kameře” a nejspíše se to musí připravit předem. XLink pak zajišťuje komunikaci tam a zpět.
Kameru mám zatím zapojenou přímo do notebooku a tak její chytrost úplně nevyužiji. Co by mi ale přišlo zajímavé vyzkoušet je, co když se XLink přeruší? Jede pipeline vesele dál? Pak by paradoxně Y-adaptér, na který jsem ještě nedávno „nadával”, byl přesně ten kousek HW, který by mi průběžné odpojování od počítače umožnil. Možná.
Koukal jsem tedy na standalone mode a chyba lávky: Standalone mode is only possible on OAKs that have on-board flash memory, which are currently OAK IOT and OAK POE camera models. Je tady asi na místě zdůraznit, že Luxonis nabízí několik řad zařízení a tak bych doporučil si to předem nastudovat a volit podle plánované aplikace.
A co by to „offline” resp. „nezávisle” dělalo? Může si kamera po začátek pamatovat několik obrázků nebo dokonce video? Podle příkladu RAM usage: All OAK devices have 512 MiB (4 Gbit) on-board RAM, which is used for firmware (about 15MB), assets (a few KB up to 100MB+, eg. NN models), and other resources, such as message pools where messages are stored. … teď jsem si říkal, co je ten 4 Gbit? Rychlost? Jiný model? Well … 8x 512MB = 4G bitu … asi.
Vypadá to, že můžu rovnou použít demo system_information.py:
Ddr used / total - 0.13 / 339.99 MiB
Cmx used / total - 2.06 / 2.50 MiB
LeonCss heap used / total - 7.54 / 78.28 MiB
LeonMss heap used / total - 2.95 / 41.54 MiB
Chip temperature - average: 24.12, css: 25.67, mss: 23.69, upa: 23.44, dss: 23.69
Cpu usage - Leon CSS: 10.64%, Leon MSS: 1.98 %
Kód je kratký, jen si teď neumím představit, jak otevřít dai.Device bez pipeline, která pro nastartování obsahuje dva uzly: dai.node.SystemLogger a dai.node.XLinkOut. I to prolinkování sysLog.out.link(linkOut.input) vypadá přímočaře.
p.s. tak schválně, jestli mi někdo poradí: Reconnection to running OAK device?

28. březen 2022 — Standalone mode

Na odpověď jsem nemusel dlouho čekat — Hussain psal: What I understood is that you want to run the OAK in standalone mode. If that was the case, check this documentation.
A pak se ještě ozval Erik: ... that's not possible, after you terminate the connection with the device, the device will remove the pipeline/assets to be ready for the next connection. As Hussain mentioned, if you would like to run pipeline in standalone mode, check the docs page he linked. This still wouldn't allow you to do exactly what you want, but you could eg. stream results via WiFi (OAK IoT) or ethernet (OAK PoE) to the server.
Nešlo by to nějak obejít, když OAK IoT ani PoE nemám? Mimochodem „test komunity” bych považoval za úspěšný. Mám v plánu někdy revidovat úvodní odstavec a doplnit tam, např. že Luxonis má za sebou úspěšnou Kickstarterovou kampaň opencv-ai-kit-lite ($1,136,926 USD by 8,640 backers) [je tam takové množství projektů, až na mne zase padá depka a jestli se mám vůbec o něco snažit ] Také přemýšlím, jestli O=OpenCV, A=Ai, K=Kit??
No nic, zpět k Standalone modeyou first need to remove all XLinkOut and XLinkIn nodes. No jo, ale co dál? SPIOut nepoužiji, protože nemám SPI, a script node jede přes ten Ethernet.
Koukám, že OAK-D Pro má přímo dedikované issue … hledal jsem, jak se vypíná/zapíná podsvícení. Asi vyjímečně nemá cenu hledat přes Google, a je rychlejší proklikat dokumentaci, tj. v Device jsou funkce setIrFloodLightBrightness() a setIrLaserDotProjectorBrightness().
Ale to jsem se „trošku” odchýlil od tématu, ke kterému vlastně nemám více jak „tudy ne”.

29. březen 2022 — IMU a SLAM

Teď je ráno, na rozdíl od včerejšího zápisu, tak je naděje, že budu mít více optimismu než po práci. Navíc téma je snad přímočaré a měly by k tomu být rovnou funkční příklady. Motivace je náhrada Realsense T264 tracking kamery (Limited Lifetime Product) za OAK-D.
Ještě co jsem o víkendu (?) tak narychlo procházel, tak IMU do SLAMu zatím integrovaná není, tak to může být takový self-test, jak jsou oba výstupy konzistentní. No asi jsem zase naivní, ale uvidíme.
Nejprve tedy IMU (Inertial Measurement Unit). K dispozici jsou hned dva příklady:
První bych viděl na raw data a druhý jako integraci. Píšou tam nějaké „nezdravé” Herzy (500Hz a 400Hz), ale to se může časem hodit.
Tak jo, první příklad fungoval bez problémů:
Accelerometer timestamp: 5613.242 ms
Accelerometer [m/s^2]: x: 5.200206 y: 0.019154 z: -8.820239
Gyroscope timestamp: 5613.925 ms
Gyroscope [rad/s]: x: 0.014914 y: 0.003196 z: -0.008522
Accelerometer timestamp: 5615.379 ms
Accelerometer [m/s^2]: x: 5.190629 y: 0.000000 z: -8.820239
Gyroscope timestamp: 5616.424 ms
Gyroscope [rad/s]: x: 0.009587 y: 0.001065 z: -0.005326
a druhý stejně tak:
Rotation vector timestamp: 2707.787 ms
Quaternion: i: 0.000305 j: -0.964600 k: -0.001465 real: 0.263672
Accuracy (rad): 3.141602
Rotation vector timestamp: 2709.946 ms
Quaternion: i: 0.000305 j: -0.964600 k: -0.001465 real: 0.263672
Accuracy (rad): 3.141602
SLAM (Simultaneous Localization And Mapping) jsem na stejné stránce mezi příklady nenašel, ale byl „hned vedle” na stránce věnované Spatial AI:
  • SLAM with OAK … tak to asi nebude jen „copy and paste”: We plan on creating our own visual-inertial SLAM project that would use on-device feature tracking (using FeatureTracker node) and intertial data (using IMU node), if the device has an IMU sensor onboard.
Jsou tam ale odkazy na community projects: OAK-D ORB_SLAM3 Experiment a deptha-slam … (ještě tam byl ArduCam SLAM). Hmm, tak asi zatím nic. Nevýhoda „ranního hraní” spočívá v tom, že v tom nejlepším toho člověk musí nechat a „jít do práce”. V tomto experimentu alespoň vidím jistou naději. To be continued