reŠevanje rubikove kocke s strojnim vidom in … · tvoriti kocko, ki ima vse ploskve enake barve....
TRANSCRIPT
Rok Rabuza
REŠEVANJE RUBIKOVE KOCKE S STROJNIM VIDOM IN ROBOTSKIM PRIJEMALOM
Diplomsko delo
Maribor, september 2013
REŠEVANJE RUBIKOVE KOCKE S STROJNIM VIDOM IN
ROBOTSKIM PRIJEMALOM
Diplomsko delo
Študent: Rok Rabuza
Študijski program: univerzitetni študijski program
Elektrotehnika
Smer: Avtomatika in robotika
Mentor: izr. prof. Dušan Gleich, univ. dipl. inž. el.
Lektorica: Irena Hohkraut
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
ii
ZAHVALA
Zahvaljujem se svojemu mentorju, izr.
prof. Dušanu Gleichu, za podporo in
vodenje pri izdelavi diplomskega dela.
Zahvala staršema, ki sta mi študij
omogočila in me vsa leta podpirala.
Posebna zahvala punci Mateji, ki mi je
stala ob strani, ko sem jo najbolj
potreboval.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
iii
REŠEVANJE RUBIKOVE KOCKE S STROJNIM VIDOM IN
ROBOTSKIM PRIJEMALOM
Ključne besede: Rubikova kocka, strojni vid, virtualna kocka, Fridricheva metoda,
robotsko prijemalo
UDK: 681.5:007.52(043.2)
Povzetek:
V delu je opisana izdelava in delovanje programa za izračun rešitve Rubikove kocke
dimenzije 3x3x3. Opisana je Fridricheva metoda za reševanje Rubikove kocke, ki je
uporabljena kot osnova za delovanje programa. Reševanje Rubikove kocke je prikazano z
grafičnim vmesnikom. V diplomskem delu sem izdelal štiri dvoosna robotska prijemala, jih
povezal z mikrokrmilnikom Arduino UNO, s spletno kamero ter programskim paketom
Matlab. Opisani sta zgradba in delovanje robota, ki rešitev, pridobljeno s programom v
Matlabu, izvede na kocki. Robot Rubikovo kocko s predlagano metodo reši v manj kot
treh minutah.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
iv
RUBIK'S CUBE SOLVER USING COMPUTER VISION AND
ROBOTIC WRIST
Key words: Rubik's cube, computer vision, virtual cube, Fridrich method, robotic arm
UDK: 681.5:007.52(043.2)
Abstract:
This work describes development of a Rubik's cube solver using Rubik's cube with
dimensions 3x3x3. It presents the description of the Fridrich method, which is used as the
base.The program is designed using Matlab enviroment. A proposed Rubik's Cube solver
is implemented. It presents the description and working of a robot, which handles the cube
and solves it using the solution calculated by a program, which is connected with a
microcontroler Arduino UNO.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
v
KAZALO
1 UVOD ........................................................................................................... 1
2 PREDSTAVITEV PROBLEMA RUBIKOVE KOCKE ................................... 2
3 STROJNI VID ............................................................................................... 4
3.1 Prepoznava barv ................................................................................................................... 4
3.2 Virtualna kocka ..................................................................................................................... 6
4 INTUITIVNA METODA ZA REŠEVANJE RUBIKOVE KOCKE ................. 11
4.1 Algoritmi .............................................................................................................................. 12
4.2 Reševanje prve plasti ......................................................................................................... 13
4.3 Reševanje druge plasti ...................................................................................................... 17
5 FRIDRICHEVA METODA ZA REŠEVANJE RUBIKOVE KOCKE ............ 20
6 ROBOTSKO PRIJEMALO ......................................................................... 27
6.1 Robotsko prijemalo ............................................................................................................ 27
6.2 Mikrokrmilnik ...................................................................................................................... 30
7 SKLEP ....................................................................................................... 32
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
vi
KAZALO SLIK
SLIKA 2.1: RUBIKOVA KOCKA ................................................................................................................. 2
SLIKA 3.1: PREPOZNAVA BARV .............................................................................................................. 5
SLIKA 3.2: MATRIKA PLOSKVE................................................................................................................ 6
SLIKA 3.3: MREŽA KOCKE ...................................................................................................................... 7
SLIKA 3.4: MATRIKA VIRTUALNE KOCKE .................................................................................................. 7
SLIKA 3.5: MREŽA VIRTUALNE KOCKE ................................................................................................... 10
SLIKA 4.1: POTEK FRIDRICHEVE METODE [8] ........................................................................................ 11
SLIKA 4.2: OZNAKE STRANIC KOCKE [8]................................................................................................ 12
SLIKA 4.3: PRIMERI PREMIKOV KOCKE [8] ............................................................................................. 13
SLIKA 4.4: "KRIŽ" NA PRVI PLOSKVI [8] ................................................................................................. 14
SLIKA 4.5: REŠEN "KRIŽ" NA SPODNJI PLOSKVI ..................................................................................... 15
SLIKA 4.6: VOGALI PRVE PLASTI [8] ...................................................................................................... 16
SLIKA 4.7: REŠENA PRVA PLAST .......................................................................................................... 17
SLIKA 4.8: DRUGA PLAST [8]................................................................................................................ 18
SLIKA 4.9: REŠENA DRUGA PLAST ........................................................................................................ 19
SLIKA 5.1: ZADNJA PLAST - PRVI KORAK [8] .......................................................................................... 20
SLIKA 5.2: REŠEN PRVI KORAK ZADNJE PLASTI ..................................................................................... 21
SLIKA 5.3: ZADNJA PLAST - DRUGI KORAK [8] ........................................................................................ 22
SLIKA 5.4: REŠEN DRUGI KORAK ZADNJE PLASTI ................................................................................... 23
SLIKA 5.5: ZADNJA PLAST - TRETJI KORAK [8] ....................................................................................... 23
SLIKA 5.6: REŠEN TRETJI KORAK ZADNJE PLASTI .................................................................................. 24
SLIKA 5.7: ZADNJA PLAST - ČETRTI KORAK [8] ....................................................................................... 25
SLIKA 5.8: REŠEN ČETRTI KORAK ZADNJE PLASTI – REŠENA KOCKA ....................................................... 25
SLIKA 5.9: PRIMER REŠITVENEGA ALGORITMA KOCKE ........................................................................... 26
SLIKA 6.1: SHEMA ROBOTSKEGA PRIJEMALA ......................................................................................... 27
SLIKA 6.2: ROBOTSKO PRIJEMALO ....................................................................................................... 28
SLIKA 6.3: ROBOT............................................................................................................................... 30
SLIKA 6.4: MIKROKRMILNIK ARDUINO UNO [9] ..................................................................................... 31
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
vii
KRATICE
RGB - red green blue: format slike
OLL - orient last layer: orientacija zadnje plasti
PLL - permute last layer: permutacija zadnje plasti
USB - universal serial bus: univerzalno serijsko vodilo
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
1
1 UVOD
Rubikova kocka je svetovno znana miselna igrača in je namenjena širši populaciji, vendar
kljub njeni prepoznavnosti znanje reševanja ni tako zelo razširjeno.
Fridricheva metoda [1] je ena najpopularnejših metod za reševanje Rubikove kocke.
Metoda temelji na algoritmih z določenim zaporedjem premikov, ki nas privedejo do
rešitve. Obstaja še mnogo drugih metod za reševanje Rubikove kocke (na primer:
začetniška metoda, Ortega metoda, Watermanova metoda [2]). Intuitivna metoda je del
Fridricheve metode, je začetni del reševanja kocke, pri katerem reševalec uporablja svoje
znanje in izkušnje pri iskanju rešitve.
Sam sem že kot otrok postal navdušenec nad Rubikovo kocko, z leti se je to navdušenje
še poglobilo, z njim pa tudi moje znanje o sami kocki in njenem reševanju. V času študija
sem pridobil idejo in znanje za izvedbo programa za reševanje Rubikove kocke ter robota,
ki bi to rešitev implementiral na realni kocki. Cilj predlaganega diplomskega dela je izdelati
robota, ki samostojno reši Rubikovo kocko v povprečju manj kot treh minutah.
Projekt je sestavljen tako, da predstavi Rubikovo kocko na način, zanimiv tistim, ki jo zelo
dobro poznajo, kakor tudi ostalim, ki mogoče zanjo še niso slišali. Prav tako je
predstavljena tudi ena izmed metod reševanja kocke z namenom pokazati, da proces
reševanja le ni tako težak in nerazumljiv, kot se morda zdi na prvi pogled.
Diplomsko delo je sestavljeno iz sedem poglavij. V drugem poglavju se spoznamo s
kocko, z njenimi lastnostmi ter z eno od najpopularnejših metod reševanja kocke.
Predstavljen je tudi trenutno najhitrejši robot za sestavljanje rubikove kocke, ki je služil kot
inspiracija temu projektu. V naslednjem poglavju se spoznamo s strojnim vidom ter
načinom, kako Rubikovo kocko iz realnega sveta prenesemo v virtualni, računalniški svet.
V četrtem poglavju je predstavljena intuitivna metoda za reševanje kocke ter način, kako
program to intuitivno metodo uporablja za iskanje rešitve. V naslednjem poglavju se
reševanje kocke nadaljuje s Fridrichevo metodo ter njeno implementacijo v računalniškem
programu. V šestem poglavju je predstavljen robot, ki rešitev kocke, pridobljene s
programom, izvede na realni kocki. V sklepu ocenimo delovanje robota, učinkovitost
programa ter navedemo možnosti za izboljšavo.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
2
2 PREDSTAVITEV PROBLEMA RUBIKOVE KOCKE
Slika 2.1 prikazuje Rubikovo kocko z dimenzijami 3x3x3, ki jo sestavlja 26 manjših kock:
šest središč, osem kotov in dvanajst robnih kock, kot je prikazano na sliki 2.1. Le-te tvorijo
šest različno obarvanih ploskev (običajno so to bela, rumena, modra, zelena, rdeča in
oranžna), ki jih lahko poljubno vrtimo in tako pride do menjav posameznih kock, pri čemer
obstaja 43 252 003 274 489 856 000 različnih kombinacij [2]. Namen reševanja je znova
tvoriti kocko, ki ima vse ploskve enake barve. Rubikovo kocko je izumil Erno Rubik,
madžarski izumitelj, kipar in profesor arhitekture, leta 1974. Med leti 1978 in 1981 so
prodali več kot deset milijonov kock in še danes velja za eno najboljših miselnih igrač [2].
Slika 2.1: Rubikova kocka
S pojavom kocke so se pojavile tudi najrazličnejše metode reševanja Rubikove kocke,
med drugim tudi Fridricheva metoda [1], ki je dobila ime po Jessici Fridrich z objavo
metode na internetu. Fridrich metoda temelji na reševanju kocke po plasteh; najprej na
prvi plasti naredimo "križ", nato preostanek prve plasti in drugo plast rešimo skupaj, tretjo
plast pa rešimo v dveh delih - najprej orientiramo vse kocke, nato pa izvedemo
permutacijo, ki nam kocke postavi na svoje mesto. Začetni križ se reši intuitivno, prav tako
tudi drugi dve plasti ("F2L" - first two layers), vendar obstaja mnogo algoritmov za pomoč
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
3
pri razumevanju reševanja le-teh. Orientacija zadnje plasti ("OLL" - orient last layer) ter
permutacija zadnje plasti ("PLL" - permute last layer) pa sta izvedeni izključno z algoritmi,
saj je to najhitrejša pot do rešitve, ko že imamo sestavljeni prvi dve plasti [1].
Z razvojem računalniške tehnologije se je pojavilo čedalje več programov, ki so znali
izračunati rešitev Rubikove kocke z najmanjšim številom potrebnih premikov. Izdelajo se
tudi roboti, ki so sposobni samostojno poiskati rešitev poljubno premešane kocke in jo tudi
implementirati na realni kocki. Najhitrejši robot Cubestormer 2 [4] je 11. 11. 2011 postavil
Guinnessov rekord za najhitrejšo sestavljeno kocko vseh časov z osupljivim rezultatom
5,270 sekund ter s tem postal prvi robot, ki je pri sestavljanju prehitel človeka [5]. Takratni
rekord, ki ga je postavil avstralec Feliks Zemdegs, je znašal 5,66 sekund. Omeniti je
potrebno, da je pri postavljanju rekordov pri ljudeh pred začetkom časovnega merjenja
dovoljen pogled kocke, ki traja približno 12 sekund, pri robotu pa je v času reševanja že
vštet čas, potreben za poslikanje kocke ter izračun rešitve, ne pa sama izvedba rešitve
[4],[5].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
4
3 STROJNI VID
3.1 Prepoznava barv
Za reševanje Rubikove kocke v računalniškem okolju je potrebno računalniku podati
informacijo o stanju premešanosti kocke. Najlažji način, mišljeno za bodočega uporabnika
programa, je slikanje kocke s pomočjo spletne kamere. Matlab [6] ponuja preprosto
rešitev z zajemanjem videa s spletnih kamer v orodju za zajem slike (Image aquisition
toolbox). Slike zajamemo s programskim prožilcem, ki naredi eno samo sliko in jo shrani v
Matlab delovno območje v želenem formatu. Za nas se je kot najustreznejši format izkazal
RGB (Red-Green-Blue) format, ki vsaki slikovni točki slike pripiše vrednosti rdeče, zelene
in modre barve. Barve posamezne ravnine so shranjene v osmih bitih, torej zasedajo
vrednosti od 0 do 255. Slika je tako shranjena kot spremenljivka, ki ima tri ravnine, vsaka
od njih pa je v velikosti ločljivosti slike. S tem je razvidna barva vsake slikovne točke kot
kombinacija vrednosti vseh treh barv, vsaka kombinacija vrednosti pa nam ponazarja
drugo barvo. S tem smo dobili možnost, da za vsako slikovno točko slike izvemo, katere
barve je, oziroma jo lahko primerjamo z želenimi vrednosti ter ugotavljamo, ali so v
območju, ki ga želimo. Če takšno primerjavo izvedemo za vsako točko slike, kot rezultat
dobimo črno-belo sliko, v kateri bela barva predstavlja ujemanje barve s primerjalnim
območjem. Ta črno-bela slika je enake dimenzije kot slika, ki smo jo primerjali,
predstavimo pa jo lahko kot matriko, katere elementi so 1 za belo barvo ter 0 za črno
barvo. Matlab je odlično orodje za delo z matrikami, torej smo uspeli prenesti informacijo
iz realnega sveta v računalniško okolje [6],[7].
Rubikovo kocko sestavlja šest različno obarvanih ploskev, vsaka ploskev pa je
sestavljena iz devetih manjših kockic, razporejenih v tri vrstice in tri stolpce.
Prepoznavanje ene same barve očitno ni dovolj, da računalniku podamo zadostno
informacijo o kocki, je pa začetek, iz katerega lahko izhajamo. Pri slikanju kocke nas
okolica ne zanima, torej želimo, da kocka zajema celotno sliko. Ob tej predpostavki slika
sedaj predstavlja eno ploskev kocke. Vsaka izmed kockic na tej ploskvi je lahko katere
koli izmed šestih barv Rubikove kocke. Primerjava slike z eno trojico želenih vrednosti
oziroma z eno barvo nam pove, kje na tej ploskvi se omenjena barva nahaja. Sliko
primerjamo z vsako od šestih barv, za katere vemo, da se pojavijo na Rubikovi kocki, ter s
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
5
tem dobimo šest črno-belih slik oziroma matrik, ki jih lahko uporabljamo v Matlab-u.
Poimenujemo jih po barvi, s katero smo primerjali sliko, kot je prikazano na sliki 3.1.
Slika 3.1: Prepoznava barv
Teh šest črno-belih slik moramo obravnavati skupaj, kajti vsaka zase nam ne podaja
veliko informacij, le kot celota nam opišejo celotno ploskev kocke. Ker je potrebna
informacija o celotni kocki, moramo poslikati vseh šest ploskev kocke, za vsako dobimo
šest črno-belih slik, kar pomeni skupno 36 matrik, vsaka dimenzije ločljivosti slike. Pri
slikah visoke ločljivosti (npr. 1280x1024 pik) je to ogromno podatkov za obdelavo.
Ugotovimo, da lahko velikosti matrik hitro zmanjšamo, saj posameznih kockic ne
potrebujemo opisanih z nekaj sto enicami ampak z eno samo. Predpostavili smo, da
kocka zaseda celotno sliko, torej matrike razdelimo na devet enakih delov, kakor je
razdeljena tudi ploskev kocke. Dobimo torej matrike velikosti 3x3, katerih elemente
izračunamo tako, da izračunamo razmerje med enicami in ničlami v vsakem od 9 delov
velike matrike. Če prevladuje število enic, v novo matriko vpišemo 1, drugače 0. Da
posamezne matrike med seboj ločimo, jih množimo (skaliramo) s številom, ki pripada
barvi v imenu matrike, torej barvi, s katero je bila slika primerjana za izračun te matrike: 1
- bela, 2 - rumena, 3 - zelena, 4 - modra, 5 - oranžna, 6 - rdeča. Vse matrike skupaj nam
predstavljajo celotno ploskev, torej skalirane matrike seštejemo skupaj in dobimo eno
samo matriko, ki nam v celoti predstavlja ploskev kocke, kar prikazuje slika 3.2.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
6
Slika 3.2: Matrika ploskve
Pridobili smo najmanjšo možno obliko predstavitve ene ploskve kocke v računalniškem
okolju. Vseh šest ploskev lahko sedaj predstavimo z le šestimi matrikami dimenzije 3x3,
kar je precej manj informacij kot 36 matrik velikih dimenzij. Kljub vsemu pa to niso vse
potrebne informacije, ki jih potrebujemo za popolno predstavitev kocke. Manjkajo
medsebojne odvisnosti posameznih ploskev oziroma orientacija ploskev. Če pogledamo
kocko, kakor je prikazana na sliki, vidimo eno ploskev, ki ima štiri robove. Vsak od robov
je skupen s sosednjo ploskvijo. Ni dovolj , da vemo, katera ploskev leži "levo" od slikane,
potrebno je vedeti tudi, kako je orientirana oziroma na kateri strani "leve" ploskve leži
slikana ploskev. S pravilnim zaporedjem slikanja kocke je možno dobiti informacijo o
orientiranosti ploskev.
3.2 Virtualna kocka
Rubikova kocka je tridimenzionalni predmet, vendar jo je možno predstaviti v
dvodimenzionalni obliki kot raztegnjeno mrežo kocke, prikazane na sliki 3.3. S tem se
sicer izgubi nekaj skupnih robov ploskev, vendar navidezno še vedno obstajajo, saj pri
raztegu kocke v mrežo ne spreminjamo medsebojnih odvisnosti posameznih ploskev
oziroma njihove orientacije. Mreža kocke še vedno vsebuje manjše kockice, ki sestavljajo
posamezne ploskve.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
7
Slika 3.3: Mreža kocke
Število manjših kockic nam ponazarja velikost mreže, višina je devet kock, širina pa
dvanajst kock. Kot smo pri prepoznavanju barve eno ploskev predstavili z eno samo
matriko, lahko podobno storimo sedaj. Celotno mrežo matrike bomo predstavili z matriko
velikosti 9x12. Prostor, kjer nam mreža ne predstavlja ničesar, zapolnimo z ničlami,
preostale kockice pa ponazorimo na podoben način kot prej. Posamezne ploskve
zapišemo kot 3x3 matrike z elementi od 1 do 6, odvisno od barve pripadajočih kockic.
Matrike nato združimo v eno samo večjo matriko, praznino pa zapolnimo z ničlami.
Dobimo matriko virtualne kocke, prikazane na sliki 3.4, s katero lahko računamo v Matlab-
u.
Slika 3.4: Matrika virtualne kocke
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
8
Sedaj imamo način predstavitve celotne kocke v računalniškem okolju, vendar nam
manjka korak, kako iz šestih matrik posameznih ploskev priti v mrežo celotne kocke. Kot
prej omenjeno, je potrebna pravilna orientacija posameznih ploskev, da jih lahko zložimo
skupaj. Za vsako matriko ploskve moramo vedeti, katere so bile njene sosednje ploskve
pri slikanju. Da to zagotovo poznamo, si določimo, da bomo kocko slikali vedno v enakem
zaporedju ploskev.
Rubikova kocka je v notranjosti zgrajena iz tridimenzionalnega križa, na katerega so
pritrjene sredinske kockice posamezne ploskve. Zaradi te lastnosti vidimo, da so
sredinske kockice vedno v enaki medsebojni legi. Posamezne ploskve kocke lahko tako
poimenujemo kar po barvi sredinske kockice, kajti ta bo vedno na istem mestu ne glede
na to, kako kocko premešamo. Z malo preizkušanja hitro ugotovimo, da niti ni pomembno,
da vedno slikamo ploskve v enakem zaporedju, ampak je dovolj, da rotacije kocke
ostanejo enake. Torej lahko začnemo s katero koli ploskvijo, le da nadaljujemo s pravilnim
zasukom kocke. Kocka je tridimenzionalna, torej jo lahko vrtimo okoli treh osi X, Y in Z.
Osi kocke določimo z zgledom po Fridrichevi metodi, ki pravi, da osi definiramo tako, da
kocko pogledamo na tak način, da vidimo samo eno ploskev: Y os je navpična os,
usmerjena navzgor, X os je vodoravna os, usmerjena v desno, Z os pa je pravokotna na
obe osi ter usmerjena proti nam. Zasuke kocke torej definiramo kot "X", "Y", "Z" - zasuki
po oseh v pozitivni matematični smeri za 90°, "Xp", "Yp", "Zp" - zasuki po oseh v negativni
matematični smeri ter "X2", "Y2", "Z2" - zasuki v katero koli smer za 180°. Zaporedje
rotacij kocke lahko torej predstavimo z zaporedjem zasukov po oseh. Poudariti je
potrebno, da se osi ne premikajo skupaj s kocko, ampak so odvisne od našega pogleda
na kocko.
Potrebujemo torej zaporedje, s katerim bomo dobili informacijo o orientaciji ploskev. Z
malce preizkušanja ugotovimo, da je zaporedje YYYXX2 takšno zaporedje, s katerim
poslikamo vse ploskve kocke in tudi pridobimo potrebne informacije. Ploskve imamo sedaj
oštevilčene glede na zaporedje slikanja (prva, druga, itd.), potrebno pa je njihove
pripadajoče matrike pravilno orientirati. Cilj teh matrik ploskev je virtualna kocka, ki smo jo
v osnovi definirali tako, da je sprednja ploskev zelena, zgoraj rumena, spodaj bela, levo
rdeča, desno oranžna in zadaj modra. Zaporedje slikanja nam pove, katera ploskev je bila
slikana prej - tu je pomembno predvsem, katera barva je pred katero. Barvo ploskve
določimo iz barve sredinske kockice. Zaporedja slikanja kocke poimenujemo po zaporedju
slikanih barv (npr. rdeča, zelena, oranžna, modra, bela, rumena). Ugotovimo, da kakor
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
9
imamo podani prvi dve barvi v zaporedju, je preostanek zaporedja enolično določen, torej
skrajšamo imena zaporedji na samo prvi dve barvi. Sedaj smo dobili 30 zaporedji, ki so
vsa možna zaporedja slikanja kocke s temi zasuki kocke. Za posamezno zaporedje
preverimo, kako so orientirane posamezne ploskve, ko jih slikamo. Vsako matriko ploskve
potem orientiramo pravilno, da so njene sosednje ploskve enake, kakor so sosednje
ploskve pripadajoče enakobarvne ploskve virtualne kocke. Možne rotacije so rotacija v
pozitivni matematični smeri, v negativni matematični smeri ter rotacija za 180°. Te rotacije
ne spadajo med matematične operacije z matrikami. Matrike se v tem primeru
obravnavajo enako kot ploskve kocke, ki se vrtijo okoli sredinskega elementa. Pravilno
orientirane matrike ploskev nato zložimo skupaj v večjo matriko - matriko virtualne kocke,
ki je popolna predstavitev kocke v računalniškem okolju. Virtualna kocka je sedaj
generirana, vendar je sama po sebi neuporabna. Da lahko izkoristimo virtualno kocko, se
mora tudi obnašati kot prava kocka, torej jo moramo znati "premikati" kot pravo kocko.
Premiki kocke so po Fridrichevi metodi definirani kot premiki posameznih ploskev v smeri
urinega kazalca ali pa v nasprotni smeri ter premik za pol obrata, kot premik pa se šteje
tudi rotacija kocke okoli katere od njenih osi [8]. Za vsako ploskev imamo torej tri možnosti
premikanja, skupaj 18 možnih premikov ter 9 rotacij kocke okoli osi. Za vsakega od 27
premikov je potrebno zapisati transformacijo, ki virtualno kocko pred premikom preslika v
virtualno kocko, ustrezno kocki po premiku. Premike kocke bomo podrobneje obravnavali
pri Fridrichevi metodi. Virtualno kocko smo sedaj opremili še s transformacijami, ki
opisujejo premikanje realne kocke, torej imamo popolno predstavitev kocke v
računalniškem okolju (slika 3.5), s katero lahko upravljamo, potrebno je le še poiskati
rešitev.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
10
Slika 3.5: Mreža virtualne kocke
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
11
4 INTUITIVNA METODA ZA REŠEVANJE RUBIKOVE KOCKE
Fridricheva metoda je ena izmed mnogih metod reševanja Rubikove kocke. Metoda
temelji na sestavljanju kocke po plasteh. Kocko po višini razdelimo na tri plasti, kar je tudi
v njeni naravi, saj ima višino treh kock, ter jih oštevilčimo od spodaj navzgor. Prva plast
obsega celotno spodnjo ploskev ter prvo vrstico vseh štirih stranskih ploskev, druga
ploskev zajema drugo vrstico stranskih ploskev, torej njihova središča, tretja pa zgornjo
vrstico stranskih ploskev ter zgornjo ploskev. Metoda rešuje kocko po plasteh (slika 4.1),
pri čemer se ne oziramo na naslednjo plast, ker nas ne zanima, pazimo le, da si prejšnje
ne podremo [1],[8].
Slika 4.1: Potek Fridricheve metode [8]
Prvi dve plasti sta načeloma rešljivi intuitivno, metoda poda le nekaj nasvetov in
algoritmov za pomoč, zadnja plast pa ima celotno rešitev podano v algoritmih. Intuitivna
metoda torej opisuje reševanje prve in druge plasti, medtem ko je tretja plast skoraj
nemogoče rešljiva intuitivno, zato za njo uporabimo Fridrichevo metodo, ki jo bomo
podrobneje spoznali v naslednjem poglavju. Da lahko predstavimo vrtenje kocke na
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
12
razumljiv način, je potrebno definirati, kako premike označujemo. Zaporedje več premikov
se imenuje algoritem [8].
4.1 Algoritmi
Algoritem [8] je zaporedje premikov kocke, ki rešijo določeno situacijo. Premike
označujemo s prvo črko angleškega imena strani. Na primer sprednja stran Front se
označi s F, zgornja z U in tako dalje, kot je prikazano na sliki 4.2 [8].
Slika 4.2: Oznake stranic kocke [8]
Premik U pomeni, da zgornjo stran v smeri urinega kazalna zavrtimo za 90°. Poznamo še
dva premika zgornje plasti U' oziroma Up, pri čemer p in ' pomenita obrat v nasprotni
smeri urinega kazalca za 90°, ter U2, pri čemer 2 pomeni dvojni premik v katero koli smer.
Pri dvojnem premiku se 2 piše vedno za premikom, na katerega se nanaša, in nikoli pred,
da pri zapisu algoritmov ne pride do nejasnosti. Mala črka u pa pomeni, da zavrtimo
zgornjo plast ter plast pod njo. Najpogosteje uporabljene premike prikazuje slika 4.3,
kocka pred izvedenim premikom pa je enaka kocki na sliki 4.2 [8].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
13
Slika 4.3: Primeri premikov kocke [8]
4.2 Reševanje prve plasti
Za boljše razumevanje reševanja kocke bomo s pomočjo intuitivne in Fridricheve metode
rešili primer premešane kocke, prikazane na sliki 3.5.
Fridrich metoda rešuje kocko po plasteh, to pomeni, da kocko razdelimo na tri plasti po
višini. Najprej rešimo spodnjo ploskev in spodnji rob vseh stranskih ploskev, temu pravimo
prva plast. Začetni "križ" na prvi plasti je čisto intuitivna rešitev in zanj ni posebnih
algoritmov, potrebno je le nekaj poznavanja delovanja kocke ter prostorske predstave in
malce vaje. Križ je v 99,9 % primerov rešljiv s sedmimi premiki ali manj. Kocko imamo
tukaj še popolnoma premešano, zato je potrebno vedeti, kako začeti. Če vzamemo našo
virtualno kocko, vidimo, da je bela ploskev spodnja, rdeča, zelena, oranžna in modra pa
so stranske ploskve. Začeli bomo s križem na beli ploskvi, ki ga prikazuje slika 4.4 [8].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
14
Slika 4.4: "Križ" na prvi ploskvi [8]
S slike 4.4 vidimo, da je pomembno tudi, da se kraki "križa" pravilno ujemajo s sredinskimi
kockicami sosednjih ploskev, sicer je križ napačen. Kako torej poiskati rešitev? Najlažji
način je, da vsak krak križa poiščemo posebej ter ga vstavimo na njegovo mesto, pri tem
pa moramo paziti, da ne uničimo predhodno postavljenih krakov. Križ leži na spodnji
ploskvi, s tem je zgornja ploskev prosta in primerna za "prenašanje" elementov po kocki.
Če pogledamo mrežo naše virtualne kocke, vidimo, da je belo-zelen robni element na
spodnji strani sprednje ploskve. Vsakokrat bomo iskali ta element, njegove barve pa bodo
odvisne od tega, kateri barvi sta spredaj in spodaj. Na celotni kocki najdemo dvanajst
robnih elementov, naš iskani robni element pa je lahko na katerem koli od teh dvanajstih
mest. Najlažji način, da ga pripeljemo na njegovo mesto, je, da ga najprej poiščemo in
pripeljemo "nad" njegovo mesto. Iščemo belo-zelen robni element, ki je lahko na
dvanajstih mestih. Ko ga najdemo, ga pripeljemo "nad" njegovo mesto, to je na mesto
rumeno-zelenega robnega elementa. S tem, ko smo pripeljali naš iskani rob "nad" njegovo
mesto, smo že opravili nekaj premikov kocke. Te premike si v točnem zaporedju
shranimo, saj so že del rešitve. Iskani element imamo sedaj "nad" njegovim mestom, sta
pa dve možnosti, kako je orientiran. Lahko je orientiran tako, da se barva sredinske
kockice sprednje ploskve (v našem primeru zelena) stika s to barvo na iskanem robnem
elementu, druga možnost pa je, da se sredinski element stika z barvo spodnje ploskve na
iskanem elementu. Element po eni od dveh možnosti prestavimo na njegovo mesto in
seveda shranimo zaporedje potrebnih premikov. Dobili smo en krak "križa", ki ga želimo
sestaviti. Preostale tri poiščemo enostavno tako, da celotno kocko zasučemo okoli Y osi v
pozitivni smeri in postopek ponovimo. Tako na mesto zelene ploskve pride oranžna
ploskev, bela pa ostane spodaj. Sedaj po enakem postopku kot za belo-zelen robni
element poiščemo rešitev še za belo-oranžen element ter za preostala dva robna
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
15
elementa. Ne smemo pozabiti shraniti zaporedja opravljenih premikov. Opazimo, da se
preostali del kocke pri tem tudi prestavlja, vendar nas to trenutno ne zanima. Na koncu
zasučemo kocko, da jo vrnemo v začetno stanje (zelena stran sprednja). Rešeni križ na
spodnji ploskvi prikazuje slika 4.5.
Slika 4.5: Rešen "križ" na spodnji ploskvi
Uspelo nam je sestaviti prvi del prve plasti, nato sledi drugi korak, ki dokonča prvo plast
kocke. Pri tem koraku moramo poiskati štiri vogalne elemente, ki sestavijo spodnjo
ploskev. Celotna kocka ima osem vogalnih elementov, zato se rahlo olajša iskanje
pravega elementa. Pripadajoče kote prve plasti prav tako rešujemo intuitivno, vendar
imamo podan nasvet: najlažje je kote postaviti na njihovo mesto, če jih najprej damo "nad"
njihovo mesto ter jih nato pravilno orientirane vstavimo. Za prestavljanje kotov "nad"
njihovo mesto je potreben intuitiven postopek, za vstavljanje pa imamo tri možnosti, ker
ima vogal tri možne orientacije, torej tri algoritme. Iskali bomo spodnji desni vogalni
element sprednje stranice, torej belo-zeleno-oranžen vogalni element. Vogalni element
sestavljajo tri barve, zato so sedaj tudi tri možnosti, kako je obrnjen. Ločimo jih glede na
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
16
stran, kamor kaže barva spodnje stranice, vogal z barvo gor, vogal z barvo desno ter
vogal z barvo naprej, kakor je prikazano na sliki 4.6.
Slika 4.6: Vogali prve plasti [8]
Za vsako od teh možnosti imamo rešitev, kako vogalni element spravimo na njegovo
mesto s čim manj premiki. Prvo možnost (na sliki levo) nam reši RURp, drugo možnost
URUpRp ter tretjo (RU2RpUp)(RuRp). Ta zaporedja imenujemo algoritmi reševanja
Rubikove kocke, saj nam za določeno situacijo povedo rešitev. Ko imamo prvi vogalni
element na svojem mestu in pravilno orientiran, enako kot pri križu obrnemo kocko v
smeri Y osi ter ponovimo postopek, dokler nimamo vseh štirih vogalnih elementov na
svojem mestu. S tem dobimo rešeno celotno prvo plast, prikazano na sliki 4.7, in prvi del
rešitve kocke [8].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
17
Slika 4.7: Rešena prva plast
4.3 Reševanje druge plasti
Druga plast ima najmanj elementov za sestavljanje, saj jo sestavljajo sredinske kockice,
za katere že vemo, da so vedno v enakem razmerju, in štirje robni elementi, ki sodijo med
njih. Pri iskanju elementov druge plasti nam ni več potrebno pregledovati prve plasti, saj
so tam že vsi elementi pravilno razporejeni. Ostane nam torej osem mest, na katera se
razporedijo štirje iskani elementi, štirje na drugi plasti in štirje na tretji plasti. Ponovno je
najlažje, da imamo elemente na tretji plasti, saj jih lahko nemoteno prestavljamo po kocki.
Elemente na njihovo mesto postavimo v dveh korakih: najprej jih poiščemo in prestavimo
na določeno mesto, nato pa jih z algoritmom vstavimo na njihovo končno mesto. Za
razliko od prve plasti sta sedaj dve mesti, na kateri si pripravimo iskani element, odvisno
od njegove orientacije. Glede na mesto, na katerem je pripravljen iskani element, se
razlikujeta tudi algoritma, ki element vstavita. Iščemo element, ki leži na desni strani
sprednje ploskve in je skupen z desno ploskvijo, v našem primeru zeleno-oranžen
element. Ponovno ga postavimo "nad" njegovo mesto, vendar nekoliko drugače. Ne
moremo ga postaviti neposredno "nad" njegovo mesto, ker ni vogalni element, postavimo
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
18
pa ga lahko "nad" enega od pripadajočih sredinskih kockic. Nad katero sredinsko kockico
ga postavimo, je odvisno, kako je element obrnjen. Potrebno ga je postaviti tako, da se
barva sredinske kockice ujema z barvo elementa, ki se dotika sredinske kockice, drugače
ga prestavimo nad drugo sredinsko kockico, kot prikazuje slika 4.8.
Slika 4.8: Druga plast [8]
Slika 4.8 prikazuje primer, ko imamo rdečo kot sprednjo stran, iščemo pa rdeče-zelen
robni element. V prvem primeru robni element vstavimo na njegovo mesto z algoritmom
RpUpRpUpRpURUR, v drugem primeru pa FUFUFUpFpUpFp. V primeru, da je iskani
robni element vstavljen na mesto nekega drugega elementa, torej ni na tretji plasti, pa ga
na tretjo plast dobimo tako, da postavimo eno izmed stranic, na katerih leži, kot sprednjo,
drugo stranico pa kot desno ter naredimo prvi algoritem RpUpRpUpRpURUR. Nato se
vrnemo tja, kjer smo ostali, ter ponovno poiščemo robni element in ga po že znanem
postopku vstavimo na njegovo mesto. S tem dobimo rešeno drugo plast, prikazano na
sliki 4.9, kar zaključi reševanje kocke po intuitivni metodi [8].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
19
Slika 4.9: Rešena druga plast
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
20
5 FRIDRICHEVA METODA ZA REŠEVANJE RUBIKOVE KOCKE
Reševanje kocke se približuje koncu, ostala je le še zadnja plast, ki je za reševanje
najtežja. Večina kocke je sedaj že rešena, zato je potrebno zelo pazljivo nadaljevati, saj
vsak napačen premik uniči vse dosedanje delo. Intuitivno je skoraj nemogoče rešiti zadnjo
plast, zato nam pomagajo Fridricheva metoda in algoritmi, ki rešijo vsako možno situacijo.
V tretji plasti se pokaže pravi pomen Fridricheve metode, ki se deli v dve skupini:
algoritmi, ki orientirajo elemente zadnje plasti ("OLL") ter algoritmi, ki prestavijo elemente
zadnje plasti ("PLL"). Vseh algoritmov skupaj je 78; 57 "OLL" in 21 "PLL". Vsakega od
korakov zadnje plasti lahko razdelimo na dva dela in s tem zmanjšamo število možnosti,
vendar povečamo število premikov v končni rešitvi. Prvi korak, orientacijo elementov,
razdelimo na orientacijo robnih elementov, s čimer dobimo "križ", ter orientacijo vogalnih
elementov. Drugi korak pa razdelimo na prva dva algoritma ter na zadnje štiri algoritme.
Skupaj imamo torej štiri korake za rešitev zadnje plasti [1],[8].
Prvi korak je ustvarjanje "križa", pri čemer imamo štiri možnosti, prikazane na sliki 5.1,
izmed katerih je ena že rešen "križ" [1],[8].
Slika 5.1: Zadnja plast - prvi korak [8]
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
21
Program poišče ustrezen algoritem tako, da najprej preveri, če imamo katero od možnih
situacij, sicer pa zgornjo ploskev zasuče (premik U) ter ponovno išče možne rešitve.
Postopek ponavlja tako dolgo, da najde situacijo, ki jo ima opisano z algoritmom, ki ga
nato izvede. Rešitev prvega koraka prikazuje slika 5.2.
Slika 5.2: Rešen prvi korak zadnje plasti
V naslednjem koraku orientira še kote, za kar ima osem možnosti, prikazanih na sliki 5.3
[1],[8].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
22
Slika 5.3: Zadnja plast - drugi korak [8]
Program ponovno zgornjo ploskev obrača, dokler ne najde situacije, za katero ima
napisan algoritem. Če takšne situacije ne najde, pomeni, da je ta korak že rešen in lahko
nadaljuje z naslednjim korakom. Na sliki 5.4 vidimo celotno zgornjo plast pravilno
orientirano (zgornja ploskev je v celoti rumena).
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
23
Slika 5.4: Rešen drugi korak zadnje plasti
Sedaj imamo vse elemente zadnje plasti pravilno orientirane, vendar še niso na svojih
mestih, zato moramo izvesti še tretji in četrti korak. Pri tretjem koraku moramo na tretji
plasti na stranskih ploskvah poiskati dva kota, ki imata na eni ploskvi enaki barvi (slika 5.5
puščici prikazujeta zelena dela kotov na isti strani). Ko ju najdemo, obrnemo kocko tako,
da je ta ploskev zadaj (na sliki 5.5 je ta ploskev zgoraj) ter izvedemo prvi algoritem. Če ne
najdemo takega para kotov, potem izvedemo drugi algoritem, kot je na sliki 5.5 desno
[1],[8].
Slika 5.5: Zadnja plast - tretji korak [8]
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
24
V našem primeru lahko na sliki 5.4 takšna para kotov opazimo na oražni stranici, kjer sta
dela levega in desnega vogala oba enake barve – rdeče. Zgornja plast se temu primerno
obrne, da dobimo par na zadnji ploskvi ter izvedemo prvi algoritem. Dobimo rešen tretji
korak zadnje plasti, ki ga prikazuje slika 5.6.
Slika 5.6: Rešen tretji korak zadnje plasti
V zadnjem koraku ostanejo samo še robni elementi, ki jih je potrebno med seboj
zamenjati, tako da zasedejo svoja prava mesta. Možnosti je pet, ena od teh je rešena
kocka, torej za zadnji, četrti korak, ostanejo štirje možni algoritmi, prikazani na sliki 5.7
[1],[8].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
25
Slika 5.7: Zadnja plast - četrti korak [8]
Program reši zadnji korak podobno kot prejšnje. Zgornjo plast vrti, dokler ne najde ene od
možnih situacij ter jo izvede. Na koncu samo še preveri, če je zgornja plast pravilno
orientirana glede na spodnje plasti in kocka je rešena, kot prikazuje slika 5.8.
Slika 5.8: Rešen četrti korak zadnje plasti – rešena kocka
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
26
Program sproti shranjuje premike ter algoritme, ki jih je uporabljal ter jih na koncu združi
skupaj v en velik algoritem, ki predstavlja celotno rešitev naše kocke. Rešitev našega
primera kocke prikazuje slika 5.9.
Slika 5.9: Primer rešitvenega algoritma kocke
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
27
6 ROBOTSKO PRIJEMALO
Iskanje rešitve je le prvi del našega projekta, to rešitev je potrebno še izvesti na realni
kocki. V ta namen smo izdelali robota, ki kocko drži in vrti podobno kot človek. Robot ima
štiri dvoosna prijemala, kar omogoča direkten dostop do štirih od šestih strani kocke.
Preostali dve strani pa sta dostopni z zasukom kocke. Tako je robot zelo učinkovit in je
zelo malo nepotrebnih vmesnih rotacij kocke pri sami implementaciji rešitve.
6.1 Robotsko prijemalo
Rubikova kocka je namenjena reševanju ljudem, torej je smiselno, da robot čim bolj
upodobi človeški prijem. Vendar je človeško roko zelo težko posnemati z robotskim
prijemalom, zadosti je, da posnema bistvene lastnosti, ki so potrebne za vrtenje kocke. Za
zasuk posamezne ploskve kocke je zadosti, da jo primemo na dveh mestih ter zasučemo
okoli njene osi vrtenja. Naše prijemalo se torej mora vrteti okoli osi, ki leži na isti premici,
kot leži os ploskve kocke, ki poteka od sredine ploskve skozi središče kocke. Posamezne
ploskve kocke so med seboj povezane, imajo skupne elemente (robni in kotni elementi),
torej mora prijemalo biti sposobno kocko tudi spustiti in se umakniti, da se lahko kocka
prosto vrti oziroma, da ne ovira vrtenja preostalih ploskev. Prijemalo mora torej biti
narejeno kot klešče, ki se lahko odpirajo in zapirajo ter vrtijo okoli simetrale med
kleščama, kakor je prikazano na sliki 6.1.
Slika 6.1: Shema robotskega prijemala
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
28
Prijemalo moramo opremiti z motorji, da ga lahko premikamo. Kot nalašč za to so
modelarski servomotorji, potrebujemo pa dva za vodenje prijemala, enega za odpiranje in
zapiranje ter enega za rotacijo celotnega prijemala. Uporabili smo Hitec HS-81 micro za
odpiranje in zapiranje ter Hitec HS-225BB za rotacijo. HS-81 ima 90° kot delovanja, kar je
zadostno za odpiranje in zapiranje, HS-225 BB pa omogoča 180° delovanja, kar
zadostuje vrtenju stranic v obe smeri (U in Up). Pri odpiranju in zapiranju prijemala
moramo zagotoviti sočasno delovanje obeh ročic, kar dosežemo z zobniško povezavo
med ročicama. HS-225 BB je s spodnjim delom pritrjen neposredno na ohišje in omogoča
stabilno delovanje prijemala. Na koncu prijemal je dodana penasta obloga, ki omogoča
boljši oprijem kocke ter dopušča manjše napake pri odprtosti prijemala. Na sliki 6.2 je
prikazano prijemalo, kjer so vidni vsi bistveni elementi.
Slika 6.2: Robotsko prijemalo
Prijemalo je zgrajeno iz pleksi stekla, ker je lahko in močno, obdelava pa ni zahtevna,
hkrati pa zaradi svoje prozornosti omogoča pregled nad komponentami tudi med
delovanjem.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
29
Za obvladovanje kocke potrebujemo najmanj dve prijemali – eno za držanje kocke, drugo
za vrtenje ploskev. Takšen pristop bi bil najbolj podoben biomehaniki človeka, vendar
prijemala niso tako učinkovita kot človeška roka. Manipulacijo kocke lahko izboljšamo z
uporabo dodatnih prijemal in izkaže se, da so najbolj učinkovita štiri prijemala, saj lahko
zagotovimo, da se med seboj ne ovirajo, pri tem pa imamo neposreden dostop do štirih
ploskev kocke.
Za pritrditev prijemal potrebujemo ohišje, ki je prav tako zgrajeno iz pleksi stekla.
Prozorno ohišje omogoča spremljanje delovanja robota med samim reševanjem kocke,
kar je vidno na sliki 6.3. Položaj prijemal mora biti natančen, da je kocka stabilno vpeta
med njih, kar zagotovimo z robustno konstrukcijo ohišja. Vrh robota je pokrov, ki omogoča
dostop do kocke ter prijemal, zaradi varnosti pa je pokrov zavarovan s stikalom, da med
delovanjem ne posegamo v robota. Na pokrovu se nahaja kamera, ki je povezana z
računalnikom ter programom za slikanje kocke.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
30
Slika 6.3: Robot
6.2 Mikrokrmilnik
Program in robota je potrebno povezati, če želimo, da robot izvede rešitev, ki jo program
izračuna. Za to je uporabljen mikrokrmilnik Arduino UNO [11], prikazan na sliki 6.4,
popularna odprtokodna prototipna plošča. Arduino je odličen mikrokrmilnik za vodenje
servomotorjev, saj je zanj napisana knjižnica za vodenje servomotorjev, ki omogoča
simultano vodenje do 12 servomotorjev [9].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
31
Slika 6.4: Mikrokrmilnik Arduino UNO [9]
Mikrokrmilnik je napajan preko USB kabla, priključenega na računalnik, kar ne predstavlja
zadostne napajalne moči za delovanje osmih servomotorjev, zato je potrebno dodatno
zunanje napajanje preko napajalnika. Napajalnik mora zagotavljati 3 ampere izhodnega
toka, kolikor znaša poraba servomotorjev pri 5 voltih napetosti. V ta namen je zraven
krmilnika nameščen napajalnik MW RS-25-5, ki ima priključno napetost 230 voltov.
Negativni sponki mikrokrmilnika in napajalnika sta kratko sklenjeni, da ne pride do
nezaželenih razlik med napetostmi. Med napajalni sponki mikrokrmilnika je dodan
kondenzator za večjo stabilnost napetosti in delovanja mikrokrmilnika. Napajanje
servomotorjev je neposredno iz napajalnika, vodenje pa je priključeno na izhode
mikrokrmilnika.
Povezava mikrokrmilnika z računalnikom poteka preko USB kabla, preko katerega je
mikrokrmilnik tudi napajan. Da pa lahko mikrokrmilnik komunicira s programom v Matlabu,
je na mikrokrmilniku nameščen strežniški program [10], ki omogoča Matlabu neposreden
dostop do vhodov in izhodov na mikrokrmilniku ter njegovih knjižnic. Na računalniku mora
imeti nameščene gonilnike za mikrokrmilnik ter knjižnico za Matlab, ki vsebuje ukaze za
komunikacijo z mikrokrmilnikom [9].
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
32
7 SKLEP
Program obsega zelo široko kodo, kar je pomenilo precej testiranj za odpravo vseh napak.
Povprečna dolžina rešitve za naključno premešano kocko je znašala približno 140
premikov. Čas, potreben za računanje rešitve, je precej odvisen od strojne opreme,
vendar naj ne bi znašal več kot pet sekund. Program dopušča veliko možnosti za
izboljšavo, saj bi z izpopolnjeno intuitivno metodo ter Fridrichevo metodo z večjim
naborom algoritmov lahko število potrebnih premikov za rešitev tudi prepolovili.
Pri strojnem vidu je prihajalo do precejšnjih težav pri prepoznavi barv zaradi nekonstantne
osvetlitve. Za boljše delovanje bi bilo potrebno zagotoviti kvalitetnejšo kamero ali pa
neodvisen vir svetlobe na samem robotu, saj je dnevna svetloba preveč nepredvidljiva.
Poleg tega je potrebno paziti tudi na postavitev svetlobnega vira, saj zaradi odbojne
površine kocke pogosto pride do bleščanja in s tem popačenja slike.
Robot se je pokazal za dovolj hitrega, saj je bil dosežen cilj povprečnega reševanja pod
tremi minutami. Čas reševanja bi lahko izboljšali z nadgradnjo programa, s čimer bi
zmanjšali število potrebnih premikov, ter s povečanjem odzivnosti in hitrosti izvajanja
premikov samega robota. Prvi korak bi bila zamenjava servomotorjev za hitrejše in
močnejše, vendar ne bi veliko pridobili, saj razlike v hitrostih servomotorjev niso tako
drastične. Najboljša možnost za hitrejše izvajanje premikov je dodajanje zobniškega
prenosa med servomotor in prijemalo, s čimer bi vplivali na natančnost zasuka, zato bi
bila potrebna še dodatna testiranja razmerji. Robustnost in stabilno delovanje robota bi
lahko povečali s strojno izdelavo elementov, saj jih je večina ročne izdelave.
S predlaganim diplomskim delom sem v popolnosti dosegel cilj diplome.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
33
VIRI IN LITERATURA
[1] My speed cubing page. Dostopno na:
http://www.ws.binghamton.edu/fridrich/cube.html [september 2013].
[2] Rubikscube.info. Dostopno na: http://www.rubikscube.info/ [september 2013]
[3] Bandelow, C. Inside Rubik's cube and beyond. Birghauser Boston, 1982.
Dostopno na: http://www.ebook3000.com/Inside-Rubik-s-Cube-and-
Beyond_66314.html [september 2013].
[4] Cubestormer II – The power of Two. Dostopno na: http://blogs.arm.com/smart-
connected-devices/794-cubestormer-ii-the-power-of-two/ [avgust 2013.]
[5] Fastest robot to solve a Rubik's cube. Dostopno na:
http://www.guinnessworldrecords.com/world-records/6000/fastest-robot-to-solve-a-
rubiks-cube [avgust 2013.]
[6] Petrišič, J. Uvod v MATLAB: za inženirje. Ljubljana: Fakulteta za strojništvo, 2011.
[7] Ponce, F. Computer Vision: A Modern Approach, 2nd Edition. Pearson, 2012.
[8] Badmephisto's cubing page. Dostopno na: http://badmephisto.com [september
2013].
[9] Arduino playground. Dostopno na:
http://playground.arduino.cc/ComponentLib/servo [avgust 2013].
[10] Matlab central. Dostopno na:
http://www.mathworks.com/matlabcentral/fileexchange/32374-matlab-support-
package-for-arduino-aka-arduinoio-package [avgust 2013].
[11] Monk, S. Programming Arduino: getting started with sketches. New York:
McGraw-Hill, 2012.
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
PRILOGE
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
Priloga A
Načrt robota
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
Načrt robota
I Z J A V A O A V T O R S T V U
Spodaj podpisani
Rok Rabuza
z vpisno številko
E1030554
sem avtor diplomskega dela z naslovom:
Reševanje Rubikove kocke s strojnim
vidom in robotskim prijemalom
(naslov diplomskega dela)
S svojim podpisom zagotavljam, da:
sem diplomsko delo izdelal samostojno pod mentorstvom (naziv, ime in priimek)
izr. prof. Dušan Gleich, univ. dipl. inž. el.
in somentorstvom (naziv, ime in priimek)
so elektronska oblika diplomskega dela, naslov (slov., angl.), povzetek (slov., angl.) ter ključne besede (slov., angl.) identični s tiskano obliko diplomskega dela.
soglašam z javno objavo elektronske oblike diplomskega dela v DKUM.
V Mariboru, dne
Podpis avtorja/-ice:
IZJAVA O USTREZNOSTI DIPLOMSKEGA DELA Spodaj podpisani Dušan Gleich izjavljam, da je
(ime in priimek mentorja/-ice)
študent Rok Rabuza izdelal diplomsko
(ime in priimek študenta/-ke) delo z naslovom:
Reševanje Rubikove kocke s strojnim vidom in robotskim prijemalom
(naslov diplomskega dela)
v skladu z odobreno temo diplomskega dela, Navodili za pisanje diplomskih del na dodiplomskih študijskih programih UM FERI in mojimi navodili. Kraj in datum:
Podpis mentorja:
IZJAVA O ISTOVETNOSTI TISKANE IN ELEKTRONSKE VERZIJE ZAKLJUČNEGA DELA IN OBJAVI OSEBNIH PODATKOV DIPLOMANTOV
Ime in priimek avtorja:
Rok Rabuza
Vpisna številka:
E1030554
Študijski program:
Elektritehnika UNI
Naslov zaključnega dela:
Reševanje Rubikove kocke s strojnim vidom in robotskim
prijemalom
Mentor:
izr. prof. Dušan Gleich, univ. dipl. inž. el.
Somentor:
Podpisani Rok Rabuza izjavljam, da sem za potrebe arhiviranja oddal elektronsko verzijo zaključnega dela v Digitalno knjižnico Univerze v Mariboru. Zaključno delo sem izdelal sam ob pomoči mentorja. V skladu s 1. odstavkom 21. člena Zakona o avtorskih in sorodnih pravicah dovoljujem, da se zgoraj navedeno zaključno delo objavi na portalu Digitalne knjižnice Univerze v Mariboru. Tiskana verzija zaključnega dela je istovetna z elektronsko verzijo elektronski verziji, ki sem jo oddal za objavo v Digitalno knjižnico Univerze v Mariboru. Podpisani izjavljam, da dovoljujem objavo osebnih podatkov, vezanih na zaključek študija (ime, priimek, leto in kraj rojstva, datum zaključka študija, naslov zaključnega dela), na spletnih straneh in v publikacijah UM. Datum in kraj: Podpis avtorja-ice: