VIDI Project X #45:
VIDI X i spoj s umjetnom inteligencijom

Nadogradite robota i dodajte mu sposobnost vida kao bi postao sposobniji za vizualnu percepciju i analizu okolnog svijeta.

U ovoj radionici opremit ćemo robota gusjeničara s HuskyLens AI kamerom.

Kompletan programski kod pronađite na linku:
https://github.com/VIDI-X/VidiX-AI-Machine-Vision-Sensor-Robot

Kamera može robotu omogućiti da prepoznaje razne objekte ili znakove poput QR kodova i sl., te da ih iskoristi za navigaciju, lakše izvođenje zadataka i donošenje boljih odluka. Ovisno o tome kako je AI kamera programirana te koji su dodatni senzori dostupni robotu, on može biti sposoban čak i za prepoznavanje lica i gestikulacije.

No nadogradnja robota kamerom samo je jedan dio onoga što robota čini učinkovitim i sposobnim. Da bi robot zaista mogao biti efikasan, mora biti opremljen i drugim komponentama, kao što su razni senzori i algoritmi koji će mu omogućiti da pravilno interpretira primljene podatke te prema potrebi adekvatno komunicira s okolinom.

Robot će od HuskyLens AI kamere primati određene podatke i na temelju njih donositi odluke. U ovoj radionici napravit ćete jednostavnog robota koji će pratiti zadanu liniju kretanja.

Zašto smo se uopće odlučili za korištenje kamere spram drugih senzora? Korištenje AI kamere za navigaciju robota ima nekoliko prednosti u odnosu na, recimo, korištenje lidara (linijskog radara) ili daljinomjera.

Prvo, AI kamere jednostavnije su za integraciju u robota jer se mogu jednostavno montirati i programirati kako bi radili u suradnji s mikrokontrolerom robota. Lidari su često skuplji od AI kamera, a daljinomjeri najčešće vide samo jednu točku iz koje teško možemo dobiti više informacija o okolini.

Drugo, AI kamere su vrlo osjetljive na okolne uvjete i mogu u realnom vremenu detektirati objekte i prepreke u svojem vidokrugu. To pomaže robotu da se orijentira i izbjegne prepreke tijekom svoje vožnje. Lidari i daljinomjeri, s druge strane, često su ograničeni u svojoj sposobnosti detektiranja objekata i prepreka, što može dovesti do problema pri navigaciji robota.

Treće, AI kamere dizajnirane su tako da prepoznaju i analiziraju slike, što omogućuje robotu da u skladu s uvjetima okoline mijenja svoj put. Lidari i daljinomjeri, međutim, samo mjere udaljenosti i ne nude istu sposobnost korištenja pamćenja.

Ukratko, korištenje AI kamere za navigaciju robota omogućuje autonomnom robotu da bolje prepozna i analizira okolne uvjete te da na temelju tih informacija mijenja svoj put i izbjegava prepreke. To može pomoći da se autonomni robot sigurnije i učinkovitije kreće kroz okolne uvjete.

 

Za ovaj projekt bit će vam potrebno:

Velleman KSR11 kit robot za sve terene, https://www.chipoteka.hr/set-robot-za-sve-terene-velleman-ksr11-8090228040

 

VIDI X mikroračunalo – kao posrednik između AI kamere i motora koji pokreću robota, https://hr.vidi-x.org/hardware/

 

DFRobot HuskyLens – AI kamera za prepoznavanje objekata ili praćenje linije ispred robota, uz nju će doći i držač koji možete montirati na robota te kabel za povezivanje s VIDI X mikroračunalom, https://www.dfrobot.com/product-1922.html

 

4 x AA baterije od 1.5 V te 3 punjive od 1.2 V – za napajanje VIDI X mikroračunala mogu se koristiti punjive baterije dok za napajanje robota treba imati punih 6 V, https://soldered.com/hr/proizvod/industrijska-baterija-aa/

 

2 x 4,7 kOhm otpornik – za stabilnu I 2C komunikaciju koristili smo 4,7 kOhm otpornike, https://www.chipoteka.hr/set-ugljen-slojnih-otpornika-480-komada-niz-e3-9150099162

 

2 x Dual H Bridge L298n – za pogon motora robota,
https://www.aliexpress.com/wholesale?SearchText= L298n&opensearch=true

 

Mini breadboard – iako smo mi iskoristili štampanu pločicu za povezivanje komponenata, u nedostatku štampane pločice možete koristiti breadboard za spajanje komponenata spojnim žicama, https://soldered.com/hr/proizvod/mini-eksperimentalna-plocica/

 

Nešto muških headera – kako bi ih zalemili na Dual H Bridge,
https://soldered.com/hr/proizvod/muski-header-40×2/

 

Nešto spojnih žica, https://soldered.com/hr/proizvod/set-kablica-musko-zenski-40-komada/, https://soldered.com/hr/proizvod/set-kablica-zensko-zenski-40-komada/

 

Lem – najčešće uz lemilicu dolazi malo lema, no ako ga nemate,

Tinol (lem) Sn60Pb40 1.0mm 50g

 

Lemilica – praktičnost je vrlo bitna,

USB lemilica

 

DFRobot HuskyLens AI kamera

HuskyLens AI kamera malen je i cjenovno pristupačan modul kamere dizajniran za spajanje na razne mikrokontrolere, tj. projekte, od robota pa sve do raznih smart home uređaja. Idealna je za korisnike koji žele napraviti projekt vezan uz umjetnu inteligenciju ili dodati vizualne funkcionalnosti svojim postojećim projektima.

Glavna funkcija HuskyLens AI kamere je da omogućuje korisniku prepoznavanje objekata, ljudi, raznog znakovlja te drugih elemenata okoline. Kamera koristi različite algoritme za obradu slika i klasifikaciju objekata, čime omogućuje robotima i ostalim povezanim mikrokontrolerima donositi odluke. Konkretno može prepoznati lica, pratiti zadani objekt, prepoznati razne objekte u vidnom polju, pratiti liniju, prepoznati boju i prepoznati oznake poput QR koda.

S VIDI X mikroračunalom može komunicirati putem I2S ili UART sabirnice. Ima IPS zaslon od 2,0 inča koji možete koristiti za podešavanje parametara. Ova AI kamera prilično je jednostavna za korištenje. Pritiskom na funkcijsku tipku možete odabrati korištenje moda koji želite koristiti. Zatim pritisnite gumb za učenje i HuskyLens počinje učiti nove stvari, poput novih lica kada je u modu za prepoznavanje lica ili objekata u nekom drugom modu. Nakon toga HuskyLens ih je u stanju prepoznati. Dugim pritiskom na gumb za učenje HuskyLens može kontinuirano učiti nove stvari, poput prepoznavanja tog objekta iz različitih kutova i na različitim udaljenostima. Što više uči, to je točnija.

HuskyLens ima “push button” tipku, navigacijsku tipku s mogućnošću odabira lijevo – desno i klika, utor za SD karticu, ekran, kameru, dvije Flash LEDice i jednu RGB LED

 

DFRobot HuskyLens
Procesor: Kendryte K210
Senzor slike: OV2640 (kamera 2,0 megapiksela)
Napon napajanja: od 3,3V do 5,0V
Trenutna potrošnja (TYP): 320mA@3,3V , 230mA@5,0V (način prepoznavanja lica; 80% svjetline pozadinskog osvjetljenja; svjetlo za ispunu isključeno)
Sučelje za povezivanje: UART, I2C
Zaslon: 2,0-inčni IPS ekran rezolucije 320×240
Ugrađeni algoritmi: prepoznavanje lica, praćenje objekata, prepoznavanje objekata, praćenje linija, prepoznavanje boja, prepoznavanje oznaka
Ostalo: slot za MicroSD kartice, 1x RGB LED, 2x Flash LED
Dimenzije: 52 mm x 44,5 mm / 2,05 in x 1,75 in
Link: https://www.dfrobot.com/product-1922.html
Cijena: 54,90 USD

 

Spoj AI kamere i robota gusjeničara (odnosno bilo kojeg vozila) predstavlja odličnu platformu za upoznavanje s područjem umjetne inteligencije koje se svakim danom razvija i otkriva sve više novih mogućnosti

 

Programiranje HuskyLens AI kamera

Od mnogih modova kamere, poput prepoznavanja lica, objekata i dr., u ovoj radionici pozabavit ćemo se modom praćenja linije.

Proučite primjere koda priložene uz HuskyLens biblioteku.

HuskyLens AI kameru programirat ćemo uz pomoć biblioteke za Arduino IDE koju možete preuzeti s GitHub linka https://github.com/HuskyLens/HUSKYLENSArduino/tree/master/HUSKYLENS. Odnosno u ovom slučaju tvrtka DFRobot to naziva „HUSKYLENS Arduino API“, gdje je API skraćenica od Application Programming Interface.
Preporuča se korištenje Arduino IDE v1.8.x razvojne okoline. Ukoliko nemate instaliranu Arduino IDE razvojnu okolinu, upute za instalaciju pronađite na Linku https://hr.vidi-x.org/radionice/vidi-project-x-91-arduino-ide/.

VIDI Project X #91: Arduino IDE – Windows instalacija

Na istom linku saznajte kako instalirati biblioteke kako biste taj postupak primijenili za spomenutu HuskyLens AI biblioteku.

Naravno, osim softvera trebat ćete i neki hardver za spajanje na HuskyLens AI kameru. Mi smo koristili Vellemanov KSR11 kit robot za sve terene koji smo i ranije koristili za projekt njegova upravljanja laserskim senzorom udaljenosti s kojim se možete upoznati na linku https://hr.vidi-x.org/radionice/vidi-project-x-65laserski-senzor-udaljenosti-u-ulozi-pametnog-robota/.

VIDI Project X #65:Laserski senzor udaljenosti u ulozi pametnog robota

HuskyLens AI kameru možete programski kontrolirati putem mikrokontrolera na koji je povezana I2C ili UART komunikacijskom sabirnicom. I to na način da u Arduino IDE razvojnom sučelju, u ovom slučaju VIDI X mikroračunalo, isprogramirate da, recimo, kod pritiska tipke pokrenete naredbu koja će odrediti što želite da HuskyLens AI kamera učini.

Pa tako može spremiti fotografiju, ali i screenshot ekrana na SD karticu naredbama:

huskylens.saveScreenshotToSDCard();
huskylens.savePictureToSDCard();

 

Prije uzimanja screenshota, ako vam je potrebno, na ekran možete ispisati željenu poruku ili neki podatak naredbom:

huskylens.customText(“TEST_TEXT_1”, 120, 120); //Add first custom text at (120,120)

 

SD kartica će poslužiti i za spremanje naučenih objekata, a kasnije možete učitati tu spremljenu konfiguraciju. Isto tako možete mijenjati modove rada kamere i iz algoritma prepoznavanja lica se prebaciti na algoritam praćenja linija:
Primjeri koda za prebacivanje algoritma u kojem kamera radi su:

huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
huskylens.writeAlgorithm(ALGORITHM_OBJECT_TRACKING);
huskylens.writeAlgorithm(ALGORITHM_OBJECT_RECOGNITION);
huskylens.writeAlgorithm(ALGORITHM_LINE_TRACKING);
huskylens.writeAlgorithm(ALGORITHM_COLOR_RECOGNITION);
huskylens.writeAlgorithm(ALGORITHM_TAG_RECOGNITION);

 

Vellemanov KSR11 kit robot za sve terene koji smo koristili za projekt upravljanja robota uz pomoć laserskog senzora udaljenosti, sada smo iskoristili za spajanje AI kamere.

 

Priprema HuskyLens AI kamere

Ako ste pogledali radionicu u kojoj smo spajali laserski senzor udaljenosti s Vellemanovim KSR11 kit robotom za sve terene, možete primijetiti kako smo jednostavno laserski senzor zamijenili s HuskyLens AI kamera senzorom.

Kamera ima mikro USB za povezivanje s PC računalom te će biti poželjno nadograditi Firmware kamere s najnovijom verzijom prema uputama sa stranice https://wiki.dfrobot.com/HUSKYLENS_V1.0_SKU_SEN0305_SEN0336#target_5

U tim uputama naići ćete na različite verzije firmwarea, pa biste trebali obratiti pažnju na glavnu razliku između firmwarea. To su oni sa modelima za prepoznavanje objekata i onaj bez modela za prepoznavanje objekata. Za svaki postoji normalan firmware i onaj sa klasifikacijom objekata.

Firmware s bazom modela zauzima više RAM-a, pa kada ga koristite možda nećete moći koristiti druge modove, kao što je prepoznavanje objekata ili lica, jer je RAM već popunjen. Stoga trebate odabrati onaj firmware koji vam više odgovara.

Isprobali smo Line Follower i Object Tracking. Object Tracking nije nam radio sasvim pouzdano s firmwareom koji sadrži modele objekata, dok je Line Follower mod radio kako je i bilo očekivano.

Koristili smo HUSKYLENSWithModelV0.5.1aNorm.kfpkg firmware. No primijetite kako je ovo tek verzija v0.5.1a, pa do verzije v1.0 treba proći još neko vrijeme. Oni nestrpljivi imaju dostupne novije firmware alpha verzije.

Kako trenutno napreduju s još novijim verzijama, provjerite na linku https://github.com/HuskyLens/HUSKYLENSUploader.

 

Pri prvom pokretanju kameru treba „naučiti“ koju liniju želimo pratiti.

Kada je kamera spojena na PC putem USB kabla, putem serijskog monitora (Arduino IDE-a ili nekog drugog serijskog monitora) možete pogledati kako izgleda izlazni podatak kamere.

Trebali biste dobiti nešto poput:

Block:xCenter=154,yCenter=221,width=33,height=33,ID=1
Arrow:xOrigin=280,yOrigin=66,xTarget=280,yTarget=32,ID=1
Arrow:xOrigin=200,yOrigin=238,xTarget=192,yTarget=0,ID=1

 

Uvjerite se samo da je HuskyLens kamera postavljena na serijsku komunikaciju i da se podudara frekvencija brzine serijskog porta kamere i računala.

 

Vožnja robota po tepihu s uzorkom crnih i bijelih šara, kao na slici, nije poželjna jer kamera traži najveću razliku u kontrastu boja pa će, kada naiđe na veći kontrast, postavljenu liniju ignorirati.

 

Shema spajanja HuskyLens AI kamere

Kako bi kamera pravilno komunicirala s VIDI X-om u ovom projektu, potrebno je putem menua kamere postaviti komunikaciju na I2C protokol umjesto defaultne UART komunikacije.

Zatim možete sve spojiti prema priloženoj shemi spajanja.

Ako vam se nakon spajanja prema ovoj shemi događa da kamera gubi komunikaciju sa VIDI X mikroračunalom najvjerojatnije je problem u spojevima žica. Može doći do labavih spojeva zbog raširenih šarki breadboard pločice, pogotovo ako ste koristili jeftiniji breadboard. Rješenje se krije u pronalaženju boljih breadboard pločica, no možda je jednostavnije zalemiti sve spojeve. Mi smo većinu zalemili na štampanu pločicu koja nije bila namijenjena ovoj specifičnoj namjeni, no poslužila nam je za postizanje boljih spojeva.

 

Liniju za praćenje napravili smo od crvene izolir trake.

 

Programski Kod

Kada smo u modu za praćenje linije putem UART ili I2C komunikacije dobivamo poruku o koordinatama početne i krajnje točke vektora koji nam pokazuje smjer linije, kao i naziv i ID broj detektiranog objekta.

Poruka koju nam kamera šalje u Line Follower modu izgleda ovako:

Arrow:xOrigin=312,yOrigin=158,xTarget=160,yTarget=4,ID=1
Arrow:xOrigin=112,yOrigin=238,xTarget=120,yTarget=0,ID=1
Arrow:xOrigin=304,yOrigin=182,xTarget=128,yTarget=0,ID=1

 

Koordinate se kreću unutar vrijednosti rezolucije ekrana HuskyLens AI kamere. Važno je znati da je gornji lijevi kut koordinate 0, 0 i da vrijednost X ide od 0 do 320, a vrijednost Y od 0 do 280. Kako biste iskoristili te podatke, potrebno je napisati algoritam koji će izvoditi potrebnu programsku radnju prema zadanom zadatku.

Od podataka početne i završne koordinate strelice možemo izračunati duljinu te strelice i njezin kut. Ustvari imamo podatke pravokutnog trokuta smještenog u prvi kvadrant koordinatnog sustava.

Duljine stranica, tj. duljine kateta, dobit ćemo vrlo jednostavno običnim oduzimanjem.

xComponent = xTarget - xOrigin
yComponent = yTarget - yOrigin

 

Duljinu hipotenuze sada možemo izračunati prema Pitagorinom poučku c2=a2+b2. Odnosno, da bismo programski dobili duljinu hipotenuze, koristit ćemo funkciju sqrt() za vađenje drugog korijena, a s obzirom na to da Arduino IDE nema funkciju za kvadriranje, koristit ćemo množenje poput (a*a).

length = sqrt((xComponent * xComponent) + (yComponent * yComponent));

 

Dobivena duljina hipotenuze zapravo je duljina našeg vektora smjera i možemo ju smatrati brzinom kojom se robot mora kretati da bi prešao određeni put. No ta brzina zapravo ovisi o mnogo faktora, pa treba misliti na ostale radnje koje će robot morati odraditi pri kalkuliranju brzine.

S obzirom na to da imamo dva motora, jednog za lijevu, jednog za desnu gusjenicu, uz poznati kut našeg vektora i izračunatu brzinu možemo odrediti brzinu pojedinog kotača koja je potrebna da bi se napravio zaokret robota.
Kut u radijanima dobit ćemo korištenjem funkcije atan(). U matematici bi to izgledalo ovako:

tan(angle) = yComponent / xComponent

 

dok u programiranju koristimo oblik s korištenjem inverznog tangensa:

angle = atan(yComponent / xComponent);

 

Kada pratimo crvenu liniju na bijeloj podlozi, a slučajno se u kadru kamere pojavi crna linija, kao što se na ovoj slici pojavio okvir naočala, kamera će za pravac kretanja slijediti crnu liniju.

 

Iz poznatog kuta računamo radijus okretanja koji ovisi o razmaku između gusjenica.

r = ( d / 2.00 ) * tan(angle);

 

Za određivanje omjera snage među motorima koristit ćemo ove formule:

left = speed * (1 - d / (2 * r));
right = speed * (1 + d / (2 * r));

 

Kako bi robot imao glatke pokrete zadat ćemo mu nekoliko uvjeta iz kojih ćemo odlučiti kako da se robot ponaša.

Formulom:

Direction = result.xOrigin - result.xTarget;

odredit ćemo smjer kretanja robota u lijevu ili u desnu stranu. Taj smjer zapravo odgovara vrijednosti jedne od stranica (xComponent) našeg pravokutnog trokuta paralelne s osi x. Zatim postavljamo uvjete.

Prvo ćemo gledati dolazi li naš vektor do dna naše kamere, pa ako dolazi krećemo se prema naprijed.

if (result.yOrigin < 238) { Forward(); }

Zatim nastavljamo kretanje prema naprijed pa, ako je vektor jako kratak, što može značiti da je naš pravac kretanja u daljini, također idemo prema naprijed.

else if (length < 100) { Forward(); }

Ako je vektor potpuno usmjeren prema naprijed također idemo prema naprijed.

else if ( ((Direction == 0)) ) { Forward(); }

Nadalje, ako je stranica našeg pravokutnog trokuta, koja je paralelna s osi x, duljine između 0 i 150, određujemo da skreće prema lijevo za neki iznos.
Taj iznos ćemo izračunati razlikom snage lijevog i desnog motora. Uz to, za kasnije će nam trebati jedna pomoćna varijabla u kojoj ćemo „pamtiti“ posljednji smjer skretanja, pa pri skretanju ulijevo varijablu Last_Direction postavljamo na vrijednost 1.

else if ( (Direction > 0) && (Direction < 150) ) {
  Forward_Left( int(right - left) );
  Last_Direction = 1;
}

 

Sada, ako imamo negativnu duljinu stranice, skrećemo u suprotnu stranu. Iako duljine ne mogu biti negativne, taj negativan predznak govori nam da se moramo kretati u drugu stranu.

else if ( (Direction < 0) && (Direction > -150) ) {
  Forward_Right( int(left - right) );
  Last_Direction = 2;
}

 

Ukoliko je spomenuta stranica dulja ili jednaka 150, a ovisno o predznaku, skreni oštro lijevo ili desno. Jedina razlika kod oštrog skretanja je, ukoliko smo izgubili strelicu iz vida ekrana, varijablu koja pamti smjer kretanja postavit ćemo u obrnute vrijednosti od prijašnjih. To činimo radi pretpostavke da se, ukoliko smo iz vidnog polja kamere izgubili liniju koju pratimo, moramo malo vratiti u drugi smjer kako bismo ponovno dobili strelicu u vidno polje.

else if ( Direction <= -150 ) {
  Turn_Right();
  Last_Direction = 1;
}
else if ( Direction >= 150 ) {
  Turn_Left();
  Last_Direction = 2;
}

 

Kada HuskyLens kamera nema detektiranu strelicu, pomoću varijable Last_Direction prisjetit ćemo se u koju stranu smo se kretali posljednji put, pa u odnosu na to stanje pokušati potražiti strelicu naglim skretanjem, što izvode ove linije koda:

if ( Last_Direction == 2 ) { Turn_Right(); }
else if ( Last_Direction == 1 ) { Turn_Left(); }
else { Stop(); }

 

Kamera ima LED rasvjetu koja će dobro doći u tamnijim uvjetima, ali i RBG ledicu.

 

Zadnji ELSE uvjet kaže, ako smjer kretanja nije bio niti 1 niti 2, stani, no ovo se događa samo na početku izvršavanja programa kada smjer još nije dodijeljen.

Stop funkcija postavlja sve pinove zadužene za kontrolu motora na vrijednosti High (1) ili Low (0). Ovisno o vašim željama, ostavili smo oba primjera, s time da je jedan unutar komentara.

Koristite li High vrijednosti, struja će prolaziti kroz H Bridge drivera motora koji će upaliti mehanizam zaštite od kratkog spoja. Iz tog razloga bolje je koristiti Low vrijednosti tako da struja uopće ne prolazi driverom motora.
No, kada smo koristili Low na svim pinovima, dva pina (GPIO12 i GPIO13) ostala su na High vrijednostima, ignorirajući programske naredbe koje ih postavljaju u Low stanje.

Pretpostavili smo da se to događa zbog Pull Up otpornika koji ti pinovi interno mogu koristiti. No Pull Up se koristi kada pinove koristimo kao ulazne pinove, a ne kao izlazne. Problem je riješilo deklariranje moda rada pina prvo kao ulaznog, uz korištenje Pull Up otpornika, pa zatim kao izlaznog, i to na ovaj način:

void Motor_Init() {
  pinMode(IN2, INPUT_PULLUP);
  pinMode(IN4, INPUT_PULLUP);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(IN5, OUTPUT);
  pinMode(IN6, OUTPUT);
}

 

Kretanje robota naprijed i nazad, kao i oštro lijevo te oštro desno, nije teško razumjeti pogledate li programski kod, no može doći do konfuzije pogledate li funkcije Forward_Left ili Forward_Right.

void Forward_Right(int m_speed) {
  digitalWrite(IN1, LOW);
  analogWrite(IN2, 255);
  digitalWrite(IN3, LOW);
  analogWrite(IN4, 255 - m_speed);
}

 

Kod spomenute funkcije koristili smo analogWrite koju VIDI X ne podržava nativno za razliku od nekog Arduino mikrokontrolera koji posjeduje analogne pinove, a koji se mogu koristiti na ovaj način.
Dakle, analogWrite funkcija je simulirana funkcija koja zapravo radi PWM (Power With Modulation) operaciju gdje je

analogWrite(IN2, 255); ista kao i digitalWrite(IN2, 1);

 

No, kako bismo jednu gusjenicu pokretali nešto sporije od druge, iskoristili smo programski redak

analogWrite(IN4, 255 - m_speed);

 

koji će smanjiti snagu primjenom PWM opcije na pin koji želimo.

Pri tome je potrebno paziti na efikasnost samoga motora koji pokrećemo jer na ovaj način nećemo moći motor pokretati na pola snage korištenjem iznosa od 128 za m_speed varijablu.

Većina motora će za vrlo sporo kretanje koristiti 70% snage. Koristite li manje od toga, robot se uopće neće moći pokrenuti. Većinom će ta minimalna granica snage koja je potrebna da bi se robot pokrenuo ovisiti o težini robota, dostupnoj energiji prema motorima, efikasnosti H Bridge drivera motora, ali i o tipu korištenog motora. Nadalje, može ovisiti i o terenu koji savladavate, gdje su bitni i nagib i prianjanje robota na podlogu.

Gusjeničaru treba više snage za skretanje na tepihu nego za skretanje na glatkom parketu, dok vožnja naprijed-nazad nije toliko zahtjevna.

Programski kod ima funkciju Backwards za vožnju unatrag, no ona nije implementirana u glavni dio koda kako bi se ponekad izvršila.

S obzirom na to da se radi o I2C sabirnici za komunikaciju s kamerom, na iste žice moguće je dodati još poneki senzor. Tako biste mogli spojiti i laserski senzor udaljenosti koji bi mogao služiti za još poneku komponentu algoritma te bi tada, ako se nađemo uz rub zida ili čak provalije, kretanje unazad bilo od koristi.

Još bolje rješenje bilo bi kada bi se kamera (kao i senzor udaljenosti) nalazili na pokretnom stativu. Taj stativ bi sa dva servo motora tada mogao usmjeravati senzore u željenom smjeru te na taj način dobiti preciznije informacije o smjeru u kojem se mora kretati kako bi uspješno dovršio planirani zadatak.

 

Za sada ova kamera ne može percipirati dubinu, tj. udaljenost od objekta, iako bi neki pametni algoritam i to mogao izračunati, pa je logično pokušati dodati senzor udaljenosti na robota.

 

Kompletan programski kod ove radionice pronađite na linku:
https://github.com/VIDI-X/VidiX-AI-Machine-Vision-Sensor-Robot