Navodila za pisanje diplomskih nalog UM FERI

Podobni dokumenti
Microsoft Word - CNC obdelava kazalo vsebine.doc

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Osnove matematicne analize 2018/19

Microsoft Word - A-3-Dezelak-SLO.doc

1. izbirni test za MMO 2018 Ljubljana, 16. december Naj bo n naravno število. Na mizi imamo n 2 okraskov n različnih barv in ni nujno, da imam

PowerPointova predstavitev

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

LABORATORIJSKE VAJE IZ FIZIKE

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

Zadeva: Ponudba

NAVODILA AVTORJEM PRISPEVKOV

Slide 1

NAJRAJE SE DRUŽIM S SVIČNIKOM, SAJ LAHKO VADIM ČRTE IN KRIVULJE, PA VELIKE TISKANE ČRKE IN ŠTEVILKE DO 20. Preizkusite znanje vaših otrok in natisnite

DNEVNIK

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

resitve.dvi

RAČUNALNIŠKA ORODJA V MATEMATIKI

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

Krmiljenje elektromotorj ev

predstavitev fakultete za matematiko 2017 A

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

Microsoft Word - 021_01_13_Pravilnik_o_zakljucnem delu

CpE & ME 519

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

Teorija kodiranja in kriptografija 2013/ AES

FGG13

innbox_f60_navodila.indd

UNIVERZA V LJUBLJANI FAKULTETA ZA MATEMATIKO IN FIZIKO Katja Ciglar Analiza občutljivosti v Excel-u Seminarska naloga pri predmetu Optimizacija v fina

Microsoft Word - Seštevamo stotice.doc

Geometrija v nacionalnih preverjanjih znanja

Univerza v Mariboru Fakulteta za naravoslovje in matematiko Oddelek za matematiko in ra unalni²tvo Izobraºevalna matematika Pisni izpit pri predmetu K

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Vaje: Matrike 1. Ugani rezultat, nato pa dokaži z indukcijo: (a) (b) [ ] n 1 1 ; n N 0 1 n ; n N Pokaži, da je množica x 0 y 0 x

3. Metode, ki temeljijo na minimalnem ostanku Denimo, da smo z Arnoldijevim algoritmom zgenerirali ON bazo podprostora Krilova K k (A, r 0 ) in velja

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

INFORMATOR BIROKRAT 1/2011

7. VAJA A. ENAČBA ZBIRALNE LEČE

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

N

rm.dvi

Poročilo projekta : Učinkovita raba energije Primerjava klasične sončne elektrarne z sončno elektrarno ki sledi soncu. Cilj projekta: Cilj našega proj

COBISS3/Medknjižnična izposoja

ANALITIČNA GEOMETRIJA V RAVNINI

RC MNZ - kategorija U12 in U13 TRENING 3-4 SKLOP: Igra 1:1 USMERITEV TRENINGA: CILJ: Igra 1:1 v napadu Utrjevanje uspešnosti igre 1:1 v napadu UVODNI

Mladi za napredek Maribora srečanje DOLŽINA»SPIRALE«Matematika Raziskovalna naloga Februar 2015

DN5(Kor).dvi

seminarska_naloga_za_ev

Ime in priimek

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

STAVKI _5_

ISOFT , računalniški inženiring

Diapozitiv 1

Microsoft Word - Navodila o postopku priprave in zagovora magistrskega dela

resitve.dvi

Overview

VST: 1. kviz

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

SLO - NAVODILO ZA UPORABO IN MONTAŽO Št

DES

Diapozitiv 1

DCS-2330L_A1_QIG_v1.00(EU).indd

Strojna oprema

SLO - NAVODILO ZA NAMESTITEV IN UPORABO Št. izd. : HD AKCIJSKA KAMERA MIDLAND XTREME XTC 200 Št. izdelka:

PREDMETNI KURIKULUM ZA RAZVOJ METEMATIČNIH KOMPETENC

Arial 26 pt, bold

Microsoft Word - CelotniPraktikum_2011_verZaTisk.doc

Spoznajmo PowerPoint 2013

Prevodnik_v_polju_14_

N

03C

11. Navadne diferencialne enačbe Začetni problem prvega reda Iščemo funkcijo y(x), ki zadošča diferencialni enačbi y = f(x, y) in začetnemu pogo

NAVODILA ZA PISANJE PROJEKTNIH DIPLOMSKIH DEL 1 KAJ JE PROJEKT? Projekt je enkraten glede na način izvedbe, vsebuje nove in neznane naloge, ima svoj z

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

Microsoft Word - Analiza rezultatov NPZ matematika 2018.docx

untitled

Microsoft Word - Avditorne.docx

Uradni list Republike Slovenije Št. 44 / / Stran 6325 PRILOGA II Del A NAJVEČJE MERE IN MASE VOZIL 1 NAJVEČJE DOVOLJENE MERE 1.1 Največja

Microsoft PowerPoint - MK 3 tehnicni sistemi.ppt

VAJE RID 1 (4), program PTI, šol

an-01-USB_digitalni_zvocniki_Logitech_S-150.docx

FAKULTETA ZA STROJNIŠTVO Matematika 2 Pisni izpit 9. junij 2005 Ime in priimek: Vpisna št: Zaporedna številka izpita: Navodila Pazljivo preberite bese

Pravila tekmovanja FE, 15. in verzija pravil: 4; Opis naloge Robot vsake ekipe prične s poskusom v coni»start«(zelena cona).

Navodila Trgovina iCenter

(Slovenian) DM-HB Navodila za trgovce CESTNO MTB Treking Mestno izletniško/ udobno kolo URBANO ŠPORTNO E-BIKE HB-M3050 FH-M3050 HB-MT200 FH-MT2

DELOVNI LIST ZA UČENCA

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

Navodila za pripravo oglasov na strani Med.Over.Net v 2.2 Statistično najboljši odziv uporabnikov je na oglase, ki hitro in neposredno prenesejo osnov

Microsoft Word - avd_vaje_ars1_1.doc

Predtest iz za 1. kontrolno nalogo- 2K Teme za kontrolno nalogo: Podobni trikotniki. Izreki v pravokotnem trikotniku. Kotne funkcije poljubnega kota.

ŠOLA: SŠTS Šiška

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila

Microsoft Word - Navodila_NSB2_SLO.doc

FGG14

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

INFORMATOR BIROKRAT 1/2011

Transkripcija:

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: Študijski program: Smer: Mentor: Lektorica: Rok Rabuza univerzitetni študijski program Elektrotehnika Avtomatika in robotika izr. prof. Dušan Gleich, univ. dipl. inž. el. Irena Hohkraut

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. ii

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. iii

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. iv

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 v

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 vi

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 vii

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. 1

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č 2

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]. 3

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 4

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. 5

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. 6

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 Matlabu. Slika 3.4: Matrika virtualne kocke 7

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 8

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. 9

Slika 3.5: Mreža virtualne kocke 10

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 11

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]. 12

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]. 13

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 14

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 15

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]. 16

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 17

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]. 18

Slika 4.9: Rešena druga plast 19

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] 20

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]. 21

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). 22

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] 23

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]. 24

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 25

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 26

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 27

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. 28

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. 29

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]. 30

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]. 31

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. 32

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/smartconnected-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-arubiks-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-supportpackage-for-arduino-aka-arduinoio-package [avgust 2013]. [11] Monk, S. Programming Arduino: getting started with sketches. New York: McGraw-Hill, 2012. 33

PRILOGE

Priloga A Načrt robota

Načrt robota

I Z J A V A O A V T O R S T V U Spodaj podpisani z vpisno številko sem avtor diplomskega dela z naslovom: Rok Rabuza E1030554 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: (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: Vpisna številka: Študijski program: Naslov zaključnega dela: Rok Rabuza E1030554 Elektritehnika UNI 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: