• Rezultati Niso Bili Najdeni

Lokalizacija robota v prostoru z uporabo stereo kamere Intel RealSense T265

N/A
N/A
Protected

Academic year: 2022

Share "Lokalizacija robota v prostoru z uporabo stereo kamere Intel RealSense T265"

Copied!
62
0
0

Celotno besedilo

(1)

Univerza v Ljubljani Fakulteta za elektrotehniko

Klemen Škrlep

Lokalizacija robota v prostoru z uporabo stereo kamere Intel RealSense T265

Diplomsko delo

Visokošolski strokovni študijski program prve stopnje Aplikativna elektrotehnika

Mentor: izr. prof. dr. Gregor Klančar, univ. dipl. inž. el.

Somentor: as. dr. Andrej Zdešar, univ. dipl. inž. el.

Ljubljana, 2021

(2)
(3)

Rad bi se iskreno zahvalil mentorjema, as. dr. Andreju Zdešarju in izr. prof. dr. Gregorju Klančarju, za deljenje znanja na področju robotike in avtomatike, za strokovnost pri delu, za visoko odzivnost pri komunikaciji ter izdajanju napotkov in informacij ter nenazadnje tudi za potrpežljivost, ko je bila ta le zaželena, ne pa tudi obvezna.

Zahvala gre tudi Fakulteti za elektrotehniko za vsa predhodno pridobljena znanja iz študijskega programa ter za materialno podporo v obliki robota in kamere.

Na koncu bi se zahvalil tudi prijateljem in družini (predvsem staršema), ki so mi na poti do končanega diplomskega dela stali ob strani ter me spodbujali.

(4)

Diplomsko delo zajema postopek seznanjanja z vsako od treh glavnih komponent za izvedbo avtinomnega mobilnega sistema – robotom (Roomba model 600), kamero (Intel RealSense T265) in vgradnim sistemom (Raspberry Pi 3). Delo obravnava vzpostavitev povezave med navedenimi napravami in na koncu še sestavo programa, ki s pomočjo lokalizacije na osnovi slike omogoča avtonomno delovanje mobilnega sistema.

Za dosego cilja je potrebno dobro razumevanje vsake posamezne naprave in programskega vmesnika, ki ga le-ta uporablja. Poseben poudarek je narejen na opisu kamere, senzorjev in obdelavi signalov. Povezava kamere z drugimi napravami potrebuje namestitev ustreznih knjižnic, medtem ko povezava med robotom in vgradnim sistemom potrebuje poseben vmesnik. Za izvedbo vodenja mobilnega sistema so uporabljene osnovne enačbe za računanje s koti in hitrostmi, ki so skupaj povezane s proporcionalnim regulatorjem.

Sam cilj naloge je izvedba avtonomnega mobilnega sistema, ki lahko potuje med želenimi točkami ter se na poti uspešno umika oviram. Glede na cenovni razpon naprav, je sistem sorazmerno stabilen, pogreški pa so relativno majhni.

(5)

The thesis consists of the procedure of acquaintance with each of the three main devices that comprise an autonomous mobile system - robot (Roomba model 600), camera (Intel RealSense T265) and embedded system (Raspberry Pi 3). The work presents the coupling of the presented devices and writing of program code that uses vision-based localization for autonomous driving of the mobile system.

To achieve this goal, a good understanding of each device and the programming environment it uses is required. In this thesis, particular emphasis is placed on the description of the camera, sensors and signal processing. The connection of the camera with other devices requires the installation of appropriate libraries, while the connection between the robot and the embedded system requires a special interface. For the implementation of autonomous driving, I have used some basic equations for the calculation of angle and velocity, which are combined in a P-type controller.

The goal of the work is to build an autonomous mobile system that is able to drive autonomously between desired points while avoiding obstacles. Considering the price range of the devices used, the system is quite stable while the errors are relatively small.

(6)

1 Uvod ... 10

2 Kamera Intel RealSense T265 ... 11

2.1 Primerjava med seboj podobnih senzorjev in načinov zajema slike ... 13

2.1.1 Kodirana ali strukturirana svetloba ... 13

2.1.2 Stereo globina ... 13

2.1.3 LiDAR ... 15

2.2 Program Intel RealSense Viewer ... 16

2.3 Osnovni koncepti in algoritmi pri obdelavi signalov ... 20

2.3.1 Hkratna lokalizacija in kartiranje prostora ... 20

2.3.2 Globalni pozicijski sistem ... 21

2.3.3 Inericalni navigacijski sistem in vizualna inercialna odometrija ... 22

2.4 Opis karakteristik senzorja ... 25

2.4.1 Občutljivost ... 25

2.4.2 Točnost ... 26

2.4.3 Ločljivost ... 26

3 Raspberry Pi 3 ... 27

Tehnične specifikacije ... 27

4 Robot iRobot Roomba model 600 ... 29

Zaznavanje okolice ... 29

5 Izdelava avtonomnega mobilnega sistema ... 32

5.1 Knjižnjice in programska oprema za povezavo kamere z osebnim računalnikom ... 32

5.2 Preverba točnosti kamere T265 ... 34

5.2.1 Program za izpis koordinat ... 34

5.2.2 Meritve in izračuni ... 35

5.3 Vzpostavitev povezave z vgradnim sistemom Raspberry Pi ... 37

5.4 Preizkus povezave med robotom in vgradnim sistemom ... 40

5.4.1 Program za avtonomno vožnjo po prostoru ... 42

5.5 Vzpostavitev povezave med kamero in vgradnim sistemom ... 43

5.6 Preizkus povezave med kamero in vgradnim sistemom ... 44

5.7 Poskusni program za povezavo med kamero, robotom in vgradnim sistemom ... 44

(7)

5.7.1 Program za vožnjo do želene točke ... 45

5.8 Program za izogibanje oviram ... 46

5.9 Končni program ... 46

6 Zaključek ... 53

(8)

Slika 1: Od zgoraj navzdol slika prednjega, zadnjega in stranskega dela kamere ... 11

Slika 2: Okno programa Intel RealSense Viewer ... 16

Slika 3: Trajektorija premika kamere. ... 17

Slika 4: Meni ročnih nastavitev kamere. ... 18

Slika 5: Šest prostostnih stopenj... 20

Slika 6: Prikaz prirejanja značilk na sliko ... 23

Slika 7: Karakteristika senzorja... 25

Slika 8: Prikaz razmerja med vhodom in izhodom za občutljivost senzorja ... 25

Slika 9: Raspberry Pi 3, Model A+ ... 28

Slika 10: Zgornji del Roombe - gumb za vklop (Clean) ... 30

Slika 11: Spodnji del Roombe ... 31

Slika 12: Izgled programa PyCharm s programsko kodo na desni... 33

Slika 13: Primerjava zajema slike v zatemnjenem prostoru (levo) in osvetljenem prostoru (desno) ... 36

Slika 14: Mobilna aplikacija Fing, kjer so izpisane vse naprave povezane na isto omrežje. ... 38

Slika 15: Uspešna povezava na Raspberry Pi preko ukaznega poziva ... 39

Slika 16: Nastavitve sistema Raspberry Pi do katerih dostopamo z ukazom "sudo raspi-config" ... 40

Slika 17: Izgled grafičnega vmesnika VNC Viewer ... 40

Slika 18: Elektro shema vmesniške povezave med robotom in vgradnim sistemom ... 41

Slika 19: Premikanje robota po pravokotnem prostoru brez ovir... 43

Slika 20: Grafični prikaz kotov ... 48

Slika 21: Diagram poteka programa ... 49

Slika 22: Celotni sistem - kamera, robot in vgradni sistem z napajanjem ... 51

Slika 23: Trajektorija premika robota iz točke A v točko B, ter nazaj v točko A ... 52

(9)
(10)

10

1 Uvod

Avtonomni mobilni sistemi so roboti, ki se prosto gibljejo po prostoru, in niso vpeti v okolico.

Poznamo kopenske, zračne in vodne mobilne sisteme, katere uporabljamo na skoraj vseh področjih (npr.: medicina, kmetijstvo, gozdarstvo, vesoljske aplikacije, itd.). Glavni sestavni deli avtonomnega mobilnega sistema so: mehanska konstrukcija, aktuatorski pogon, senzorji, računalniki, napajalna enota in elektronika.

Delo obravnava izvedbo avtonomnega mobilnega sistema, ki uporablja kamero za lokalizacijo v prostoru. Glavni sestavni deli sistema so: mobilni robot, mikroračunalnik (vgradni računalnik) in kamera. Cilj naloge je med naštetimi napravami vzpostaviti delujočo povezavo in napisati program, ki robota s pomočjo kamere pripelje v poljubno točko. Zahteve za uspešno dosego cilja so seznanitev z napravami ter njihovim delovanjem, določeno predznanje oziroma pridobitev zahtevanega znanja na področju avtomatike (na primer uporaba regulacijske zanke, programiranje, robotski vid, itd.) ter splošna iznajdljivost.

Za orientacijo sistema v prostoru sem uporabil kamero Intel RealSense T265. Sam proces ugotavljanja lokacije v okolju imenujemo lokalizacija, le-ta pa združuje proces zaznavanja (meritev) in premikanja.

Diplomsko delo na začetku vsebuje opis kamere Intel RealSense T265, in primerjavo med seboj podobnih senzorjev ter načinov zajema slike. Prav tako je opisan tudi program Intel RealSense Viewer ter njegova uporaba. Kasneje so opisani tudi osnovni koncepti in algoritmi za obdelavo signalov ter opis karakteristik senzorja. Pred predstavitvijo praktičnega dela naloge sta na kratko opisana še vgradni sistem (Raspberry Pi 3, Model A+) in robot (Roomba iRobot model 600).

Nato sem se lotil kronološkega opisa praktičnega dela. Opisan je potek dela od vzpostavitve povezave med vsemi napravami do končnega programa.

(11)

11

2 Kamera Intel RealSense T265

V našem praktičnem primeru se bomo seznanili s sledilno kamero Intel RealSense T265 (slika 1), ki s pomočjo vizualne inercialne odometrije omogoča 6-stopenjsko sledenje (angl. six degrees of freedom – 6 DoF).

Kamera Intel RealSense T265 je naprava zmožna sledenja lastnega gibanja. To sledenje temelji na integraciji optičnih in inercialnih senzorjev. Vrsta objektiva kamere je ribje oko. To je različica objektiva, ki spada med širokokotne objektive in ima zelo majhno goriščno razdaljo ter velik zorni kot – do 180 stopinj.

Poleg tega vsebuje tudi inercialno merilno enoto (IME, angl. inertial measurement unit) ki omogočajo merjenje tako usmerjenega gibanja kot tudi rotacije.

Slika 1: Od zgoraj navzdol slika prednjega, zadnjega in stranskega dela kamere

(12)

12 Kamera Intel RealSense T265 sama po sebi ne potrebuje kalibracije, saj je le-ta opravljena že po tovarniških nastavitvah.

Za povezavo vseh komponent in senzorjev ima kamera vgrajeno integrirano vezje, ki je namenjeno specifičnim aplikacijam (angl. application-specific integrated circuit – ASIC).

Model, ki ga uporablja kamera, je Intel Movidius Myriad 2 MA215x, za povezavo z zunanjimi napravami pa uporablja priključek USB 3.0.

Kamera je združljiva z operacijskimi sistemi Windows in Linux, uporablja pa se predvsem na področju, kjer je potrebno zaznavanje okolice: robotika, brezpilotni letalniki, navidezna resničnost, ...

Strojna oprema T265:

- dvojni širokokotni objektiv katerih vidno polje obsega približno 165 stopinj, z ločljivostjo 800 slikovnih pik,

- žiroskop Bosch BMI055 200Hz, - 62,5Hz merilnik pospeška,

- Intel Movidius Myriad 2 Vision Processing unit (VPU – vrsta mikroprocesorja, specializirana bolj za slikovne računske operacije),

- USB priključek moči 1,5 W,

- dve M3 vijačni luknji na hrbtni strani ohišja za možnost pritrditve na razne podlage/robote.

Tabela 1: Mehanske lastnosti kamere

Dimenzija Vrednost (nazivna) Enota

Širina 108 mm

Višina 24,5 mm

Globina 12,5 mm

Teža 60 g

Tabela 2: Priporočila za ravnanje s kamero v določenih pogojih.

Stanje Opis Minimalno Maksimalno Enota

Skladiščenje oz. ko naprava

ni v uporabi

Daljša izpostavitev

temparaturi

0 40 °C

Krajša izpostavitev

temperaturi

-30 65 °C

Vlažno, brez kondenzacije

90% RH, 30 °C

Uporaba Temperatura 0 35 °C

(13)

13 Intel Realsense – komplet za razvoj programske opreme (angl. software development kit – SDK)

Intel RealSense SDK API je programska knjižnica, ki je odprtokodna, kar pomeni, da se stalno osvežuje in razširja, saj lahko programerji prispevajo svoje znanje in programsko kodo.

Knjižnjica sama vsebuje veliko primerov programske kode v različnih programskih jezikih, kot so C, C++, Python in drugi.

Vse to je dostopno na spletnem portalu https://github.com/IntelRealSense/librealsense.

2.1 Primerjava med seboj podobnih senzorjev in načinov zajema slike

Za primerjavo lahko vzamemo različne kamere istega proizvajalca (Intel) ter s podobnimi lastnostmi. Poleg modela kamere T265 poznamo tudi model T261, ki je skoraj identičen T265 z manjšimi izjemami:

- T265 – nizka poraba energije (1,5W), majhna in lahka, namenjena orientaciji v prostoru,

- T261 – praktično enake specifikacije kot T265, le da nima ohišja in USB-priključka (namenjena je za bolj specifično uporabo, kjer imamo namen sami zasnovati ohišje).

2.1.1 Kodirana ali strukturirana svetloba

Je proces projeciranja znanega vzorca (na primer infrardečih žarkov) na neko površino. Glede na to, kako se ti žarki od te površine odbijajo, lahko senzor iz tega izračuna globino in obliko te površine. Najbolj pogosta uporaba teh kamer je 3D skeniranje.

2.1.2 Stereo globina

Izraz ponazarja postavitev dveh kamer z znano medsebojno lego, in oceno globine s pomočjo triangulacije. Ta vrsta kamer se osredotoča oziroma je specializirana predvsem za določanje razdalje do raznih predmetov s pomočjo 3D-analize dveh slik.

Vse spodaj naštete kamere delujejo na enak princip stereo globine. Kamere imajo dokaj podobne lastnosti, v tabeli 3 je primerjava lastnosti, ki jih je vredno izpostaviti.

(14)

14 Tabela 3: Primerjava med kamerami D415, D435(L) in D455

D415 D435/D435L D455

Globinska

tehnologija Aktivni IR-Stereo Aktivni IR-Stereo Aktivni IR-Stereo Zajem slike Zajem po delih Celotni zajem Celotni zajem Globina vidnega

polja (hor x ver)

65°±2° × 40°±1° 86° × 57° (±3°) 86° × 57° (±3°) Zajem slike RZM

senzorja

Zajem po delih Zajem po delih Celotni zajem Vidno polje RZM

Senzorja (hor x ver)

69°±1° × 42°±1° 69°±1° × 42°±1° 86° × 57° (±3°)

INS Da Da Ne

Doseg 20 m 10 m 10 m

*RZM – Rdeče-zeleno-moder senzor (angl. Red-Green-Blue sensor (RGB)) – je merilni senzor, ki pomaga kameri analizirati zajeto sliko, ter določi potrebno količino posamezne komponente barve za dobro izpostavitev slike.

*INS – Inercialni navigacijski sistem (angl. Inertial measurement system) je sistem, ki temelji na merjenju pospeškov v vse tri smeri (x, y, z) in kotov zasuka okrog vzdolžne, prečne in navpične osi.

Primerjane kamere se med seboj ne razlikujejo veliko. Glavne razlike so v načinu zajema slike, dosegu, in vidnem polju slike. Glede na podane primerjave se lahko odločimo med kamero, ki nam najbolj ustreza (recimo za gibanje po večjih prostorih izberemo kamero D415, saj ima od ostalih dveh večji doseg).

(15)

15 2.1.3 LiDAR

LiDAR omeni svetlobno zaznavanje in merjenje (angl. Light Detection And Reading). Pri načinu obdelave strukturirane svetlobe imamo en senzor, ki razpošlje vzorec svetlobe, in en senzor, ki razbere popačenje tega vzorca. S temi podatki lahko izračunamo 3D-informacijo ter ustvarimo oblak več tisočih ali celo milijon točk, iz katerih lahko razberemo obliko obsevanega predmeta.

Čeprav LiDAR-tehnologija uporablja podoben princip s svetlobo, je le-ta malce drugačen. Na 3D-čitalcu laser pošlje svetlobni žarek ter izmeri koliko časa je potreboval za pot tja in nazaj.

Torej, če primerjamo SR305 in L515, lahko vidimo, da je končni rezultat obeh produktov enak, toda pot do teh rezultatov je različna. Primerjava teh dveh kamer je v tabeli 4.

Tabela 4: Primerjava med kamerama SR305 in L515

SR305 L515

Globinska tehnologija Kodirana svetloba LiDAR

Zajem slike Zajem po delih Lasersko skeniranje Globina vidnega polja

(Hor*Ver)

69°±3° × 54°±2° 70° × 55° (±2°) Zajem slike RGB

senzorja

Zajem po delih Zajem po delih Vidno polje RGB

Senzorja (Hor*Ver)

68° × 41.5° (±2°) 70°±3 × 43°±2

IMS Ne Da

Doseg 1,5 m 9 m

Vidimo, da sta po primerjavi kameri dokaj enaki, le da je zajem samih podatkov pri LiDAR-ju veliko bolj kvaliteten in je kamera posledično tudi skoraj 5-krat dražja.

Končni povzetek primerjave nas pripelje do tega, da vsaka kamera služi svojem namenu.

Seriji T265 in T261 sta predvsem primerni za uporabo na brezpilotnih letalnikih. Globinska tehnologija je usmerjena bolj proti merjenju razdalje, medtem ko sta kodirana svetloba in LiDAR namenjena 3D-skeniranju in razpoznavanju obrazov.

(16)

16

2.2 Program Intel RealSense Viewer

To je program, ki ga naložimo na računalnik. Uporablja se predvsem za pogled, snemanje in predvajanje posnetkov kamere, lahko pa tudi nastavimo razne parametre kamere.

Slika 2: Okno programa Intel RealSense Viewer

Možna je izbira med dvodimenzionalnim (2D) in trodimenzionalnim (3D) pogledom. 2D- pogled nam prikazuje dve ločeni sliki za vsako kamero posebej ter prikaz orientacije v prostoru s tremi osmi. 3D-pogled pa nam v realnem času prikazuje rezultat sledenja oziroma lokacijo kamere v prostoru. Poleg tega lahko v 3D-pogledu poljubno vklopimo ali izklopimo trajektorijo, ki prikazuje predhodno premikanje kamere v prostoru (slika 3).

(17)

17

Slika 3: Trajektorija premikanja kamere

Na levi strani se nahaja meni za nastavitev raznih lastnosti (slika 4). V primeru na sliki so parametri za model kamere T265, zato se lahko nastavlja le določene parametre. Nekaj lastnosti: ločljivost (angl. resolution), formati in FPS (prikaz števila slik na sekundo – angl.

frames per second)

Na voljo je še možnost razširitve zgornjih lastnosti, kjer so dodatne nastavitve, ki vplivajo na sliko z ojačenjem (angl. gain) in izpostavitvijo (angl. exposure), ter nekaj drugimi izbirnimi elementi. To okno ima možnost samo-nastavitve ojačenja in izpostavitve. Poleg tega nam prikazuje tudi temperaturo integriranega vezja.

(18)

18

Slika 4: Meni ročnih nastavitev kamere

V zgornjem desnem delu menija (slika 4) se nastavlja splošne parametre, kot so kakovost zajema slik/videov, lokacija, kjer se-le te shranijo, in podobne nastavitve.

V spodnjem delu menija lahko o(ne)mogočimo dodatne funkcije. Če je kvadratek pred lastnostjo obarvan modro, je lastnost omogočena, v nasprotnem primeru pa je onemogočena.

- Enable Mapping – Onemogoči vse kriterije razen dinamično kalibracijo.

- Enable Relocalization – Relokalizacija omogoča, da se naprava glede na predhodno zajete slike lahko ponovno orientira v prostoru, če vmes pride do motenj, in na podlagi spomina zazna že poznane značilke.

(19)

19 - Enable Pose Jumping – Omogoča manjše popravke v legi, kadar zazna, da je lega nepravilna glede na prejšnje premike (na primer kadar se kamera vrti v krogih ali če jo pokrijemo, kjer do izraza pridejo podatki pridobljeni preko inercialnega navigacijskega sistema).

- Enable Dynamic Calibration – Dinamična kalibracija omogoča boljše sledenje v prostoru, saj na podlagi preteklih premikov predvideva oziroma prepozna premike, ki se dogajajo v sedanjem trenutku, in se tako hitreje orientira v prostoru.

- Enable Map Preservation – Omogočimo ohranitev zemljevida med posameznimi sejami. Torej če sledimo lego kamere in to sledenje vmes prekinemo, ne izgubimo podatkov o prostoru okoli kamere.

Primeri kode – Razni praktični primeri zapisani v datotekah. Te datoteke lahko izvršimo z raznimi programskimi okolji, in si tako z njimi pomagamo pri razumevanju delovanja določenih programskih ukazov in delovanja kamere na splošno.

Programski »ovitki« (angl. wrappers) – podpirajo skupne programske jezike in okolja, kot so ROS, Python, Matlab, .NET itd.

V izogib okluziji (zastiranje pogleda kamere v njenem vidnem polju) so za montiranje kamere na robote, brezpilotne letalnike ali druge površine na ohišju dodane luknje z navoji, namenjene pritrditvi kamere.

(20)

20

2.3 Osnovni koncepti in algoritmi pri obdelavi signalov

Ko zajamemo signale, jih moramo za dosego želenih rezultatov primerno obdelati. Za to poznamo različne metode, ki nam pomagajo pri lokalizaciji v prostoru.

2.3.1 Hkratna lokalizacija in kartiranje prostora

Kratica SLAM (angl. Simultaneous Localization And Mapping) označuje hkratno lokalizacijo in kartiranje prostora. Torej princip sočasne lokalizacije in kartiranja pomeni, da sistem zaznava, kje v prostoru se nahaja, hkrati pa pomni prejšnje lokacije, in s tem ustvarja zemljevid okolja. Včasih to metodo označujemo tudi kot sledenje navzven (angl. inside-out tracking). Eden najpomembnejših vidikov SLAM-a je zagotovo sistem s šestimi prostostnimi stopnjami – 6 DoF (angl. degrees of freedom), ki ponazarja vseh 6 smeri premika. Prvi skupek so translacije, in sicer po oseh (x, y in z), torej naprej/nazaj, levo/desno in gor/dol.

Drugi skupek premikov predstavljajo rotacije okoli vsake izmed prej naštetih osi in opisujejo orientacijo togega telesa: nagib ali kot valjanja (angl. roll) okoli osi x, naklon ali kot prevračanja (angl. pitch) okoli osi y, in zasuk ali kot sukanja (angl. yaw) okoli osi z.

Slika 5: Šest prostostnih stopenj

(21)

21 2.3.2 Globalni pozicijski sistem

Poznamo že sicer vsem znan globalni pozicijski sistem - GNSS (angl. Global navigation satellite system), ki je zelo razširjen na veliko področjih ter dostopen že na preprostih mobilnih napravah. Problem globalnega pozicijskega sistema je natančnost, saj je omejena na približno deset metrov, kar je za premikanje robota v prostoru seveda dokaj neuporabno.

Druga pomanjkljivost je zanesljivost signala, saj je le-ta najbolj zanesljiv na prostem oziroma močno odvisen od lokacije na kateri se nahajamo. Poleg tega je frekvenca tega signala relativno nizka (okoli 10 Hz), kar pomeni velike odzivne čase za premike robota.

(22)

22 2.3.3 Inericalni navigacijski sistem in vizualna inercialna odometrija

Senzor, ki je zelo napredoval zadnja leta, je inercialni navigacijski sistem ali INS-senzor (angl. inertial measurement unit - IMU). Deluje na podlagi žiroskopa in merilnika pospeška vgrajena v mikro-elektromehanične sisteme, kjer sta pozicija in orientacija robota podani glede na že prej znano začetno lego. Taki senzorji so zmožni hitro zaznati spremembe v orientaciji in gibanju.

Vizualna inercialna odometrija (angl. visual inertial odometry - VIO), je proces določanja pozicije in orientacije robota v nepospešenem prostoru z pomočjo analize slik kamere.

Način obdelave signalov, s katerim se najbolj približamo zaznavanju sveta kot ga zaznavajo tudi živali, je VIO, ki uporablja CMOS-senzorje, ki delujejo kot oči sistema in zaznavajo zunanje vizualne spremembe. INS deluje kot notranje uho, ki določa orientacijo sistema v prostoru. S pomočjo integriranega vezja lahko te lastnosti povežemo v sistem, ki nam predstavlja trenutno lokacijo v prostoru ter beleženje prejšnjih lokacij (angl. localization and mapping). V primerjavi z ostalimi načini sledenja in zaznavanja v prostoru so VIO-sistemi bistveno cenejši, manjši in varčnejši.

Najboljši način predstave delovanja je, če si predstavljamo orientacijo v časih, ko še ni bilo elektronskih naprav. Zelo klasičen primer je orientacija s pomočjo zvezd. S poznavanjem določenih zvezd ali ozvezdij so ljudje lahko določili sever in posledično ostale smeri ter svojo orientacijo v prostoru. Na podoben način deluje tudi VIO.

Proces se začne z zajemom slike naše okolice. Ta slika lahko vsebuje milijone slikovnih elementov (angl. pixels), zato uporabimo algoritem za zaznavanje značilk. Značilke so določene oblike ali lastnosti na sliki, katere lahko lociramo in se po njih orientiramo. Preprost primer so zvezde na nebu, kjer nebo predstavlja neke vrste podlago, zvezde pa so značilke.

Značilke lahko predstavljajo tudi na primer vsi »koti« na sliki (slika 6). Ko so vse značilke na sliki zaznane, jih je potrebno razlikovati, torej jih označimo ali oštevilčimo. Temu rečemo da značilki pripišemo deskriptor ali vektor značilke. Ta proces ponavljamo za vsak nov zajem slike in tako primerjamo trenutno sliko in njene značilke s prejšnjo.

(23)

23

Slika 6: Prikaz prirejanja značilk na sliko

Problem pri samem zajemanju slik z eno samo kamero je pomanjkanje informacije o globini slike. Torej če premaknemo kamero en meter naprej, bo imela kamera težave z zaznavanjem velikosti premika. Najbolj pogost način za soočanje s to težavo je uporaba dvojnih kamer (za 3D-predstavo) ali pa preprosto INS-sistem.

Ena izmed težav je tudi, kako doseči visok zajem slik z majhno zakasnitvijo (odzivnim časom), saj s hitrejšim premikom kamere le-ta porablja vse več energije za računanje v procesorju in posledično doseganje tega cilja. V tem primeru se izkaže, da je uporaba IMS bolj primerna, saj je izredno dober pri sledenju hitrosti in lege v krajših časovnih obdobjih (v obsegu več deset milisekund), toda je nenatančen v daljših časovnih obdobjih, na primer nekaj sekund. Dodatek IMS-ja k sistemu je razlog za črko »I« v kratici »VIO«. Tabela 5 prikazuje, kako dobro se vizualna in IMS-odometrija dopolnjujeta.

(24)

24 Tabela 5: Primerjava med VIO in IMS

Vizualna odometrija

IMS - odometrija Pogostost

posodabljanja Nizka Visoka

Stabilnost

skozi čas Visoka Nizka

Odvisnost od prikaza

(slike)

Da Ne

Ponovna

lokalizacija Da Ne

Uporaba CPE Visoka Nizka

Ker je pomembna funkcija sledenja prepoznavanje značilk, so zelo pogosti sistemi, ki imajo optične senzorje s širokim vidnim poljem za zajem čim večih značilk. To pride predvsem do izraza pri predmetih z malo značilkami, kjer nam širokokotne leče lahko še vedno zaznajo le- te.

Če povzamemo, je najbolj optimalna rešitev torej združitev dveh ali več širokokotnih objektivov, skupaj z odometrijo IMS-ja ali celo robota samega.

(25)

25

2.4 Opis karakteristik senzorja

Karakteristika senzorja je zveza med vhodno spremenljivko x in izhodno spremenljivko y.

Lahko jo podamo grafično, tabelarično ali analitično.

Slika 7: Karakteristika senzorja

Merilno območje je razpon merjenih veličin, ki ni večje od pogreškov, točno določenih za to območje. Določeno je z razliko med maksimalnim vhodom 𝑋𝑚𝑎𝑥 in minimalnim (ničelnim vhodom) 𝑋𝑚𝑖𝑛.

𝑀𝑅 = 𝑋𝑚𝑎𝑥− 𝑋𝑚𝑖𝑛 (2.1) Pri kameri T265 je merilno območje definirano z zajemom slike. Ker so leče v kameri širokokotne, je vidno polje zelo obsežno - 163°±5°. Merilno območje se tako zelo približa modelu prisekane piramide.

2.4.1 Občutljivost

Občutljivost senzorja je razmerje med majhno spremembo vhoda 𝑑𝑥 in pripadajočo majhno spremembo izhoda 𝑑𝑦.

𝑆 = 𝑑𝑦

𝑑𝑥 (2.2)

Slika 8: Prikaz razmerja med vhodom in izhodom za občutljivost senzorja

Matematično gledano je občutljivost senzorja enaka odvodu karakteristike 𝑦(𝑥), zato lahko občutljivost označimo tudi kot strmino ali naklon karakteristike.

V našem primeru bi bila idealna vrednost občutljivosti neka konstanta, saj bi to pomenilo, da je razmerje med vhodom in izhodom konstantna vrednost in da idealno ni pogreška. Ta pogrešek sem za model kamere T265 izmeril in izračunal v poglavju 6.2.

(26)

26 2.4.2 Točnost

Točnost (angl. accuracy) 𝜀𝐴 podaja, kako dobro se merjeni odziv senzorja 𝑌𝑚 ujema z resnično oz. točno vhodno vrednostjo 𝑋𝑡.

Torej je točnost 𝜀𝐴 razlika med merjeno vrednostjo 𝑋𝑚 in točno vrednostjo 𝑋𝑡. Običajno je točnost podana v odstotkih:

𝜀𝐴 [%] = 𝑋𝑚−𝑋𝑡

𝑋𝑟 100 (2.3)

2.4.3 Ločljivost

Ločljivost (angl. resolution) 𝑅 je najmanjša sprememba vhodne veličine 𝛿𝑥𝑚𝑖𝑛, ki se odrazi v že merljivi spremembi izhoda 𝛿𝑦𝑚𝑖𝑛. Torej koliko lahko minimalno premaknem kamero, da se ta premik opazi v kameri.

Določena je s spodnjo enačbo in sicer v odstotkih:

𝑅 [%] = 𝛿𝑥𝑚𝑖𝑛

𝑋𝑚𝑎𝑥−𝑋𝑚𝑖𝑛100 (2.4)

Enačba (2.4) je opisana z obsegom meritve – 𝑀𝑅.

(27)

27

3 Raspberry Pi 3

Vgradni sistem Raspberry Pi (RPI) je mikroračunalnik manjših dimenzij. Tako kot ostali računalniki je sestavljen iz podobnih osnovnih komponent, kot so centralna procesna enota, grafična procesna enota, pomnilnik, razni video in avdio vhodi in izhodi, omrežni priključek, vhodni in izhodni priključki za splošno rabo ipd.

V našem primeru smo uporabili Raspberry Pi 3 model A+ (slika 9), ki je tretja generacija mikroračunalnikov Raspberry. V primerjavi s svojimi predniki ima kar nekaj dodatnih ali izboljšanih lastnosti. Omembe vredni so brezžična ethernet povezava, zmogljivejša centralno procesna enota ter 64-bitna arhitektura (v primerjavi s prejšnjo 32-bitno različico).

Tehnične specifikacije

CPE: Broadcom BCM2837B0, Cortex-A53 64-bit SoC @ 1,4 GHz Delovni pomnilnik: 512 MB LPDDR2 SDRAM

Povezava: 2.4 GHz in 5 GHz IEE 802.11.b/g/n/ac brezžično lokalno omrežje, Bluetooth 4.2/BLE

Vhodi/Izhodi:

- 40 splošno namenskih priključkov (angl. General purpose input-output) - priključek HDMI,

- priključek MIPI DSC za zaslon, - priključek MIPI CSI za kamero, - 4-polni stereo izhod,

- priključek USB 2.0,

- napajalni priključek mikro USB.

Napajanje: Preko mikro USB priključka (5 V/2.5 A DC) ali preko splošno namenskih priključkov GPIO (5 V DC)

Obratovalna temperatura: 0 °C - 50 °C Dimenzije ploščice: 65 mm x 56 mm

(28)

28 Najbolj pogosta različica operacijskega sistema, ki se uporablja na RPI je Raspbian – različica sistema Debian na osnovi Linuxa.

Slika 9: Raspberry Pi 3, Model A+

(29)

29

4 Robot iRobot Roomba model 600

V osnovi so roboti Roomba zasnovani kot avtomatski sesalniki, namenjeni predvsem za notranje prostore. Za običajne uporabnike se robot uporablja dokaj preprosto, kjer so njegove funkcije programsko omejene. Če robota uporabljamo s tovarniškimi nastavitvami ter privzetimi programi, bo le-ta samodejno sesal prostor ob pritisku na gumb »Clean«.

Mehanska sestava robota je dovolj vzdržljiva, da prenese trke in sunke, ki jih povzroči sam robot ob premikanju po prostoru.

Opišemo ga lahko v obliki sploščenega valja. Na prednjem delu ima odbijač s senzorji (v obliki končnih stikal in IR-senzorjev), s pomočjo katerih se ob trku ob oviro orientira, kje se ovira nahaja, ter s pomočjo teh podatkov oviro obide. Poleg mehanskih senzorjev ima tudi optične – infrardeče senzorje, ki Roombi sporočajo nevarnost prepada (stopnice, rob stene, rob balkona itd.).

Na spodnji strani oziroma v notranjosti robota se nahaja posoda za smeti, katere pobira vrteča se krtača v obliki valja. Robota poganjata dve motorni kolesi, katerih hitrost in smer vrtenja ni odvisna drug od drugega.

Roomba pa ima možnost spremembe programa preko povezave na priključkih na zgornji strani robota. V našem primeru je robot povezan preko signalnih priključkov na mikro- računalnik Raspberry Pi, naprej pa je Raspberry Pi povezan s kamero T265. Skupek teh treh elementov nam omogoča, da se robot lahko vozi po prostoru povsem neodvisno (avtonomno).

Za primerjavo lahko vzamemo človeka, kjer na robotu kamera predstavlja oči in omogoča vid, mikroračunalnik je um oz. možgani, robot pa je sredstvo za premikanje po prostoru, kot so pri človeku deli telesa, ki omogočajo gibanje – mišice in kosti.

Zaznavanje okolice

Roomba se v prostoru orientira s pomočjo senzorjev. Ti senzorji ne predstavljajo le orodja za pomoč pri orientaciji, ampak zagotavljajo varnost robota glede na dogajanje.

Prvi, najbolj uporabljen senzor v našem primeru, je prednji odbijač, ki preprosto predstavlja sklop končnih stikal. Poznamo štiri stanja odbijača:

- 0 – na odbijač ne vpliva nobena zunanja sila in je v sproščenem stanju. V tem primeru se Roomba lahko premika naprej.

- 1 – na odbijač pritisnemo z leve smeri.

- 2 – na odbijač pritisnemo z desne smeri.

- 3 – na odbijač pritisnemo s prednje strani.

(30)

30 Tako lahko ob prednjem trčenju v oviro dokaj natančno določimo, v kateri smeri se ovira nahaja in tako tudi primerno usmerimo robota, da se tej oviri izogne.

Drugi senzor, ki je med samim delovanjem veliko manj uporabljen, a vseeno zelo uporaben, je senzor spuščenih koles. Podobno kot pri prvem senzorju tudi ta deluje na principu končnega stikala, kjer se le-ta sklene v primeru, da se katerokoli od koles spusti.

Ta funkcija deluje kot varovalo v primeru, če se robot preobrne na glavo ali če zapelje v luknjo. V naših programih se je funkcija izkazala za posebej uporabno med samim testiranjem programov, kjer je bilo za izogib poškodbe robota možno Roombo dvigniti in program je poskrbel, da se je robot ustavil.

Zadnji sklop predstavljajo štirje infrardeči senzorji, ki se nahajajo na sprednji strani robota, takoj za odbijačem. Uporablja se jih kot dodatno zaščito, da robot ne zapelje preko prepada oziroma v luknjo.

Slika 10: Zgornji del Roombe - gumb za vklop (Clean)

(31)

31

Slika 11: Spodnji del Roombe

(32)

32

5 Izdelava avtonomnega mobilnega sistema

Po izboru teme diplomskega dela sem se kmalu zatem ponovno sestal z mentorjem, ki mi je bolj podrobno predstavil, kako bo samo delo potekalo. Prav tako mi je predal kamero T265, in tako sem lahko začel s prvimi koraki v praktičnem delu naloge.

Dela sem se lotil sistematično, kjer sem najprej na osebni računalnik naložil programsko opremo in preizkusil delovanje ter točnost kamere. Nato sem vzpostavil povezave med vsemi napravami (kamero, robotom in vgradnim sistemom). Delovanje posameznih povezav sem ločeno preverjal s preprostimi programi. Na koncu sem napisal končni program, in opisal njegovo delovanje.

5.1 Knjižnjice in programska oprema za povezavo kamere z osebnim računalnikom

Na začetku sem z Intelove spletne strani (https://www.intelrealsense.com) naložil programsko opremo Intel Realsense Viewer. Kot že zgoraj omenjeno, je to program, ki nam omogoča v povezavi s kamero nastavljati ali spremljati razne lastnosti, kot so npr. čas izpostavljenosti in ojačenje. Program mi je služil le kot orodje za preverjanje delovanja kamere in odčitavanje določenih lastnosti, kot so ločljivost in hitrost osveževanja slike, ter zajemanje raznih poskusnih slik.

Ko sem se dodobra seznanil z osnovami in lastnostmi kamere, je bil čas, da praktično preizkusim nekatere primere delovanja kamere.

Za programski jezik sem izbral Python, saj se mi je zdel najbolj optimalna izbira, saj je sintaksa jezika Python prijazna začetnikom. Program bi lahko pisal v preprostem urejevalniku besedila, a sem se vseeno raje odločil za razvojno okolje PyCharm (slika 12), saj je sam izgled in urejanje kode tam lažje in bolj pregledno. Poleg tega je velika prednost tudi pomoč pri pisanju (bližnjice in predvidevanje besed) ter zaznavanju napačno napisanih besed oziroma ostalih napak v kodi, katere sem lahko odpravil tudi z razhroščevanjem.

(33)

33

Slika 12: Izgled programa PyCharm s programsko kodo na desni

Toda za preizkus delovanja povezave s kamero sem moral naložiti še knjižnice RealSense (SDK).

Primer v kodi (slika 13) je na primer ukaz »pipe.start()«, kjer program pošlje zahtevo za začetek pretoka podatkov med kamero in računalnikom.

Za namestitev knjižnic sem sledil preprostim navodilom na Intelovi spletni strani (https://dev.intelrealsense.com/docs/installing-intel-realsense-sdk-20-for-windows).

Po končani namestitvi paketov sem lahko delovanje kamere preizkusil tudi nekoliko drugače, in sicer za začetek z danimi vzorčnimi primeri, katere sem dobil z namestitvijo SDK-knjižnic.

Posebej me je zanimala sama točnost kamere in odzivi v določenih primerih.

(34)

34

5.2 Preverba točnosti kamere T265

Verjetno najbolj pomembno vprašanje, ki se mi je porajalo, kako točna je kamera oziroma kakšna so odstopanja pri ocenjevanju lege kamere v prostoru?

Sledeče primere sem izvedel v dobri in slabi vidljivosti ter rezultate med seboj primerjal.

Za ta primer sem si izbral določeno razdaljo, ki sem jo predhodno izmeril z metrom. S počasnim premikom kamere vzdolž osi od začetne do končne točke je tako kamera opravila pot, ki je enaka izmerjeni, na koncu pa sem primerjal rezultate med metrom in kamero ter tako dobil pogreške o točnosti kamere.

Uporabil sem preprost program, ki je izpisoval trenutne koordinate kamere.

5.2.1 Program za izpis koordinat

import pyrealsense2 as rs import time

pipeline = rs.pipeline() pipeline.start()

try:

while True:

frames = pipeline.wait_for_frames(timeout_ms=1000) x = frames.get_frame_number()

y = frames.get_frame_number() z = frames.get_frame_number()

lega = frames.get_pose_frame().get_pose_data() x = lega.translation.x

y = lega.translation.y z = lega.translation.z x = x*100

y = y*100 z = z*(-100)

print('x = {:.2f} cm'.format(x)) print('y = {:.2f} cm'.format(y)) print('z = {:.2f} cm'.format(z)) print('----')

time.sleep(0.5)

except KeyboardInterrupt:

pass finally:

pipeline.stop()

(35)

35 5.2.2 Meritve in izračuni

Prve meritve sem opravil v povsem osvetljenem prostoru (prižgan zaslon računalnika, prižgana luč ter odgrnjena senčila), v drugem pa sem prostor občutno zatemnil (še vedno prižgan zaslon računalnika, toda ugasnjena luč ter spuščena senčila, tako da prostor ni dobil nobenega vira svetlobe, razen od zaslona).

Razdalja izmerjena z metrom: 20,0 cm

Absolutni (merilni) pogrešek, kjer 𝑥𝑖 predstavlja izmerjeno vrednost s kamero, x pa izmerjeno vrednost z metrom:

𝐸 = 𝑥𝑖 − 𝑥 (5.1)

Relativni (merilni) pogrešek v razmerju do (delovne) prave vrednosti:

𝑒 =𝐸

𝑥 = 𝑥𝑖−𝑥

𝑥 (5.2)

V našem primeru za osvetljen prostor:

𝐸 = 20,4 – 20 = 0,4

𝑒 = 0,4

20 𝑐𝑚 = 0,02 = 2%

Ter še v zatemnjenem prostoru:

𝐸 = 20,1 – 20 = 0,1

𝑒 = 0,1

20 𝑐𝑚 = 0,005 = 1%

Iz rezultatov je razvidno, da se kamera odziva bolje v zatemnjenem prostoru. Rezultati so me nekoliko presenetili, toda ko sem med seboj primerjal sliki, je v primerjavi očitno, da je vidljivost pri zatemnitvi prostora in vklopljenem zaslonu računalnika še vedno zelo dobra – po rezultatih sodeč celo boljša.

(36)

36

Slika 13: Primerjava zajema slike v zatemnjenem prostoru (levo) in osvetljenem prostoru (desno)

Za drugi del odgovora na vprašanje, je sledil podoben poizkus, le da sem, namesto točnosti merjenja translacije, preverjal točnost merjenja rotacije.

Kamero sem obrnil v začrtano smer in preverjal odstopanja za 90°, 180°, 270° in 360°. S slednjimi meritvami sem tako dobil ne le točnost kamere pri rotaciji, ampak tudi točnost pri manjših ali večjih obratih.

Tabela 5: Primerjava med pravimi vrednostmi in vrednostmi kamere T265 pri osvetljenem prostoru

Predhodno izmerjen zasuk Zasuk izmerjen s kamero T265

90° 90,1°

180° 179,8°

270° 270,8°

360° 361,1°

Tabela 6: Enake primerjave kot v tabeli 5 le za zatemnjen prostor Predhodno izmerjen zasuk Zasuk izmerjen s kamero T265

90° 90,0°

180° 179,5°

270° 269,6°

360° 359,3°

Ponovno so rezultati pokazali, da je merjenje pri manjši osvetlitvi za odtenek bolj točno. Iz tega sklepam, da je razlog za manjši pogrešek preprosto boljše razločevanje med značilkami, ker je slabše osvetljen prostor še vedno osvetljen dovolj dobro, da si vzorci objektov na sliki

(37)

37 dovolj kontrastni katere kamera bolje razloči kot pri prostoru, ki je preveč osvetljen in so robovi nerazločni.

Drugo pomembno vprašanje, katerega odgovor sem iskal, je bila točnost kamere v ekstremnih premikih – takrat, ko so premiki hitri in nepredvidljivi, kar pripelje do slabše točnosti zajema slik in posledično tudi slabše točnosti v orientaciji. V praksi bi na tak primer naleteli, če bi robota (na katerem je kamera) z hitrimi gibi dvignili in prestavili na drugo lokacijo. Žal zaradi same fizične omejitve s kablom nisem mogel preveriti pri katerih kotnih hitrostih začne kamera izgubljati točnost, sem pa točnost vseeno preveril tako, da sem v začetku kamero postavil na določeno točko, jo nato dvignil in s hitrimi gibi v naključno smer premikal po prostoru približno 5 sekund, nato pa jo odložil na začetno mesto, ter odčital spremembo začetne in končne pozicije.

Začetna točka: (x, y, z) = (0 cm, 0 cm, 0 cm)

Končna točka: (x, y, z) = (0,1 cm, 0,2 cm, 0,1 cm)

Lahko bi preveril tudi druge lastnosti ali motnje, kot na primer delovanje kamere pri različnih pogojih delovanja znotraj omejitev, kot je zelo nizka temperatura, ampak se mi je poskus zdel neprimeren, saj bi lahko kamero pri tem poškodoval.

5.3 Vzpostavitev povezave z vgradnim sistemom Raspberry Pi

Naslednji korak je bila vzpostavitev povezave med osebnim računalnikom in vgradnim sistemom Raspberry Pi.

Vgradni sistem omogoča vzpostavitev povezave z brezžičnim omrežjem (Wi-Fi), ki je zaščiteno z imenom in geslom omrežja. Za vmesno povezavo sem uporabil usmerjevalnik (angl. router) TL-WR820N, katerega ime in geslo sem nastavil tako, da se je vgradni sistem lahko samodejno povezal nanj.

Kot zadnjo informacijo za uspešno povezavo sem potreboval še IP-naslov vgradnega sistema Raspberry Pi. Ker je naslov dinamičen, se je sčasoma (med vklopi in izklopi) spreminjal. Za pridobitev naslova sem na mobilno napravo (iPhone S5) naložil aplikacijo imenovano Fing, katere namen je locirati naslove vseh naprav povezanih v isto omrežje. Tako sem se s telefonom povezal na usmerjevalnik in z aplikacijo (slika 14) odčital IP-naslov vgradnega sistema, ki je bil že predhodno samodejno povezan na usmerjevalnik.

(38)

38

Slika 14: Mobilna aplikacija Fing, kjer so izpisane vse naprave povezane na isto omrežje

Sedaj sem imel vse potrebne podatke in pripravljeno opremo za vzpostavitev povezave med osebnim računalnikom in vgradnim sistemom Raspberry Pi. Odprl sem ukazni poziv in se povezal preko povezave SSH na IP-naslov vgradnega sistema (slika 15). Povezava SSH (angl.

Secure Shell) je omrežni protokol, ki omogoča uporabnikom varen dostop do računalnika preko nezavarovanega omrežja.

(39)

39

Slika 15: Uspešna povezava na Raspberry Pi preko ukaznega poziva

Za dostop je bil potreben vnos gesla, ki je prav tako kot samodejna povezava na brezžično omrežje, vnaprej nastavljen. Po uspešni povezavi smo povezani in lahko dostopamo do map in datotek na vgradnem sistemu preko ukaznega poziva na osebnem računalniku.

Sama povezava in dostop do sistema Raspberry Pi preko ukaznega poziva je sama po sebi sicer zadostna za delovanje in razvoj, toda sam sem želel povezavo imeti na bolj grafičnem nivoju, saj se mi je zdelo, da je tako urejanje in pregled map ter datotek na vgradnem sistemu veliko lažje in bolj pregledno.

Preden je vzpostavitev take povezave možna, moramo najprej omogočiti povezavo virtualnega omrežja VNC (angl. Virtual Network Computing) in na osebni računalnik namestiti programsko orodje, preko katerega se nam bo prikazoval zaslon vgradnega sistema.

V ukaznem pozivu sem na sistemu Raspberry Pi vnesel ukaz sudo raspi-config

Odprl se je meni z nastavitvami, ki je prikazan na sliki 16. Tu sem omogočil možnost povezave VNC in nastavil ločljivost prenosa slike, brez katere povezava ni možna. Vgradni sistem sem nato ponovno zagnal, da so se spremembe v nastavitvah shranile.

(40)

40

Slika 16: Nastavitve sistema Raspberry Pi do katerih dostopamo z ukazom "sudo raspi-config"

Za drugi del je bila potrebna namestitev programa VNC Viewer, ki omogoča grafični dostop do oddaljenega namizja (slika 17). Princip povezave je dokaj preprost: ob vseh predhodno pravilno nastavljenih funkcijah je potrebno le vpisati IP-naslov in geslo vgradnega sistema Raspberry Pi.

Slika 17: Izgled grafičnega vmesnika VNC Viewer

5.4 Preizkus povezave med robotom in vgradnim sistemom

Z vzpostavljeno povezavo med osebnim računalnikom in sistemom Raspberry Pi je bil čas, da začnem delo na samem vgradnem sistemu in napravami, ki so povezane nanj. Za začetek sem se odločil, da delovanje robota Roomba preizkusim s preprostim programom, kjer se bo le-ta po prostoru vozil avtonomno, toda zaenkrat brez pomoči kamere. Cilj je trenutno le uspešna

(41)

41 vzpostavitev komunikacije med robotom in računalnikom ter preizkus delovanja osnovnih funkcij robota, kot so nastavitev in zagon motornih koles in odčitavanje senzorjev na prednjem odbijaču.

Slika 18: Elektro shema vmesniške povezave med robotom in vgradnim sistemom

(42)

42 5.4.1 Program za avtonomno vožnjo po prostoru

from roomba import *

if __name__=='__main__':

with RobotRoomba(port='/dev/ttyS0') as robot:

robot.start() robot.control() robot.controlFull()

robot.updateSensors() robot.printSensorValues()

while True:

robot.updateSensors()

bumper = robot.sensors[sci.BUMP_WHEEL_DROPS]

print('BUMPER = {}'.format(bumper)) #izpis vrednosti odbijaca

if robot.leftBump or robot.rightBump:

robot.driveDirectLeft = 100 robot.driveDirectRight = -100 else:

robot.driveDirectLeft = 100 robot.driveDirectRight = 100

robot.updateDriveDirect() sleep(0.03)

Ideja delovanja programa je torej vožnja robota naprej ob vsakem času, razen ko ta dobi informacijo senzorja odbijača, da se je robot zaletel v oviro. V tem primeru se robot vrti na mestu v desno. Sama zasnova robota mu omogoča, da se ob rotaciji v eno izmed dveh smeri sčasoma obrne dovolj, da se vrednost senzorjev na odbijaču (ter sam odbijač) sprostijo, in tako lahko nadaljuje pot naravnost, dokler ne trči v novo oviro. Tak princip delovanja si lahko dobro predstavljamo v sobi, ki je kvadratne oblike in ima ravna tla ter je brez ovir. Tu se bo delovanje robota s tem programom odražalo v vožnji ob stenah v smeri zasuka robota ob trku v steno, kot je prikazano na sliki 19.

(43)

43

Slika 19: Premikanje robota po pravokotnem prostoru brez ovir

5.5 Vzpostavitev povezave med kamero in vgradnim sistemom

Preden pa se lahko lotimo izdelave programa in povezave med vsemi tremi elementi (vgradnim sistemom, kamero in robotom), pa potrebujemo še zagotovljeno povezavo med kamero in samim vgradnim sistemom Raspberry Pi.

Podobno kot na začetku pri namiznem računalniku je bilo tudi za Raspberry Pi potrebno namestiti knjižnice in ostalo programsko opremo, s to razliko, da je bilo tu občutno več predhodno zahtevanih namestitev.

V začetku sem že na fakulteti prejel Raspberry Pi s kartico mikro SD, katera je vsebovala osnovne programe in opremo, kot so operacijski sistem, posodobljeno programsko opremo za strojno opremo, nastavitve za povezavo z robotom Roomba in podobno.

Za samo namestitev so bili ukazi praktično enaki kot tisti, katere sem uporabil za namestitev knjižnic na osebnem računalniku. Poleg namestitve knjižnic librealsense, opencv, protobuf ter številnih drugih, je bila potrebna namestitev knjižnic pyrealsense2, katere so vsebovale vmesnike za delo s Pythonom.

Na tej točki sem naletel na prve večje težave v nalogi, kjer je zaradi velikosti samih knjižnic, omejene moči strojne opreme ter direktnega prevajanja, razširjanja in nalaganja le-teh, vse to skupaj terjalo svoj davek. Samo nalaganje in prevajanje knjižnic je bilo zelo počasno (za posamezne odseke knjižnic je lahko Raspberry Pi porabil ure, v nekaterih primerih celo dan ali dva). Največ težav mi je povzročilo nalaganje in prevajanje knjižnice pyrealsense2.

(44)

44 V prvem primeru sem naletel na pomanjkanje prostora na kartici micro SD. Ker je bilo na kartici predhodno naloženih že veliko tako obveznih kot tudi neobveznih stvari sem bil primoran izbrati med iskanjem ter brisanjem neobveznih stvari ali pa preprosto prepisati celotno vsebino obstoječe kartice na večjo kartico. Slednja rešitev se mi je zdela veliko primernejša, saj bi bilo iskanje nepotrebnih stvari na kartici lahko zamudno, na koncu mogoče celo ne dovolj učinkovito, poleg tega pa bi lahko ponesreči izbrisal katero izmed ključnih datotek. Kopijo vsebine kartice ali drugače rečeno »sliko« (angl. disk image) sem naredil s posebnim programom Win32 Disk Imager, kjer program celotno vsebino strne v datoteko z končnico .iso in je nato pripravljena za nadaljnjo obdelavo za namestitev na novo kartico.

Tako sem delo nadaljeval z več prostora na svoji kartici, toda tu se težave žal še niso končale.

Kot sem že omenil, je bilo samo prevajanje knjižnic dolgotrajno in je zavzelo kar veliko procesorske moči vgradnega sistema. Pri prevajanju knjižnice pyrealsense2 sem nekajkrat naletel na napako pri prevajanju, kjer se je prevajanje preprosto prekinilo, sama napaka pa mi žal ni dala vedeti, kaj je pravzaprav šlo narobe. Tako sem poizkušal in poizkušal in naposled je prevajanje le uspelo. Še vedno nisem povsem prepričan zakaj, se je napaka pravzaprav pojavljala, ampak dozdeva se mi, da je bila napaka preprosto naključje ali pa morda v končni fazi pomanjkanje same zmogljivosti vgradnega sistema (slednjemu se bom posvetil v kasnejšem delu naloge).

5.6 Preizkus povezave med kamero in vgradnim sistemom

Ko mi je končno uspelo naložiti vse potrebne elemente za povezavo in komunikacijo med vgradnim sistemom Raspberry Pi in kamero, sem se ponovno vrnil k programu v poglavju 5.2.1 katerega sem uporabil že na osebnem računalniku za izpis koordinat.

Program je uspešno deloval in v ukaznem pozivu na vgradnem sistemu Raspberry Pi sem lahko opazoval izpisovanje koordinat kamere v realnem času.

5.7 Poskusni program za povezavo med kamero, robotom in vgradnim sistemom

Vsi dosedanji testni programi so kazali, da sem na pravi poti. Do glavnega programa me je ločil le še zadnji testni program: preizkus povezave med kamero, robotom in sistemom Raspberry Pi. Uspešnost tega programa bi dokazala, da je sistem pripravljen in da se lahko lotim snovanja glavnega programa.

Zamisel tega testnega programa je bila kot pri ostalih dokaj osnovna: Raspberry Pi iz kamere T265 stalno pridobiva podatke o trenutni lokaciji in v kolikor je koordinata z manjša od

(45)

45 predhodno določene vrednosti, se bo robot premikal naravnost. Ko se želena vrednost in trenutna vrednost izenačita, ali trenutna vrednost preseže želeno vrednost se program zaključi in posledično zaustavi premik robota.

5.7.1 Program za vožnjo do želene točke

import pyrealsense2 as rs import time

from roomba import *

pipeline = rs.pipeline() pipeline.start()

if __name__ == '__main__':

with RobotRoomba(port='/dev/ttyS0') as robot:

robot.start() robot.control() robot.controlFull() robot.updateSensors()

try:

while True:

frames = pipeline.wait_for_frames(timeout_ms=1000) z = frames.get_frame_number()

lega = frames.get_pose_frame().get_pose_data() z = lega.translation.z

z = z*(-100)

if z < 20:

robot.driveDirectLeft = 100 robot.driveDirectRight = 100

else:

robot.driveDirectLeft = 0 robot.driveDirectRight = 0

print('Robot je prispel v tocko.') time.sleep(0.5)

robot.updateDriveDirect() time.sleep(0.03)

except KeyboardInterrupt:

pass finally:

pipeline.stop()

(46)

46 Ponovno sem naletel na sicer manjše težave, za katere sem kasneje našel vzrok. Program se je ob izvajanju namreč dokaj naključno ustavljal – torej nekje v samem poteku se je povezava med vgradnim sistemom in robotom prekinila z napako:

»struct.error: unpack requires a string argument of length 80«

Javljena napaka predstavlja prekinitev povezave med robotom in vgradnim sistemom. Ker je bila napaka takrat precej naključne narave, mi ni posebej ovirala samega dela in sva z mentorjem po posvetu soglašala, da je napaka možna zaradi napake pri komunikaciji med napravama ter da delo nadaljujem, če bo delo še vedno možno.

5.8 Program za izogibanje oviram

Zatem sem ta program nadgradil še z delčkom programske kode, ki je bil namenjen izmikanju oviram. Izvzel sem del programske kode iz prejšnjega programa namenjenega preizkusu povezave med vgradnim sistemom in robotom (program v poglavju 5.4.1), kjer se je robot avtonomno vozil po prostoru (obrat robota ob pritisku na odbijač).

Program je, razen pri omenjenih prekinitvah povezave, deloval po pričakovanjih, in to je pomenilo, da je vse nared za ustvaritev glavnega in končnega programa.

5.9 Končni program

Končni program mora omogočati robotu, da prispe iz poljubne začetne točke v želeno točko A, nato pa poljubno tudi naprej do naslednjih točk (B, C itd.) ali preprosto nazaj v začetno točko.

Vsi prej napisani in preizkušeni programi niso služili le kot preizkus med povezavami in delovanjem robota, kamere in vgradnega sistema, ampak sem jih sedaj lahko delček po delček vključil v glavni program.

Ker sem imel vzorce programske kode za osnove delovanja sistema že napisane, je bilo treba iz teh vzorcev izluščiti bistvo potrebno za glavni program. Na primer povezava kamere in izpis koordinat iz programa v poglavju 5.2.1 vklop motorjev koles ali izmik oviram (program v poglavju 5.4.1) in podobno.

Manjkal pa mi je še vedno bistven del programa – regulacij lege robota v prostoru. Torej da se robot avtonomno zapelje do želene točke ne glede na trenutno usmerjenost ali položaj. Ta del programa je regulacija in rezultat sta preprosto vrednosti hitrosti in smeri vrtenja levega in desnega kolesa. Ti dve vrednosti se morata sproti spreminjati glede na trenutno lego robota. V

(47)

47 primeru večje oddaljenosti robota od želene točke mora biti hitrost večja, in v obratnem primeru, ko se robot približuje točki, se ta hitrost manjša. Prav tako mora biti ta hitrost sorazmerna orientaciji robota – če je robot usmerjen v nasprotno smer od točke, se mora obračati hitro, in v kolikor se razlika v kotu manjša, se tudi kotna hitrost manjša, dokler ne doseže minimalne vrednosti.

Naša enačba za hitrost levega in desnega kolesa je tako sestavljena iz dveh delov – tangencialne hitrosti in prispevka kotne hitrosti

𝑣𝐿 = 𝑣𝑇 - 𝑣𝐾 (5.3) 𝑣𝐷 = 𝑣𝑇 + 𝑣𝐾 (5.4)

Tangencialno hitrost 𝑣𝑇 določimo preprosto glede na razdaljo d od trenutne točke do želene točke. Da dobimo želeno vrednost hitrosti, moramo razdaljo pomnožiti z ojačenjem tangencialne hitrosti 𝐾𝑣. Tako dobimo enačbo za regulacijo hitrosti (5.5) ki se stalno spreminja glede na razdaljo (večja kot je razdalja, večja je hitrost in obratno).

𝑣𝑇 = 𝐾𝑣 d (5.5)

Za tangencialno kotno hitrost uporabimo enačbo kotne hitrosti 𝜔 = 𝐾𝜔𝑒𝜌, kjer je 𝐾𝜔 ojačenje. 𝑒𝜌 je pogrešek oziroma razlika med želenim in dejanskim kotom (koliko se moramo še obrniti, da dosežemo vrednost želenega kota). Ojačenje je konstantna vrednost, pogrešek kota 𝑒𝜌 pa je spremenljivka, ki se spreminja glede na razliko kotov. Vse skupaj moramo prirediti še glede na fizikalne lastnosti robota, in sicer razmak med kolesi, ki je 230 mm.

Prispevek kotne hitrosti k hitrosti levega oz. desnega kolesa je torej:

𝑣𝐾 = 𝜔𝐿

2 ; kjer 𝜔 = 𝐾𝜔 𝑒𝜑 (5.6) Ko imamo izpostavljeni obe vrednosti hitrosti, ju lahko vstavimo v enačbi (5.3) in (5.4) za hitrosti levega in desnega kolesa.

Zgornje enačbe opisujejo regulacijo lege robota. Seveda pa ne smemo kar odmisliti fizikalnih omejitev samega robota, to je v našem primeru hitrost. Hitrost je po priročniku navzgor omejena na 500 mm/s, navzdol pa na 28.5 mm/s. Robot ima v načinu polnega prevzema nadzora (angl. Full Control) izklopljene razne varnostne funkcije, razen če so le-te uporabljene v programski kodi programa, ki ga poganja. To pomeni, da lahko (ob nepravilni rabi) robota tudi poškodujemo, če zapelje skozi nezavarovan rob in pade v globino ali se zaleti z veliko hitrostjo in se motorji koles še vedno vrtijo, kar lahko poškoduje motorje. V izogib takim dogodkom sem hitrost robota navzgor/navzdol omejil na največjo vrednost ±250 mm/s, kar bi mi moralo dati dovolj časa, da lahko predvidim nesrečo in posredujem ročno. Če je hitrost motorja nastavljena med -28.5 mm/s in 28.5 mm/s se motorji preprosto ne bodo zagnali, zato sem minimalno hitrost omejil na ±30 mm/s.

(48)

48

Slika 20: Grafični prikaz kotov

Za razdaljo med trenutno lego robota in želeno točko preprosto uporabimo enačbo za Pitagorov izrek:

𝑐2 = 𝑎2 + 𝑏2 (5.7)

Kjer v našem primeru (slika 20) vstavimo razdaljo in koordinate:

𝑑 = √(𝑥𝑟− 𝑥)2+ (𝑧𝑟− 𝑧)2 (5.8) Pogrešek kota 𝑒φ dobimo z razliko med referenčnim kotom φ𝑟 in trenutnim kotom φ:

𝑒φ= φ𝑟− φ (5.9)

Struktura programa je shematično podana na sliki 21, celoten program pa je v prilogi.

(49)

49

Slika 21: Diagram poteka programa

(50)

50 Na tej točki pa sem se soočil še z zadnjim problemom v nalogi. Na problem sem sicer naletel že v prejšnjem delu naloge, kjer se je povezava med robotom in RPi naključno prekinjala, le da so bile te prekinitve sedaj veliko bolj pogoste oziroma je bilo delo in preizkušanje programa na tej točki nemogoče.

Ko sem poskusil zagnati predhodne programe, je bila težava sicer še vedno prisotna, toda v veliko manjših intervalih, kar mi je dalo misliti, da je morda problem ponovno, kot pri prevajanju knjižnic, v sami procesni zmogljivosti Raspberry Pi. Ko sem se o težavi posvetoval z mentorjem, mi je svetoval nekaj možnosti, ki bi jih lahko preizkusil, in med njimi sem naposled našel rešitev. Težava ni bila ne v zmogljivosti (vsaj ne direktno) vgradnega sistema in tudi ne v povezavi med robotom in vgradnim sistemom, ampak v samem napajanju sistema. Vir napajanja je bil namreč iz prenosnega polnilca (angl.

powerbank), ta pa je bil star že nekaj let, in je posredoval manjši tok od navedenega, kar je v samem sistemu pripeljalo do pomanjkanja moči za izvajanje programskih funkcij.

K sreči sem imel na voljo tudi stalni napajalni vir iz vtičnice preko napajalnega adapterja.

Poizkus je potrdil domneve, in program je deloval brez prekinitev. Edina negativna posledica je bila neprijetna omejitev gibanja robota glede na dolžino kabla. Prav tako sem poskusil vse skupaj zagnati brez uporabe grafičnega uporabniškega vmesnika VNC Viewer, in v tem primeru je program tudi deloval, a vseeno so se tu še vedno pojavljale prekinitve povezave, saj je bila na trenutke poraba moči programa sama po sebi še vedno prezahtevna za prenosni polnilnik.

(51)

51

Slika 22: Celotni sistem - kamera, robot in vgradni sistem z napajanjem

Za grafični prikaz delovanja sem uporabil funkcijo za zapis podatkov v tabelo. Te podatke sem nato iz tabele dodal v graf, ki prikazuje potek premika robota po prostoru. Za izris lokacije uporablja koordinati z in x.

(52)

52

Slika 23: Trajektorija premika robota iz točke A v točko B, ter nazaj v točko A

Na sliki 23 je razvidno, da je drugi del poti (od točke B nazaj do točke A) nekoliko neoptimalen, saj robot dela velik polkrožni ovinek. S tem robot v našem primeru porabi občutno več časa, kot bi ga, če bi se vrnil po enaki poti kot je prišel do točke B.

Možna rešitev bi bila vstavitev dodatne kode v program, kjer bi ob dosegu točke B robot pred izvedbo programa regulacije med premikom do točke najprej preveril vrednost kotnega pogreška 𝑒𝜑. Če bi bil ta pogrešek večji od določene vrednosti (na primer 90°), bi se robot najprej na mestu obrnil v približno smer želene točke, in šele nato nadaljeval s premikom naprej.

(53)

53

6 Zaključek

Na poti do zaključka dela me je čakalo veliko preizkusov in novih znanj, ki sem jih moral osvojiti. Delo je potekalo skoraj brez večjih težav, razen napak pri prevajanju RealSense knjižnic ter pomanjkanja napajalne moči avtonomnega sistema.

Delovanje avtonomnega mobilnega sistema deluje po pričakovanjih. Sistem se glede na cenovni razpon posameznih naprav, ki so v nekoliko nižjem razredu, giblje povsem avtonomno, in sicer z majhnimi (pričakovanimi) pogreški.

Poleg do sedaj narejenega dela je možnosti za nadgradnjo sistema veliko. Ena izmed možnosti je dodano risanje zemljevida okolice. Druga možnost je na primer samodejna izbira točk ali sprotni vnos želenih točk, ko sistem doseže že prej želene točke.

Na koncu lahko rečem, da sem s svojim delom zadovoljen, saj mi je zastavljen cilj uspelo doseči, hkrati pa sem obnovil znanje, ki ga že imam, pridobil veliko novega znanja ter dobil zagon za nadaljnje izobraževanje v tej strokovni smeri.

(54)

54

Reference

POVEZANI DOKUMENTI

Več kot 150 robotov Spot so s kratkoročnimi zakupi programa prvih uporabnikov Boston Dynamics uspešno uporabljali v ameriških in mednarodnih podjetjih ter razisko- valnih

SuK na svojem sedežu v Nemčiji vsako leto proizvede skoraj 30 milijonov komponent za ohišja ključavnic z uporabo procesa brizganja s penjenjem MuCell.. Kupci SuK so na primer

V drugi fazi je bilo mogoče na podlagi podatkov o lokaciji celic mobilnemu telefonu, ki uporablja določeno celico, pripisati kot lokacijo izračunano središče tiste celice

9.1 Priprava za izvedbo ustvarjalne tehnične dejavnosti z glino – vzporedna priprava za izvedbo raziskave merjenja ustvarjalnosti z uporabo TCT-DP testa (Test

Nacionalni inštitut za javno zdravje, Koronavirus – zdravstveni delavci: Navodila za zdravstvene delavce; Navodila za organizacijo dela, obravnavo bolnika in

Nacionalni inštitut za javno zdravje, Koronavirus – zdravstveni delavci: Navodila za zdravstvene delavce; Navodila za organizacijo dela, obravnavo bolnika in

Pomen usposabljanja iz temeljnih postopkov oživljanja z uporabo AED in organiziranje v Republiki Sloveniji... Žrtev je neodzivna in ne

T-matica (Slika 9) je vezni element, narejen iz jekla z izvrtino z navojem M6, ki služi predvsem za sidranje delovne mize stroja na