Jak nestavět ROV

Počátek

To se mně takhle jednou večer někdy na konci března 2018 zeptal kamarád, jestli bych s ním, nechtěl postavit ROV (Remote Operated Vehicle), na což existuje jediná správná odpověď, takže jsem souhlasil.

První zádrhel se ale objevil velmi rychle, začal mluvit o vrtulích a potápění - Ono to totiž měla být ponorka na dálkové ovládání. Což takový problém taky není, kolem hřídele se dá simerink nebo dva, celé se to zavře do krabice na rozvaděče s IP67 a jedeme dál.

Druhý zádrhel přišel o týden později, kdy mi kamarád řekl, že to teda potvrdil. Na otázku co, odpověděl s úsměvem: "No přece to ROVčko na letošní expedici" Letošní expedice - tím myslel akci, která byla dva už za dva měsíce - to by takový problém taky nebyl, holt by se vzalo něco dražšího, ale skladem, ale šlo by to taky. Hlavní zádrhel ale byl, že by se ta ponorka měla potápět do 60m hloubky. Víte jaký je tlak v hloubce 60 metrů? No, už docela velký - cca 6 atmosfér, neboli 600 kPa, nebo také 6 kg/cm^2, což už ale běžná krabice na rozvaděč nezvládne a simerink asi taky ne.

A takhle jsme se tedy ve třech lidech vrhli na stavbu dálkově ovládané ponorky, která měla být alespoň částečně funkční během doby, kdy si u běžného projektu ještě stále deláte rešerši, testujete jednotlivé prvky a pomalu začínáte mít představu o tom, jak velké to asi bude a kolik to asi bude stát.

T = -21 dní : Lehké oťukávání HW

Během pár posledních dní jsem si hrál s I2C sběrnicí na Pine64, abych mohl rozhýbat servo motory pro kamery a řídit ESC moduly velkých motorů apak jsem zjistil nepříjemnou věc - Kamera pro Pine64 ještě pořád nefunguje jak by měla - nefunguje nahrávání, tále jsou v obrazu relikty :/Ale přišla záchrana - vždyť mám plnou krabici dalších desek - například Rock64, který má o jedno USB víc než Pine64, takže bych nefunkční kameru mohl nahradit libovolnou USB kamerou, která se mi válí v šuplíku. Během pár hodin práce ale přišlo na řadu vystřízlivění - Rock64 je primárně používaný jako NAS, nebo multimediální centrum. Nikdo v komunitě ho asi ještě nepoužil pro řízení robota, takže nemá funkční sběrnice - zrovna konkrétně I2C, kterou se ovádá modul pro motory.

Takže Pine je bez kamery, Rock je bez motorů... vidět víc, nebo se hýbat? Volba je jasná, zpátky na stromy a do děr, jedeme na Pine =)

T = -17 dní : Díly začínají přicházet

Od posledně se toho povedlo dost - přišly motory i ESC (juch), našli jsme příhodnou hřídel, která půjde jednoduše použít a dokonce rovnou s redukcí z 3mm D-hřídele motoru na naše vrtule se závitem M4. A taky se nám povedlo zase překopat celý návrh motorů, protože nakonec byly pořízeny vrtule se závitem M5 a pousta dalších věcí, kterým zatím nerozumím, takže další kreslení v CADu zatím vzdávám, ale snad budu brzy osvícen...

T = -10 dní : Motory žijou

Konečně jsem si udělal čas a vrhnul se na tu část práce, kterou jsem dlouho opomíjel, a to programování pohonů. Moje představa už od začátku vypadala asi takto:

Realita vypadala trochu jinak, protože:

  1. mi došlo, že budeme potřebovat ukládat spoustu věcí a nechtěl jsem to posílat všechno přes LAN kabel, tak jsem místo Pine64 vzal SoPine (něco jako Compute modul od RaspberryPi), který je vybavený eMMC pamětí, kam se dá zapisovat rychlostí kolem 100 MB za vteřinu
  2. na jedné desce jsem měl z dřívějška obrácené napájené konektory, ale to se mi podařilo opravit během půl hodiny, takže žádné extra zdržení
  3. knihovny pro GPIO piny, které fungovaly na Pine, ale na SoPine už nefungovaly a neustále jsem dostával chybu, že to je knihovna pro RaspberryPi. Po přibližně dvou hodinách se mi podařilo chybu najít a opravit, ale moc jsem si nepomohl.
  4. knihovny pro ovládání desek se nainstalovaly naprosto bez problému
  5. problém ale přišel hned při prvním spuštění - Zase chyba platformy: "Tato knihovna je určená jen pro Raspberry Pi", ale už jsem tušil, kde mám chybu hledat, tak jsem jí za chvíli obešel. Nadšení mi vydrželo jen chvíli, hned jsem se dostal k další chybě, a to jaká I2C sběrnice se má požužít pro komunikaci s deskami. Ta už byla trochu horší, ale i I2C se mi podařilo rozhýbat. A hned potom přišla další rána - "Nemohu najít modul spidev". Modul spidev je vývojářský modul pythonu pro sběrnici SPI - ten ale Pine stále ještě nemá. Po šesti hodinách hledání a opravování chyb jsem se dostal k tomu, že bez někoho zkušenějšího Pine nebude umět ovládat motory.

Naštěstí se mi válelo v šuplíku ještě RaspberryPi Zero, pro které původní knihovna na ovládání motorů byla napsaná, ale jelikož RasPi Zero nemá žádné vhodné konektory (LAN, nebo alespoň několik USB), tak Pine64 nemůže být nahrazeno, ale musí tam být desky obě. Takže další operační systém, který je háklivý na uSD karty. Ale naštěstí to snad půjde ovládat přes sériový port příkazy rovnou z Pine64 (SW samozřejmě budu muset taky napsat, ale co, hlavně když se budou točit motory)

Nový postup už vypadal skoro triviálně:

  1. rozjet Raspi dle návodu
  2. povolit SPI a I2C
  3. naistalovat knihovnu pro výkonové desky
  4. vyzkoušet, že to všechno funguje
  5. dodělat knihovnu pro komunikaci s Pine přes sériový port

No, první tři body proběhly naprosto v pořádku, problém se objevil až u bodu 4., kde mi to nahlásilo: "Tato knihovna je určená jen pro Raspberry Pi". No nekleplo by vás z toho? Mě málem jo. Ale chyba byla naštěstí na dobře známém místě, takže stačilo "jen" přidat další platformu a najednou to fungovalo.

Konečně točíme střídavými i stejnosměrnými motory, ovládáme serva a zbývá už jen dopsat ovládací modul ...

T = -7 dní : Objednáváme na poslední chvíli

To se občas povede, že na některé věci si vzpomenete až po týdnu... U tohohle projektu to byly jenom LEDky pro osvětlení (100 m pod vodou toho bez nich fakt moc vidět nebude) a pak nějaké kabely pro přenos dat a obrazu, zdroje pro ledky atd. Největší zrada ale nastala u 10W LEDek, které jsou pouze v podobě čipu, který se pájí ideálně v peci, aby byl dostatečný odvod tepla do tišťáku. Na to ale už není čas, takže jsme objednali hromadu menších čipů, které to snad nahradí. A tučné poznámky u čipů - "Nevystavujte čočku nárazům nebo tlaku, hrozí zničení!" budeme muset obejít nějak jinak, protože zatím se počítalo, že LEDky budou volně v prostoru.

Taky jsem si raději objednal pájku, která se dá napájet i z LiPolky (4článek), jen až u potvrzení objednávky jsem se koukal, že mi příjde nejdřív tři dny po odjezdu. Snad se němci pochlapí a pošlou jí ještě dneska, ať jí tu ve čtvrtek mám.

T = -5 dní : Celodenní stavění

Máme před sebou poslední víkend před odjezdem, takže ne, nebudeme testovat v nějakém lomu, jestli všechno funguje jak má ale budeme stavět základní konstrukci, a testovací přípravek pro motory, abychom věděli který z motorů s kterou vrtulí nakonec budeme na ponorku montovat. Jelikož sraz byl pránovaný na 9 ráno a měl být na celý den, tak jsme měli v plánu spoustu věcí, ale jak to již chodí při výrobě prototypu, dostalo se jen na pár prvních bodů a zbytek musí počkat na někdy...

Minimal setup pro testování motorů

Přípravek na testování motorů fungoval dle očekávání, jen při stavbě došlo k pár nedorozuměním, takže jsme nakonec byli rádi, že jsme nezkracovali železný profil, abychom mohli chybějící délku jednoho ramene doladit právě díky vysunutí tohoto profilu. A aby to nevypadalo moc růžově, tak jsem během testování zapojení motorů zjistil, že se motory na dvou článkovou baterii vůbec neroztočí, jen sebou divně škubou a pokud jim člověk pomůže rukou, tak se teda roztočí, ale moc se jim nechce. Naštěstí jsme měli s sebou i tří článkovou baterii, se kterou už rozběhy byly výrazně lepší. Teda, jen do doby, než jsme na motor namontovali vrtuli a ponořili ho do vody. V tu chvíli se motor odmítnul rozjet a vydával zvuky připomínající startování auta. Snad nám ale pomůže, když přidáme ještě jeden článek - původně totiž měly motory napájet dvou článkové baterie, které jsme objednali dvě. No, až nám příjdou, tak to vyzkoušíme znova a snad už to bude fungovat, protože jestli ne, tak opravdu netuším, s čím vlastně pojedeme do chorvatska. (teda tuším, ale na dálku ovládaná ponorka to nebude)

Pozitivní věc na tomto dni (ano, testování vrtulí byla ta jediná věc, kterou jsme stihli a to jsme testovali obě na jednom motoru, druhý motor jsme si nechali do zálohy) je, že jsem zjistil, že musím zabudovat obě dvou článkové baterie do hlavní gondoly a k tomu i tu tří článkovou, takže alespoň část vnitřní zástavby už je jistá. Teď doladit ten zbytek a snad to nahodíme alespoň ve čtvrtek před odjezdem. Opravdu nerad bych tam jel s ROV v rozsypu a stále ještě tuhnoucím epoxidem kolem kabelů.

T = -3 dny : Další materiál na stavbu

Dneska mi dorazil balíček s LEDkami, ethernetovým kabelem (sakra, musím najít ty koncovky) a kolega vyzvednul O-kroužky pro gondolu na kameru. Další práce s přípravky a kompletováním... Navíc time management nějakých dobráků je dokonalý. kolegovi totiž někdo prořezal všechny čtyři kola u auta, takže zásilka v praze nebude na oběd, ale spíš až dlouho po večeři. No co, den ještě ani pořádně nezačal, tak můžu dělat hromadu jiných věcí.

Jo a založil jsem repozitář na githubu, kam budu postovat zdrojáky z robota (pokud se dostanu na internety). Rozhodně je to asi nejvhodnější zálohovací médium, které tam bude dostupné, pokud si představím, že mám dva počítače v ponorce a třetí na klíně na lodi ... (Pine64+, RaspberryPi Zero, PineBook 14" s matným displayem)

Večer jsem se konečně potkal s kolegou a dostal jsem dokonce baterie pro motory, takže zítra bude test na 4 články - hlavně ať to funguje, pět článků už nám asi usmaží ESC a nový do pátečního rána rozhodně neseženeme...

T = -2 dny: Není čas vůbec na nic...

Kdo doufá, že sem budu psát co se děje během posledních dnů, bude zklamán stejně jako já... nemám na nic, ale vůbec na nic čas :-/

Jo, ale aspoň malý update - přišel mi solární panel, ale aby to nebylo jen pozitivní, tak koaxiální kabel stále ještě nemáme... takže zalývat epoxidem budeme až v chorvatsku...

T = -12 hodin: konečně začínám balit.

Už jsem stihnul vyrobit dekly pro gondoly, uklidit sklep, naházet všechny věci na hromadu, připravit PineBooky na cestu (včetně pošťáka a skriptu pro update webu), vytočit cca 60 litrů medu a začínám s balením.

T = -5 hodin: budíček

Vstát po třech hodinách spánku je zlo, ale dá se to. Práce je spousta, času málo... Na ráno jsem měl jen krátký TODO list:

  1. připravit kabely na ESC
  2. rozebrat testovací aparát pro motory
  3. dobalit si oblečení
  4. sesbírat nářadí
  5. otestovat nenaplnitelnost kufříku

No, naštěstí jsem se kouknul ještě jednou na harmonogram autobusu a zjistil, že ve 12 není odjezd, ale jenom sraz pro začátek nošení výbavy, takže pohoda balení.

Ponorka ještě před odjezdem dostala jméno Drowning Hamster a zatím je v rozsypu. Snad jí dokončíme ještě během expedice. Více zde

Pokud by někoho zajímalo, jak nám to během expedice šlo odruky,tak sledujte commity na GITHubu a jakmile budou i nějaké fotky, tak je budu přidávat buď sem, nebo k zápisníku z expedice.

T = 3. den expedice

Po včerejším příjezdu jsme neměli moc sil na programování, a tak jsme se do toho pustili až dneska. Spoustu zdrojáků recykluju ze svého robota, kterého jsem na modulární systém začal předělávat již minulý rok, ale bohužel jsem na to od té doby nesáh. Úkol je jasný - zprovoznit podporu gamepadu na PineBooku, propojit pinebook se SoPine pomocí ehternetového kabelu a tam komunikovat přes ZeroMQ a mezi SoPine a RaspberryPi Zero natáhnout UART, kterým se budou předávat zprávy o ovládání motorů. Snad to stihneme za tři dny, abychom pak nejpozději během následujícího víkendu mohli začít testovat ponorku jako celek.

T = 5. den expedice

Po včerejším celodenním záseku na chybě u otevírání 0MQ publishera, jsem si dopoledne konečně všiml chyby: 0MQ publisher i subscriber mohou otevírat port pomocí funkce .connect() ale i .bind(), ale v daném páru není možné, aby oba použili stejnou funkcni, což se nám bohužel podařilo. Dneska jsme už chtěli mít hotovou většinu software, ale i gamepad nám trochu zlobí a zahlcuje sběrnici takovým způsbem, že po dvou minutách testování nám program vypisuje dalších 10 vteřin dobíhající eventy, což není úplně ideální, hlavně když vezmete v úvahu, že by takový lag mělo i tlačítko total stopu, ale ono se to Matoušovi nějak podaří.

T = 6. den expedice

Dneska se nám podařilo dodělat mechanismus,který předával zprávy od Gamepadu až do Raspi. Teď už jen protáhnout komunikaci i zpátky a nějaké ty začisťující práce, naprogramovat na RPi moduly pro ovládání motorů, serv a LED zdrojů a přidat tam ještě mbed, na kterém se bude prograovat hlídač baterií, abychom náhodou nevybili nějakou baterii víc, než je zdrávo.

T = 8. den expedice

Dneska jsem chtěl pájet dohromady elektroniku do ponorky, aby to začalo dostávat tvar, ale bohužel nám celé dopoledne přšelo a velký párty stan byl rozložený,takže jsem si konstrukční práce nechal na následující den a zatím naprogramoval knihovnu pro ovládání ESC motorů a serv. Snad bude fungovat, neměl jsem kde rozložit HW, abych to odzkoušel.

Saša dneska naimpregnoval motory, respektive spíš je v tom přípravku utopil, tak to snad bude na slanou vodu stačit. A pak taky předělal složený "vysavač" k rámu ROVčka, pomocí žluto-černé lepící pásky. Na vyvážení kabelů se nedostalo, to se bude prý dělat až budou kabely zalité do ROV, aby se do nich nedostala slaná voda, což je celkem rozumný důvod, ale vyvažování 100 metrového kabelu bude přecijen záležitost na půl dne, takže možná by bývalo stačilo vyvážit prostředních 80 metrů, abychom s tím pak neměli tolik práce. Rám ponorky s vysavačem

T = 11. den expedice

Dneska se mi konečně podařilo dodělat kabeláž uvnitř gondoly, sice mi zbývají komplet vnější rozvody - jak k motorům, tak ke světlům - ale uvntř gondoly je to snad všechno. Dokonce jsem tam přidal i jeden okruk pro zapínání kamery v malé gondole - kdyby snad náhodou praskla, tak ať se nám nevratně neskratuje baterie, ale ať to můžeme odpojit. Saša dneska dolepil rám a začal vymýšlet, jak přidělat motory ke gondole a snad dodělal malou gondolu, jen jsem jí ještě neviděl, tak doufám, že to bude v pořádku. Večer ještě chce začít dělat LEDky, ale to nevím, jak se na jeho vrtání a řezání budou tvářit ostatní návštěvníci kempu. vnitřní kostra s kamerami

T = 13. den expedice

V noci na dnešek jsme si udělali výlet za východem slunce z kopce sv. Ivan, takže jsem měl do té doby dost času pájet LEDky, což bylo 20W pájkou skoro za trest, ale nebylo to horší než pájení dutinek pro motory, které jsme museli nahřvat i zapalovačem. Po návratu z Ivana jsem zase pokračoval v pájení až do osmi ráno, pak už jsem na to neviděl, a tak si na chvíli odpočinul. Nakonec jsem veškeré pájení dodělal kolem oběda a začal oživovat jednotlivé moduly připojené přes zadní dekl hlavní gondoly. Těsně před večeří již byla většina věcí připravená k zalití do epoxidu, ale k tomu jsme se již nedostali.

T = 14. den - odjezd

ROV jsme nakonec ani nenamáčeli do vody, nebylo na to vůbec připravené, ale když to dobře dopadne, tak na něm budeme pokračovat v průběhu roku, aby bylo připravené a otestované na příští ročník exkurzí. Spousta lidí se na to těší a já bych to taky rád viděl fungovat, jen si stále nejsem jistý určitými konstrukčními prvky, které aktuálně používáme. Nejspíš se na pár týdnů vrátíme k rýsovacímu plátnu a pak pár měsíců budeme navštěvovat různé lomy a přehrady, abychom ROV dostavěli tak, jak se to má dělat pořádně.

Pohled na "skoro hotové" ROV před začátkem demontáže. Víc se už nestihlo...

TP HD20180616 LastEdit: TP HD20200305