Dabar yra 28 Kov 2024 11:35

Visos datos yra UTC + 2 valandos




Naujos temos kūrimas Atsakyti į temą  [ 5 pranešimai(ų) ] 
Autorius Žinutė
 Pranešimo tema: SVento Išmanioji Laboratorija
StandartinėParašytas: 04 Vas 2018 11:02 
Model
Model

Užsiregistravo: 20 Rgs 2010 17:44
Pranešimai: 243
Miestas: Vilnius
Čia dėsiu savo darbus, kurie vienaip ar kitaip bus susiję su multikopteriais / multorotoriais / dronais ar kaip kitaip juos pavadintume :).


Paskutinį kartą redagavo SVentas 04 Vas 2018 11:46. Iš viso redaguota 1 kartą.

Į viršų
 Aprašymas  
 
 Pranešimo tema: Scanse sweep LiDAR’as ArduPilot autopilotui - I Dalis
StandartinėParašytas: 04 Vas 2018 11:24 
Model
Model

Užsiregistravo: 20 Rgs 2010 17:44
Pranešimai: 243
Miestas: Vilnius
Scanse sweep LiDAR’as ArduPilot autopilotui - I Dalis

LiDAR’as arba LIDAR’as (angl. Light Detection and Ranging arba Light Imaging Detection and Ranging) – tai įrenginys, šviesos impulsais matuojantis atstumą iki kitų objektų. LiDAR’as apšviečia aplinką lazerio impulsu ir po to specialiu sensoriumi matuoja atspindžio savybes (laiką, fazę, amplitudę, dažnį). Paprasčiausiu atveju atstumas yra nustatomas pagal tai, kiek laiko reikia šviesos impulsui nueiti iki objekto, atsispindėti ir grįžti atgal. Šviesos greitis yra gerai žinomas, o atstumas yra lygus greičiui padaugintam iš laiko ir padalintam iš 2. LiDAR’as dar kartais vadinamas lazeriniu skeneriu.

Neseniai gavau užsakymą prijungti LiDAR’ą prie skydžio valdymo sistemos. Scanse sweep yra 360 laipsnių plokštumoje skenuojantis LiDAR‘as, turintis mažos galios infraraudoną (žmogui nematomą) lazerį ir galintis matuoti atstumus iki objektų, esančių nuo 20 cm iki 40 m diapazone.
Failo aprašymas: Scanse sweep LiDAR
LiDAR_SideView_sm.jpg
LiDAR_SideView_sm.jpg [ 13.03 KiB | Peržiūrėta 4628 kartus(ų) ]


Kodėl užsakymą?.. Kodėl pats vartotojas negalėjo prijungti šio LiDAR’o?.. Atsakymas yra labai paprastas – šiam įrenginiui nėra parašyta draiverių jokiam autopilotui.

Scanse sweep nėra ypatingai naujas produktas. Jis pardavinėjamas jau nuo 2016 metų pavasario. Pagal kainą jį būtų galima priskirti vidutinei klasei, nes rinkoje yra kur kas brangesnių, ir kur kas pigesnių tokio tipo prietaisų. Įrenginio sąsaja su vartotoju nėra nei kažkuo ypatinga nei sudėtinga. Ją sudaro nuoseklusis UART ar COM portas, bei 10-ties komandų sąrašas, prie kurio reiktų pridėti įvairiais kampais pamatuoto atstumo iki objektų duomenų bloką. Draiverių programavimas, mano nuomone, tikrai nereikalauja itin aukštos kvalifikacijos įterptųjų sistemų programuotojo.

Kodėl gi niekas iki šiol neparašė draiverių?.. Neaišku... Kaip ten bebūtų, jeigu nėra draivero, vadinasi jį reikia parašyti :).

Tiems, kas nežino, kas yra draiveris, parašysiu, jog draiveris – tai programa, kuri priderina konkretų įrenginį prie žymiai bendresnio ir abstraktesnio įrenginio aprašo, vadinamo įrenginių klase. Įrenginių klasės egzistuoja tik gana sudėtingose sistemose, kurios nori sujungti į vieną visumą kuo daugiau panašaus tipo įrenginių (pvz. visus gaminamus giroskopus į giroskopų klasę, visus gaminamus GPS į GPS klasę ir pan.). Kitaip sakant, draiveris yra virtuali tarpinė arba jungiamasis sluoksnis, kuris paslepia visus konkretaus įrenginio specifiškumus ir subtilybes (pvz. registrus, įvesties-išvesties sąsajas, įrenginio konfigūravimą, paleidimo ir išjungimo seką ir t.t. ir pan.) ir sistemai pateikia tik tokius duomenis, prie kurių sistema yra "pripratusi" ir su kuriais "moka" dirbti :).

Pirma problema, su kuria susidūriau, buvo laidai ir jungtys. Scanse sweep LiDAR‘o jungtys yra visiškai kitokios nei PIXHAWK‘o, todėl šie du prietaisai lengvai nebūtų susijungę bet kokiu atveju. Bet tai ne vienintelė bėda. Pasirodo paties LiDAR‘o laidai po kažkokios avarijos buvo pažeisti (jungtys irgi). Iš 6 gyslų, sudarančių normalų prijungimo kabelį, buvo likę tik 2. Scanse sweep LiDAR‘as bendravimui su išoriniu pasauliu naudoja nuosekliąją UART/COM sąsają, todėl, norint prijungti prietaisą prie kito įrenginio ar kompiuterio, būtina turėti bent 4 laidus – maitinimo + ir -, bei signalinius RX ir TX. Teko užsakinėti naujus laidus su atitinkamomis jungtimis LiDAR‘ui ir PIXHAWK‘ui, bei laukti, kol jie atkeliaus iš už jūrų marių. O kol laidai keliauja, prietaisus tarpusavyje galima laikinai sujungti prilituojant plonus laidelius prie jungčių kontaktų, ypač kai tarpai tarp kontaktų nėra labai maži (net 1 mm).

Norint prilituoti laikinus laidelius, reikia išardyti LiDAR‘ą. Kartu galima pasižiūrėti, kas gyvena jo viduje. Pasirodo LiDAR‘as yra sudarytas bent iš keturių skirtingas funkcijas atliekančių modulių. Viršuje gyvena optika – kažkoks GARMIN‘o LiDAR‘as, iš kurio per „SlipRing“ kontaktus ateina keturi laidai į pagrindinę plokštę. Pagrindinėje plokštėje yra bent du mikrovaldikliai (uC). Vienas mikrovaldiklis yra . Jis greičiausiai komunikuoja su GARMIN‘o LiDAR‘u ir atlieka sąsajos tarp LiDAR‘o ir vartotojo (kompiuterio/skrydžio valdymo sistemos ir pan.) vaidmenį. Kitas mikrovaldiklis yra , kuris greičiausiai valdo variklį, sukantį LiDAR‘o „galvą“. Netoli šio mikrovaldiklio matyti trijų fazių bešepetėlinio variklio valdymo sistema (elektroninis draiveris).
Failo aprašymas: Scanse sweep board top
LiDAR_TearDown_TopView_sm.jpg
LiDAR_TearDown_TopView_sm.jpg [ 19.36 KiB | Peržiūrėta 4628 kartus(ų) ]

Variklio greitis ir pozicija matuojami / valdomi standartiniu būdu, panaudojus optinių impulsų formavimo elementą / moduliatorių / enkoderį / čioperį. Matoma optinė pora, sudaryta iš spinduolio ir fotodetektoriaus, o LiDAR‘o korpuse padaryti dantukai, sukantis varikliui, periodiškai uždengia ir vėl atidengia optinės poros elementus taip formuodami impulsus. Matuojant impulsų periodiškumą (laiką tarp impulsų bei pačių impulsų trukmę) galima gana tiksliai nustatyti variklio sukimosi greitį. Skaičiuojant impulsus, galima nustatyti variklio poziciją.
Failo aprašymas: Scanse swwp board side
LiDAR_TearDown_SideView_sm.jpg
LiDAR_TearDown_SideView_sm.jpg [ 16.59 KiB | Peržiūrėta 4628 kartus(ų) ]


Paskutinį kartą redagavo SVentas 04 Vas 2018 20:21. Iš viso redaguota 4 kartus.

Į viršų
 Aprašymas  
 
 Pranešimo tema: Scanse sweep LiDAR’as ArduPilot autopilotui - II Dalis
StandartinėParašytas: 04 Vas 2018 11:42 
Model
Model

Užsiregistravo: 20 Rgs 2010 17:44
Pranešimai: 243
Miestas: Vilnius
Scanse sweep LiDAR’as ArduPilot autopilotui - II Dalis

Prilitavus laidus, galima pradėti draiverio programavimo darbus. Bet čia ir vėl kyla mažutė problemėlė. Egzistuoja bent du atviro kodo (angl. OpenSource) projektai, kurie kuria programinę įrangą PIXHAWK ir PIXHAWK2 skrydžio valdymo sistemoms.

Vienas projektas yra gerai visiems žinomas ir seniai egzistuojantis autopilotas. Kitas projektas yra pačių PIXHAWK autorių kuriamas ir palaikomas autopilotas.

Pasižvalgius po abiejų projektų kodus pastebėjau, jog PX4Pro neturi nei vieno draiverio skenuojantiems LiDAR‘ams ir, savaime aišku, neturi net tokių įrenginių klasės. Kitaip sakant, PX4Pro autopilote 360 laipsnių skenuojantys LiDAR‘ai kol kas neegzistuoja. Parašyti Scanse sweep draiverį PX4Pro autopilotui kaip ir būtų galima, bet nėra prasmės. Kas iš to, kad autopiloto sistema kažkaip gaus duomenis iš naujo įrenginio. Ji vis tiek nežinos, ką su tais duomenimis daryti, kaip į juos reaguoti bei kaip su jais elgtis.

Norint PX4Pro autopilotą priversti reaguoti į skenuojančių LiDAR‘ų rodmenis vien įrenginio draiverio neužtenka. Dar reikia suprogramuoti ir įrenginių klasę. Po to tą klasę reikia integruoti į drono valdymo sistemą arba pozicijos vertinimo algoritmą ir tik tada galima tikėtis kokio nors atsako. Visas šis darbas nėra neįmanomas, tačiau užimtų labai daug laiko ir iš užsakovo pareikalautų nemažų investicijų.

ArduPilot‘e skenuojantys LiDAR‘ai suteikia kur kas daugiau optimizmo. Čia yra skenuojančių LiDAR‘ų klasė ir net yra parašyti draiveriai keliems tokio tipo LiDAR‘ams. Pats ArduPilot‘as giriasi, jog Loiter režime dronas gali sustoti prieš kliūtį ir išvengti susidūrimo (pvz. su siena), naudodamas būtent tokių LiDAR‘ų rodmenimis. Apsvarsčius visus už ir prieš (nors iš tiesų nebuvo ką labai svarstyti), nusprendžiau Scanse sweep LiDAR‘ą "supažindinti" su ArduPilot autopilotu. Manau, jie turėtų susidraugauti :).

Tie, kas bandė patys sukompiliuoti bent vieną iš ArduPilot autopilotų (pvz. ArduCopter, ArduRover, ArduPlane ir kt.) tikriausiai žino, kad tai padaryti nėra labai paprasta. Šis projektas naudoja labai specifinę kompiliatoriaus versiją (gana seną), kuri sukompiliuoja ir sujungia kodą be klaidų. Bandant naudoti naujesnes kompiliatoriaus versijas, nieko gero nesigauna. Taip pat ArduPilot'o projektas naudoja skriptus ir kažkokias senovines Python‘o bibliotekas, be kurių ArduPilot‘o taip pat sukompiliuoti nepavyks. Laimei vargšams MS Windows vartotojams visas kompiliavimo įrankių rinkinys sudėtas į , kurį parsisiuntus ir tinkamai įdiegus į sistemą (tą irgi dar reikia mokėti) kompiliatoriaus "vamzdžiai nesikemša" ir galų gale kompiuteriui pavyksta išstenėti naują, gražų ir blizgantį firmware‘ą :).

Kai kompiliavimo įrankiai pradeda veikti, o PIXHAWK‘as su Scanse sweep LiDAR‘u per UART4 sąsają sujungti keturiais laidais (ir dar 2 laidai eina į UART5 debug‘inimo sąsają), prasideda nuostabus ir stebuklingas kūrybos procesas, kuriame sužinai daug įdomių dalykų, visada išmoksti ką nors naujo ir eilinį kartą gali įsitikinti, jog žmogus – ne mašina, nes mašina neklysta, o žmogus dar ir kaip :D... Į ArduPilot draiverių programavimo subtilybes nesileisiu, nes jos greičiausiai gali būti suprantamos tik vos keletui žmonių pasaulyje :).

Praleidus tikriausiai apie parą laiko prie kodo, parašius Scanse sweep LiDAR‘o komandų interpretatorių, susinchronizavus duomenų srautus ir perpumpavus megabaitus informacijos per UART5 debug‘inimo sąsają, pagaliau gimė Scanse sweep LiDAR‘o draiveris, kuris ne vien tik laidais, bet ir informaciniais srautais sujungė ArduPilot autopilotą ir Scanse sweep LiDAR‘ą.
Trumpame filmuke galima matyti, kaip LiDAR‘as skenuoja aplinką ir matuoja atstumus iki objektų, o ArduPilot autopiloto grafinė vartotojo sąsaja - atvaizduoja mažiausią atstumą iki objekto aštuoniuose kliūčių išvengimo sektoriuose. Taip pat draiveryje įdiegta galimybė apversti LiDAR'ą aukštyn kojomis bei programiškai koreguoti kampinę įrenginio "priekio" padėtį.



Ar draiveris bus prieinamas plačiajai visuomenei, kol kas prognozuoti negaliu. Viskas priklausys nuo užsakovo. Jeigu jis norės pasidalinti kodu arba panorės, kad kodas būtų integruotas į ArduPilot projekto kodą, tuomet draiveris taps viešas. Priešingu atveju draiverio likimas taps nežinomu.


Į viršų
 Aprašymas  
 
 Pranešimo tema: Re: SVento Išmanioji Laboratorija
StandartinėParašytas: 04 Vas 2018 14:30 
Modeliuotojas
Modeliuotojas
Vartotojo avataras

Užsiregistravo: 17 Rgp 2004 09:28
Pranešimai: 2658
Miestas: Jurbarkas
Įdomus projektas. Niekada praktiškai neturėjau reikalų su LIDAR'ais. Domėjausi šiek tiek kas tai per daiktas, bet jų kaina tokia nelabai mėgėjiška, kad galima būtų tiesiog paeksperimentuot. :)
Kaip matau stamboką kliūtį mato puikiai. Tokia kliūtis turbūt idealus variantas? O jei ji būtų mažesnė? O jei būtų pasukta kitokiu kampu?

_________________
http://rem-blog.net


Į viršų
 Aprašymas  
 
 Pranešimo tema: Re: SVento Išmanioji Laboratorija
StandartinėParašytas: 04 Vas 2018 17:06 
Model
Model

Užsiregistravo: 20 Rgs 2010 17:44
Pranešimai: 243
Miestas: Vilnius
Aš tai niekad nesidomėjau LiDAR'ais :). Man tie visi lazeriniai prietaisai ir patys lazeriai, o ypač nematomi, niekada nekėlė susižavėjimo :).

Kiek man žinoma, pigiausias mėgėjiškas skenuojantis LiDAR'as kainuoja apie $100 (vienkrypčiai neskenuojantys kainuoja mažiau), bet yra kainuojančių ir beveik $1000 :), todėl aš pilnai sutinku, jos vien pažaidimui jie tikrai netinkami. O ir naudos iš jų kol kas nedaug, nes, kaip minėjau, tik ArduPilot moka pagal LiDAR'o duomenis sustabdyti droną prieš kliūtį (būtent sustabdyti, daugiau nieko).

Demonstracijai aš specialiai naudojau stambią kliūtį, kad būtų viskas aišku ir gražu. O šiaip tai LiDAR'o skiriamąją gebą galima įvertinti labai paprastai. Reikia žinoti, koks yra atstumo diskretizavimo dažnis (angl. sample rate) ir kaip greitai sukasi "galva". Šiuo atveju diskretizavimo dažnis buvo apie 800Hz (1100 Hz max šitam LiDAR'ui), o galva sukosi apie 2 apsisukimus per sekundę. Tai reiškia, kad LiDAR'as pagamindavo vieną matavimą kas 0,9 laipsnio. Galima sulėtinti galvos sukimąsi iki 1 apsisukimo per sekundę, tada vienas matavimas bus kas 0,45 laipsnio, bet informacija apie kliūtis bus atnaujinama rečiau. Dar yra svarbu, kokio pločio yra lazerio spindulys t.y. kokį plotą lazeris apšviečia (šito aš nepamenu).

Iš praktikos galiu pasakyti, kad jeigu paimtume dviračio ratą ir pastatytume jį maždaug 1 m atstumu nuo LiDAR'o, tai kartais LiDAR'as užfiksuotų dviračio stipinus, o kartais ne. Apskritai šis LiDAR'as nėra labai tikslus įrenginys ir ne visame skenavimo diapazone dirba vienodai. Yra sektorių, kuriuos jis kažkodėl skenuoja gerokai tankiau negu kitus sektorius. Tai gali būti susiję su paties LiDAR'o firmware'o netobulumu.

Bendru atveju galima teigti, kad toks LiDAR'as, esant dabartiniams nustatymams, tikrai užfiksuotų objektą, kurio KAMPINIS DYDIS yra apie 1 laipsnį (čia dydis ne centimetrais ir ne metrais, o laipsniais). Palyginimui Saulė ar Mėnulis mums danguje atrodo kaip 0,5 laipsnio dydžio objektai (tai reiškia, kad objekto kampinis dydis turi būti kaip dvi saulės ar du mėnuliai).

Su atspindžio kampais yra truputį kebliau. Uždarose patalpose ir mažuose atstumuose (iki 1m nuo LiDAR'o) dėl įvairių antrinių atspindžių, kurie grįžta skirtingais keliais, nes atsispindėjo skirtingais kampais, LiDAR'as gali pradėti rodyti nesąmones (atstumus iki keliolikos metrų), bet tam reikia prieš jį pastatyti kliūtis iš specifinių medžiagų (dažniausiai plaukuotų, pūkuotų ir gerai atspindinčių paviršių, o gal būt veikiančių, kaip šviesolaidis?). Didėjant atstumui iki kliūčių, tokių nesąmonių tikimybė smarkiai mažėja, o atvirose erdvėse apskritai nepasireiškia. Kitaip sakant, atspindžio kampas įtakos matavimams beveik neturi. Kai atstumai dideli (daugiau nei 10m) tuomet kliūties kampo įtakos aš dar netyrinėjau, nes nebuvo kaip.


Į viršų
 Aprašymas  
 
Rodyti paskutinius pranešimus:  Rūšiuoti pagal  
Naujos temos kūrimas Atsakyti į temą  [ 5 pranešimai(ų) ] 

Visos datos yra UTC + 2 valandos


Dabar prisijungę

Vartotojai naršantys šį forumą: Registruotų vartotojų nėra ir 8 svečių


Jūs negalite kurti naujų temų šiame forume
Jūs negalite atsakinėti į temas šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite trinti savo pranešimų šiame forume
Jūs negalite prikabinti failų šiame forume

Ieškoti:
Pereiti į:  
cron
Administratoriaus kontaktai: info(eta)rcm.lt

 

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Vertė Vilius Šumskas © 2003, 2005, 2007