Rapport - Siste nytt

Download Report

Transcript Rapport - Siste nytt

Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Prosjekt: Mekatronikk
for: Ingeniørutdanningen
HØGSKOLEN I AGDER
Fakultet for teknologi, Grimstad
Tittel: Eksperimentell Testjigg for
visjonssystemer
Rapportnr.:
Fagområde: Mekatronikk
Antall sider: 32 + 15 s. vedlegg
Tilgjenglighet: Åpen
Oppdragsgiver: HiA
Dato: 04.06.07
Forfatter : Kristoffer Enerstad og Henrik Juel Veileder: Morten Ottestad
Fossen
Emneord:
Testjigg for
visjons system
Hovedprosjekt
Sammendrag:
Vi skulle videreutvikle en testjigg for et vision basert system.
Det bestod hovedsakelig av en kartesisk plattform som opererer i X-Y
retning, kamera for identifisering av objekt og en elektromagnet for
opplukking av objekter etter form og farge.
Resultatet ble programmering av motorstyring, identifisering av objekt og
stativutforming til kamera og spot.
Telefon: +47 37 25 30 00
Grooseveien 36, N-4876 Grimstad
Telefaks: +47 37 25 30 01
1
Hovedprosjekt
1.
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
SAMMENDRAG
Hovedprosjektet er en avsluttende oppgave for mekatronikk studentene som går 2 årig eller
Bachelor ved Høgskolen i Agder. I oppgaven fikk vi brukt kunnskap og teori fra flere fag.
Oppgaven bestod av å konstruere et system som skal ved hjelp av et webkamera skal
identifisere objekter etter form og farge på en plattform som blir drevet av en kartesisk maskin
bestående av en mikrokontroller, en ramme og to stepp motorer som i X-Y planet. Så skal en
elektromagnet plukke opp de identifiserte objektene og sorterere dem i utvalgte bokser.
Dette prosjektet er en videreutvikling av et tidligere hovedprosjekt så selve rammen med
plattformen og drivmotorene i x,y retning var allerede lagd.
Det som skulle gjøres på dette prosjektet var å lage et stativ for kameraet og spotter, program
for styring, identifisering av objekt og sammenordning av identifiseringen og bevegelsen til
plattformen og elektromagneten.
Programmeringen for motoren ble gjort i Labview , identifiseringen av objekt i NI Vision og
tegninger av stativ konstruksjonen i Solid Works.
2
Hovedprosjekt
2.
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
FORORD
Hovedprosjektets praktiske og fremførende del er bare en liten del av karakteren.
Derfor er rapporten er viktig del av prosjektet. Prosjektet er en oppgave som er et
internprosjekt for HIA med Morten Ottestad som offisiell veileder.
Hovedinnholdet i denne rapporten er hvordan vi har løst oppgaven og resultatet av dette. Det
var egentlig ikke så mange andre måter enn den vi har brukt som vi kunne løst oppgaven på.
Rapporten er strukturert i samme rekkefølge som vi har gjennomført prosjektet, dette føler vi
forklarer arbeidsmetodene våre best.
Vi retter stor takk til følgende personer for god hjelp og veiledning
Morten Ottestad
Roy Folgerø
Eivind blablabla
Torstein Wroldsen.
……………………………………………………….
Henrik Juel Fossen
……………………………………………………….
Kristoffer Enerstad
04.06.07 HIA, Grimstad
3
Hovedprosjekt
3
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
INNHOLDSFORTEGNELSE
Forside……………………………………………………………………………………….s.1
1. SAMMENDRAG………………………………………………………………………....s.2
2. FORORD…………………………………………………………………………….........s.3
3. INNHOLDSFORTEGNELSE…………………………………………………………...s.4
4. OPPGAVEBESKRIVELSE…………………………………………………………......s.5
4.1 OPPGAVENS BAKGRUNN……………………………………………….……s.5
4.2 OPPGAVENS MÅL……………………………………………………………...s.5
4.2.1 Testjiggen……...……………………………………………………….s.5
4.2.2 Programvare…………………………..……………………………….s.5
5. PROBLEMSTILLING OG LØSNING…………………………………………………....s.6
6. TIDSPLAN……………………………………………………………………………......s.7
7. HOVEDDEL…………………….……………………………………………………......s.8
7.1 SYSTEMET I SIN HELHET………….…………………………………...…….s.8
7.2 STATIVET……….…………...…………………………………………...…….s.9
7.2.1 Innledning……………………………………………………..…........s.9
7.2.2 Planlegging av stativet……………………………..…………..……s.10
7.2.3 Stativet – sammensetning……………………………..………….s.11-16
7.2.4 Strømkilde for halogenpærene……………………………………...s.17
7.2.5 Koblingskjema over spotlight og transformator…………………...s.18
7.3 ELEKTROMAGNETEN…………………………………...………s.19-20
7.4 KARTESISK MASKIN………………………………………………………....s.21
7.4.1 Aluminiums rammen………………………………………………...s.21
7.4.2 Stepmotorene………………………………………………………....s.22
7.5 OPPKOBLING AV MIKROKONTROLLER………………………………….s.24
7.5.1 Beskrivelse av mikrokontrolleren…………………………………..s.24
7.5.2 Mikrokontrolleren – Komponenter……………………………..s.25-26
7.5.3 Stepmotor oppkobling……………………………………………….s.27
7.5.4 Oppkobling av endebrytere…………………………………………s.28
7.6 BILDEBEHANDLING…………………………………………………………s.29
7.6.1 Introduksjon………………………………………………………….s.29
7.6.2 Kamera………………………………………………………………..s.30
7.6.3 Objektidentifisering………………………………………………….s.31
7.6.3.1 Metode 1…………………………………………………s.31-33
7.6.3.2 Metode 2 ……………………………………………………s.34
7.6.3.3 Valg av bildegjenkjennelses metode………………………...s.35
7.6.4 Bilde kalibrering………………………………………………….s.36-38
7.6.5 Millimeter til step konversjon………………………………………s.39
7.7 MINT PROGRAMMERINGS-DEL ………………………………..............s.40-41
7.8 LABVIEW DEL………………………………………………………………...s.42
7.8.1 En introduksjon…………………………………………………..s.42-43
7.8.2 Labview gjennomgang…………………………………………...s.44-65
8 KONKLUSJON …………………………………………………………………………s.66
9 UTSTYRSLISTE………………………………………………………………………...s.67
11 Vedlegg
4
Hovedprosjekt
4.
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
OPPGAVEBESKRIVELSE
UTVIKLING AV TESTPLATFORM FOR VISION SYSTEMER
Studenter: Henrik Juel Fossen, Kristoffer Enerstad
4.1
OPPGAVENS BAKGRUNN
Visjon systemer har en økende anvendelse i industrien i forbindelse med måling ,
kvalitetskontroll og håndtering. Det er derfor viktig at dette emnet inngår som en del av
undervisningen på Mekatronikk studiet. I et vision system er det en del optiske faktorer som
er viktig å ha kontroll med slik som:
• Kamera plassering
• Fokusering og oppløsning
• Lysforhold
• Brytnings og perspektiv feil
Andre viktige faktorer for resultatet er de algoritmer som benyttes for bildebehandling og
gjenkjenning av linjer og geometriske objekter. Av overnevnte grunner er det ønskelig å
utvikle en eksperimentell jigg der lysforhold, kamera plassering, bakgrunn osv kan endres.
4.2
OPPGAVENS MÅL
Dette hovedprosjektet har som målsetting å bygge en eksperimentell visjontestjigg samt å
utvikle software for posisjonsmåling og identifisering.
4.2.1 Testjiggen:
• Kamera jigg med justerbar høyde og orientering
• Lys jigg med fire kilder som er justerbar i høyde og orientering
• Instrumentering av plattform for måling av lysforhold (lysstyrke og fordeling)
4.2.2 Software:
• Det skal utvikles programmaler for identifisering av objekter med utgangspunkt i form
og templater (bilde av søkt objekt)
• Det skal utvikles kalibrerings rutiner slik at det kompenseres for perspektiv og
optikkfeil
•
•
Det skal utvikles programmaler for plattform X,Y posisjonering
Det skal utvikles et program som identifiserer og sorterer objekter i et lagersystem
Teknisk dokumentasjon som koplingsskjema kildekode og produksjonstegninger osv. skal
være en del av rapporten. Besvarelsen leveres i tre eksemplarer: to innbundet på papir og ett
eksemplar på CD. Ved utarbeidelse av teksten skal kandidatene legge vekt på å gjøre teksten
oversiktlig og velskrevet. Oppgaveteksten skal vedlegges foran i rapporten.
Nytt i 2007 er at gruppene må lage en kort videopresentasjon av arbeidet (maksimum 2
minutter) og lagre denne på CD'en i MPEG eller WMV format. Videoen kan inneholde
sekvenser av gruppemedlemmene, simuleringer og eksperiment.
Oppdragsgiver: Internt HiA prosjekt
Faglig ansvarlig: Morten Ottestad, telefon: 37 25 31 22
5
Hovedprosjekt
5.
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
PROBLEMSTILLING OG LØSNING
5.1 Identifisering
5.1.1 Bildekvalitet
Belysning
• Spot
o Kameraet må få optimale lysforhold.
o Må kunne justeres på en repeterbar måte.
• Posisjonering
o Lyset må kunne justeres i x, y( z) retning.
o Vinkler og høyde/lengde på stativet må ha leselige mål.
Kamera
• Fokusering
o Fokusering må være justerbar men stabil under bruk.
o Må ha tilstrekkelig høy oppløsning.
• Stativ
o Stativet er i samme konstruksjon som spotlys.
o Stativet må tåle vekt av spotlys og kamera.
o Kameraet må kunne justeres i x, y( z) retning og på en
repeterbar måte.
5.1.2 Vision system
Bildebehandling
• Identifisering og sortering av objekt etter form (størrelse) og
farge.
• Identifisere posisjonen til objektene.
• Må kunne identifisere nye objekter som kan dukke opp.
5.2 Transportering
5.2.1 Kartesisk maskin
• Må kunne flytte objektene nøyaktig
• Skal kobles til en mikro
5.2.2 Elektromagnet
Skal plukke opp et og et objekt fra plattform
Må ha en løfteevne som overskrider objektets vekt
5.2.3 Program
Plattformen må posisjoneres slik at elektromagneten kan løfte objekt
Av/på funksjon på elektromagnet når den skal være i bruk eller ikke
Må kunne sortere objekt i forskjellige ”båser”
6
Hovedprosjekt
6.
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
TIDSPLAN
Figur.1: Tidskjema
7
Hovedprosjekt
Gruppe 10
7.
HOVEDDEL
7.1
SYSTEMET I SIN HELHET
Henrik Juel Fossen og Kristoffer Enerstad
Vi skal her forklare om systemet vi har konstruert på en helhetlig og oversiktlig måte før vi
går i detalj om de ulike delene av systemet.
Prosjektet vårt består hovedsakelig av to deler: maskindelen og programdelen.
Maskindelen er delt opp i fire deler:
7.2 Stativet – Her legger vi ut om hvordan vi planla og utførte konstruksjonen av stativet som
holder spotlight oppsettet og hvordan vi har laft opp spotlight systemet.
7.3 Elektromagneten – I denne delen forklarer vi hva en elektromagnet er, hvorfor den er
relevant for vårt system og hvordan vi implementerte den og konstruerte kretsen som styrer
den.
7.4 kartesisk maskin – Selve maskinen som beveger plattformen som flytter de identifiserte
objektene blir forklart i detalj i denne delen. Hvordan den er konstruert og hva slags motorer
som er benyttet
7.5 Oppkobling mot mikrokontrolleren – Her forklarer vi om mikrokontrolleren som driver
motorene til den kartesiske maskinen, hva de forskjellige inn og utgangene på den gjør og
hvordan vi har koblet opp resten av systemet mot den
Programdelen er delt opp i to deler:
7.6 Bildebehandling – Alt som har med selve bildebehandlingen å gjøre. Dette innebærer en
introduksjon i bildebehandling, detaljerte beskrivelser av kameraet, hvordan vi laget
programmet for innhenting av informasjon om objektene som skal gjenkjennes og hvordan vi
kalibrerte programmet slik at vi får ut korrekt informasjon i millimeter som alt skal mates inn
i programmet som sorterer informasjonen og mater den til Mikrokontrolleren.
7.7 Labview – Alt som har med sortering av informasjon fra bildebehandlingen å gjøre,
inkludert å konvertere data fra reelle mål (mm) til noe som motorene kan lese (step), og til
slutt sende denne informasjonen til
8
Hovedprosjekt
7.2
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
STAT IVET
7.2.1 Innledning
Siden vi skal bruke et kamera for å identifisere objekter i vårt prosjekt, var det et behov for å
oppnå homogene lysforhold. Dette løste vi ved å konstruere et stativ med justerbare fester for
fire halogenlamper ordnet rundt et sentrert kamera.
Stativet vårt har 2 deler, del 1 som er fastmontert i testjigg platen på 2 punkter og del 2 som er
festet i midten av hoveddelen.
Figur.2: Oversikt over systemet
Vi valgte et kryssformet oppsett for best belysning søkeområdet for kameraet på objektene og
sette dette diagonalt over testjiggen. Krysstativet vil kunne bli justert opp og ned med en
stålstang som kan settes fast i den posisjonen vi vil ha stativet i.
Med tanke på hvor liten vekt som skal holdes oppe av krysstativet og at delene som vi brukte
var med overlegg overdimensjonerte bestemte vi oss for å ikke gjøre noen styrkeberegninger.
Hvis dette hadde vært en konstruksjon som skulle ha blitt produsert flere ganger ville vi ha
tatt hensyn til dimensjonering av konstruksjonen med tanke på materialvalg og tykkelse,
dermed også styrkeberegnet på dette.
9
Hovedprosjekt
7.2.2
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
PLANLEGGING AV STATIVET
Vi valgte å bruke Aluminium p.g.a. vekt framfor stål, dermed var det begrenset for hvordan vi
kunne sette sammen dette stativet siden aluminium er relativt vanskelig å sveise på.
Vi kom frem til at vi måtte skru stativet sammen, dermed var det også lettere å demontere det
hvis vi trengte dette.
Stativstolpene som ble valgt var solide i kvadrat profil og den horisontale stativstolpen på
toppen valgte vi å ha firkantet for mest stabilitet for stangen til krysstativet under.
Siden verkstedet hadde begrenset med materialer var det beste vi fant, en hul, rektangulær
bjelke minus en vegg som vi brukte.
Stativstangen var den komponenten som vi måtte bruke i stål, dette var forholdsvis greit siden
vi skulle skru en bolt opp igjennom den. Krysstativet skulle skrues sammen av to firkantet
rektangulære plater. Siden det ikke er noe særlig vekt på stativet valgte vi dette istedenfor en
eventuell L profil. Vi valgte også å ikke styrkeberegne på stativet på dette grunnlaget.
Vi fant ikke akkurat ut så mange måter som vi kunne feste spotene på en måte som kunne
være repeterbar, så vi valgte den eneste som var best på alle måter.
Det var en kuleledd versjon, slik at vi kunne justere spottlyset i alle retninger. Denne metoden
er ikke helt repeterbar i seg selv, så måten vi valgte å gjøre dette på var at vi stilte inn lysene
mot midten av plattformen og hadde ett ark og en spiker der. Så slo vi på en spot av gangen
og tegnet av skyggen til spikeren. Når vi da var ferdig hadde vi ett ark med innstillingene for
et repeterbart forsøk.(fig)
Figur.3: Skyggeinnstilling av en spot
Figur.4: Skyggeinnstilling av 2 spotter
Kamerafestet tenkte vi å lage på den samme innfestings måte som kameraet hadde fra før av,
en innskyvbar brakett under kameraet. Den innskyvbare braketten blir da festet i midten av
kryssplatene slik at kameraet står vertikalt på plattformen midt i.
Med tanke på ledningene til spotene og kameraet tenkte vi at vi bare skulle tape/stripse disse
fast til konstruksjon der det passet, fordi vi ikke var ute etter et designmessig fin konstruksjon
10
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
men et funksjonelt ett. Vi valgte også å ikke lage tegninger på ledningene siden dette ikke har
noen hensikt sett ifra et designperspektiv og at det vanskelig lar seg gjøre i et program som
SolidWorks.
Stativet ble tegnet i SolidWorks før vi begynte å lage dette, men vi oppdaterte tegningene etter
hvert som vi fant litt andre løsninger på ting grunnet materialvalg o.s.v.
11
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.2.3 STATIVET - SAMMENSETNING
I denne delen skal vi gjennomgå alle de individuelle delene som stativet består av og forklare
hvordan de har blitt festet.
Figur.5
Figur.6
2 stk. Stativstolper (Vedlegg nr 11)
Disse festes vertikalt på treplaten som den kartesiske maskinen står på med 2 skruer av typen
M12. Punkt 1 festes i treplaten, punkt 2 festes til overliggende stativstolpe
Figur.7
Figur.8
1 stk. stativ overliggende stativstolpe (Vedlegg nr 9)
Denne delen festes horisontalt på stativstolpene med 2 M12 skruer
Punkt 1 og 2: Festes til punkt 2 på stativstolper
Punkt 3:
Figur.9
Figur.10
1 stk. Kryssplate stang (Vedlegg nr 10)
Punkt 1: Festes til punkt 3 på overliggende stativstolpe
12
Hovedprosjekt
Figur.11
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Figur.12
2 stk. Kryssplater (Vedlegg nr 4)
Disse festes sammen med en midtbolt i punkt 3 med 90 grader mellom hver.
Punkt 1 og 2: Festes til punkt 1 på vinkelbrakett
Figur.13
Figur.14
4 stk. Vinkelbrakett (Vedlegg nr 2)
Punkt 1: Festes til punkt 1 og 2 på kryssplater
Punkt 2: Festes til
Figur.15
Figur.16
8 stk. Kule stang (Vedlegg nr 5 )
Punkt 1: Festes til punkt 2 på vinkelbrakett.
Punkt 2: Festes til punkt
13
Hovedprosjekt
Gruppe 10
Figur.17
Henrik Juel Fossen og Kristoffer Enerstad
Figur.18
16 stk. Kule feste (Vedlegg nr 6)
Punkt 1: Festes til punkt 2 på kule stang.
Punkt 2: Festes til punkt 1 på
Figur.19
Figur.20
8 stk. Spot-festebrakett (Vedlegg nr 7)
Punkt 1: Festes til punkt 2 på kule feste.
Punkt 2 og 3:
Figur.21
Figur.22
8 stk. Keramisk feste til spotlight (Vedlegg nr 8)
Punkt 1 og 2 festes til punkt 2 og 3 på spot-festebrakett
14
Hovedprosjekt
Gruppe 10
Figur.23
Henrik Juel Fossen og Kristoffer Enerstad
Figur.24
1 stk. Stativ hylse (Vedlegg nr 12)
Punkt 1 og 2: Festes til punkt 3 på overliggende stativstolpe
Punkt 3: Fungerer som en festemekanisme, gjenget. Festes til punkt 4 på
overliggende stativstolpe
Figur.25
1 stk. Festearm (Vedlegg nr 1)
Festes til punkt 3 på stativ hylse, gjenget.
Figur.26
Figur.27
1 stk. Festebrakett til kamera (Vedlegg nr 3)
Delene festes sammen med en 4mm skrue til Colorvis kameraet.
Punkt 1: Festes til resten av stativet.
Punkt 2: Festes til kameraet ved å surres inn med gjengetape og så presses inn på en
spesiell avhuling på plastikk hylsen til kameraet.
15
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Stativstolpene ble kuttet til i 65cm lende og var 3x3 cm
Vi fant et passe formet aluminium stykke som vi tilpasset lengden til de to stativ stolpene.
Dermed felte vi inn det overliggende stykket og festet den til stativstolpene med to 10mm
bolter. Vi boret hull i midten av den overliggende platen og førte stangen til krysstativet ned
gjennom den.
Så lagde vi en festebrakett som strammet stativ stangen i den posisjonen vi ville ha den i,
dette med en 10 mm bolt. Så lagde vi krysstativet av to 40cm lange plate biter og boret opp
hull til stangen og spot holderne.
For å feste stangen til krysstativet tok vi og boret ett hull gjennom stangen og gjenget det opp
for så å skru en 10 mm bolt igjennom.
Kameraet ble festet til krysstativet ved å lage en brakett som holdt kameraet i en ubevegelig
stilling. Braketten bestod av 2 deler, den ble så festet i den samme bolten som krysstativet og
stativ stangen, slik at kameraet ble i midten av alle spotene.
Spotholderne ble lagd ved at de ble kuleleddet slik at de kunne beveges i alle retninger, men
det ble ikke repeterbart på denne måten så valgte etter samtale med veileder å stille inn lysene
etter skygge mønster. Dette gjøres ved at hvert lys stilles inn for seg selv ved å ha ett ark med
en skrue på og så stille inn lyset etter hvor skyggen er merket av fra forrige gang.
Selve spotholderen og strømlederne ble kjøpt inn fra Biltema, som vi deretter demonterte og
brukte komponentene. Dette gjorde vi for å spare både tid og penger.
Resten av delene til justering av spot kom fra et loddestativ og aluminiums biter vi lagde selv.
Spotfestet:
For at lysene kunne stilles inn ett og ett, lagde vi 4 brytere i en
boks ved siden av konstruksjonen. Boksen ble lagd av tre med
4 vegger, topplaten ble skåret ut av en aluminiums plate og
bryterne ble felt ned. Etterpå ble boksen svartlakkert for et
penere design.
Figur.28: Spotfestet
Bryterboksen:
Stativet ble så justert inn til arbeidshøyden for kameraet og
testet ut med tanke på stabilitet på krysstativet. Etter dette
konkluderte vi med at stativet var bra utformet og kan lett
repeteres på høyde og spotvinkling.
Det endelige stativet ble seendes slik ut:
Fig 29: Bryterboksen
16
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.2.4 Strømkilde for halogenpærene
Vi hadde litt problemer med å finne strømkilde til halogenpærene fordi de trengte så mye
strøm.
Vi hadde 4 stk 35 w halogenpærer på 12 v, disse trakk da
4*(35w/12v)= 11.6667 A
Vi prøvde å bruke strømforsyninger til pc som skulle gi 12v ut og 8A per strømforsyning, da
måtte vi bruke 2 stk. Men ved målinger på spenning og strøm ut fant vi at de leverte ikke det
som sto på dem. 5 og 7 volt ble målt på de strømforsyningene som vi fant, dette var for lite!
Vi kjøpte derfor en transformator for spotbelysning fra biltema som skulle levere 150w 12v
ut. Det var akkurat nok siden vi trengte 4*35W = 140 W
Ved oppkobling og lystesting leverte den faktisk mer spenning (ca 17 volt) og mindre strøm
(ca 2 ampere) enn oppgitt. Men dette gjorde ikke så mye bare spenningen og strømmen var
stabil, pærene tålte også denne høyere spenningen.
Et problem som oppstod da var at vi skulle bruke 12v pærer var på grunn av 50hz på
vekselspenningen og transformatoren ga ut vekselstrøm istedenfor likestrøm som vi ble
fortalt.
Vi fikk tak i en likeretter og kondensator til å lage likestrøm ut av vekselstrømmen, men dette
fungerte ikke så bra pga den mengden med strøm vi hadde gjennom likeretteren. Den ble
altfor varm selv om vi hadde en stor kjøleribbe på, slik at den senket spenningen på pærene
etter hvor lenge den sto på.
Et slikt system kunne vi da ikke bruke på grunn av at vi aldri vil få lik spenning på pærene
under et forsøk og meningen med testjiggen er å gjøre forsøkene repeterbare, så vi valgte å se
bort fra denne løsningen på problemet.
Med veiledning fra veileder valgte vi derfor å ikke bry oss om 50hz på strømsignalet som
lagde striper på skjermen fra kameraet. Etter litt bildeanalyse fant vi også ut at den kan lett
filtreres bort fra objektene som skal identifiseres, og dermed ikke gi noen forstyrrelse.
Figur.30: Transformatoren til spotene
17
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.2.5 Koblingskjema over spotlight og transformator
Figur.31: Koblingskjema for spotlights/Transformator
18
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.3 ELEKTROMAGNETEN
En elektromagnet består av en isolert metallisk leder
viklet rundt en kjerne av jern. Det genereres et
magnetisk felt i og rundt kjernen når det ledes strøm
gjennom viklingen. Når strømmen slås av forsvinner
magnetismen.
Her ser vi et eksempel på hvor enkelt det er å lage en
elektromagnet, en spiker, et batteri, ledninger og en
switch for å slå av og på strømmen er alt som trengs
for å lage en elektromagnet.
.
Figur.32: Elektromagnet
Siden vårt system skal løfte opp de forskjellige objektene en etter en og sortere dem etter form
og farge falt det naturlig å velge å bruke en elektromagnet for å plukke opp og slippe
objektene. Dette skal styres av program i Labview sammenordnet med bevegelsen til
plattformen via mikrokontrolleren.
Vi fant en elektromagnet på laben på skolen og valgte å bruke denne i stedet for a konstruere
vår egen for å spare tid. (fig.33)
Figur.33: Elektromagnet
Vi prøvde både 12 og 5 volt, og fant så ut at ved 5V og 20A likestrøm var magneten sterk nok
til å løfte opp et av våre test objekter. Vi valgte også å bruke denne strømstyrken så ikke
magneten ble så sterk at den ville ta med seg alle objektene på plattformen.
Denne vil da få strøm fra en pc strømforsyning.
19
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Elektromagnetens funksjon skal egentlig bare være å slå seg på når plattformen er i posisjon
med objektet under magneten, og slår seg av når objektet er over oppsamlingskurven.
Veroboardet for elektromagneten bestod av en transistor som slår av og på elektromagneten
når den får signal inn fra mikrokontrolleren. (Fig nr)
Figur.34: Veroboard oversikt
Elektromagneten blir styrt av/på via mikro kontrolleren gjennom output porten. (Fig nr)
Figur.35: Koblingskjema for elektromagnet
20
Hovedprosjekt
7.4
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
KARTESISK MASKIN
Vi har et bevegelig element i vårt hovedprosjekt og det er også hoved-delen, nemlig den
kartesiske roboten. Maskinen har vi overtatt fra tidligere hovedprosjekter men modifisert for å
passe våre behov.
Figur.36: Oversiktsbilde over kartesisk maskin
Som illustrert består maskinen av 2 deler: stepp motorene og aluminiumsrammen, vi vil her gi
en detaljert beskrivelse av begge.
7.4.1 Aluminiums rammen
Bordet har blitt konstruert utelukkende i aluminium for å begrense vekt til et minimum, det er
relativt stivt og kompakt. Rammen er bygd opp av diverse aluminiums bjelker som er festet
sammen med skruer, skiver og muttere. Rammen selv er så festet til en solid treplate og festet
med skruer. Vi innså tidlig at vi måtte modifisere selve oppsettet av bordet, så vi har snudd
hele den kartesiske maskinen 90 grader for å få plass til alle våre modifikasjoner. Vi brukte en
elektrisk skrutrekker til å bore skruene inn i treplaten.
Øverst på konstruksjonen finner vi platen vi platen vi skal bruke som måleområde for vårt
vision system. Vi måtte modifisere den ved å forflytte platen for å utvide bevegelses området
til den kartesiske maskinen i forhold til elektromagneten.(se side blabla).
Virkemåten til den kartesiske maskinen er relativt simpel: To Stepmotorer driver to lange
skruer som hver er festet i sin respektive ende av rammen, den bevegelige delen av maskinen
er festet til skruene via gjengede hull og til rammen med hjul for å unngå unødig friksjon. Når
motorene er i gang følger delene den naturlige rotasjonen til skruene, i enten negativ eller
positiv retning.
Skruene består av rustfritt stål og har en stigning på 12,7mm / omdreining. (vedlegg skruer)
21
Hovedprosjekt
7.4.2
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Stepmotorene
En stepmotor er en børsteløs synkron, elektrisk motor som kan dele opp en full rotasjon inn i
mange små steg. På denne måten kan motoren kjøres på en presis måte, for eksempel til en
bestemt vinkel.
Stepmotorer fungerer på en annen måte enn andre
elektriske motorer som simpelthen roterer når en
elektrisk spenning tilføres terminalene. I
motsetning har stepmotorer flere elektromagneter
med ”tenner” som er arrangert rundt et sentralt
metall gir. For å få motoren til å dreie får først en
av magnetene tilført strøm som gjør at girets
tenner tiltrekkes elektromagnetens tenner, og
retter seg mot dem.
Figur.37: Stepmotor virkemåte
Så skrus den første magneten av og den andre på,
slik at giret roterer 3.6 grader som følge av den
magnetiske tiltrekningen og tennene justerer seg
etter den nye magneten. Denne prosessen gjentas
så mange ganger veldig hurtig slik at motoren kan
rotere ved ulike hastigheter.
Figur.38: Stepmotor virkemåte
22
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Stepmotorene vi har brukt i vårt prosjekt er av typen RS 440-464, også kalt hybridmotorer.
(Vedlegg nr )
Det maksimale pulstallet til motoren er 5670 per sekund.
5670 pulser / 4 magneter = 1417,5 pulser/s
1 step for hver puls -> 360 / 1,8 grader for hver step = 200 step for full rotasjon
1417,5 / 200 = 7,08 omdreininger/s
7,08omdr/s * 12,7mm/omdr = 90mm/s
Dette gir vår kartesiske maskin en maksimal hastighet på 90 mm/s
23
Hovedprosjekt
7.5
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
OPPKOBLING AV MIKROKONTROLLER
7.5.1 Beskrivelse av mikrokontrolleren.
Smartstep/3 mikrokontrolleren er en programmerbar datamaskin spesielt designet for å drive 3
uavhengige akser, integrert med en strømforsyning og 3 små bipolare stepp motorer som en
enkelt, kompakt enhet. Driver enhetene forsyner 2 ampere per fase ved 40 volt i halvstepp
modus, noe som gjør systemet passende for mange ulike stepp motorer. Smartstep bruker
programmeringsspråket MINT. Smartstep/3 krever en enslig strømkilde på 28 volt
vekselstrøm eller 40 volt likestrøm ved 3 ampere.
24
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.5.2 Mikrokontrolleren - Komponenter
Følgende er en beskrivelse av de ulike delene av mikrokontrolleren, illustrert i bildet under.
Figur.39:
Oversikt over portene på mikrokontrolleren
Vi skal her bare ta for oss delene som er relevante for vår oppgave, delene 7, 8, 9, 10, 11 og
GND.
Del 7:
Kontakter for å tilkoble stepmotor,
denne delen representerer akse 0
Figur.40
Del 8:
Også kontakter for tilkobling av stepp motor,
denne delen representerer akse 1
25
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Figur.41
Del 9:
Den siste delen for tilkobling av stepmotor.
Håndterer akse 2, men siden vi i vår oppgave bare bruker 2 akser,
bruker vi ikke denne delen.
Figur.42
Del 10: Limit inputs
Denne delen krever en mer utdypende forklaring. Siden vår maskin opererer innen
fysiske restriksjoner som begrenser dens bevegelse og mikrokontrolleren selv ikke
er klar over disse restriksjonene, må man gjøre kontrolleren bevisst overfor dem.
Det kan man gjøre ved å benytte kontakter på mikrokontrolleren spesialdesignet
for dette formålet, limit0 (akse 0), limit1 (akse 1) og limit2 (akse 2). Disse
kontaktene er designet slik at hvis ikke jordet, vil de bryte strømmen som går til
sin respektive akse, det vil si stepmotoren koblet til akse kontaktene og stoppe den.
Figur.43
Del 11: Home inputs
3 home kontakter, en for hver akse. Akkurat som limit kontaktene krever disse
normalt kontakt med jord for å fungere. Men ulik limit kontaktene trenger de ikke
å være koblet opp mot jord hvis de ikke er i bruk.
Figur.44
Del 12: GND
GND er bare en forkortelse for ground, som er jord på engelsk, som enkelt
forklart bare er en felles retur punkt som holder 0 volt for referanse kretsene.
Figur.45
26
Hovedprosjekt
7.5.3
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Stepmotor oppkobling
I vår oppgave har vi brukt 2 stepp motorer med 8 ledninger eller coiler hver. Vi har tvunnet 2
av coilene sammen for hver fase, dermed har strømmen muligheten til å bli drevet i begge
retninger ved å bruke 2 drivere per fase. Vi har benyttet aksene 1 og 2 som vist på figur 46.
Figur.46
Med de to coilene koblet i parallell får man effektivt en enslig coil med 2 ganger så stor
lednings evne, noe som gjør at strømmen kan etablere seg i vindingene mye raskere ved en
fast spenning enn med en enslig kobling. Dreiemomentet som blir generert er mindre enn hvis
man skulle for eksempel ha koblet opp coilene i serie, men den parallelle metoden gjør at man
har en høyere terskel for strømmen som gjør at man kan øke denne og dermed også øke
dreiemomentet.
27
Hovedprosjekt
7.5.4
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Oppkobling av endebrytere
Tre home kontakter er tilgjengelige, en for hver akse. Disse bryterne krever lukkede brytere
for normal operasjon men trenger ikke å gjordes hvis de ikke er i bruk.
Bildet under viser to kretser som representerer akse 1 og 2 på vår mikrokontroller. Den går fra
jord, over 2 trykk brytere og til slutt kontakt for limit bryter for akse 0. På denne måten er
Home 1 og Home 2 i utgangspunktet jordet. Formålet med dette er enkelt nok: Vi skal benytte
brytere for å finne et nullpunkt. Når den kartesiske maskinen trigger bryterne vil det sende et
signal til mint programmet på mikrokontrolleren ved hjelp av et nøkkelord BACKOFF som
forteller maskinen at den skal rygge til den ikke lenger berører kontaktene og så stoppe.
Figur.47: Koblingskjema home brytere
Figur.48: Oppkobling av home brytere til mikrokontroller
28
Hovedprosjekt
7.6
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
BILDEBEHANDLING
7.6.1 Introduksjon
Figur.49: Bildeskanning
Maskinell bildebehandling, eller på engelsk Machine Vision er bruken
av datamaskin basert bildebehandling i industrielle prosesser. Denne
prosessen krever som oftest digitale I/O enheter og data nettverk for å
kontrollere fysiske produksjonsenheter som for eksempel robotiske
armer.
Maskinell bildebehandling er et felt innen ingeniør yrket som omfatter
data vitenskap, optikk, mekanikk og industriell automasjon. Et vanlig
bruksområde er inspeksjonen av fabrikkerte varer som kretskort, biler,
mat og legemidler. Akkurat som mennesker inspiserer varer på et
produksjonsbånd inspiserer maskinell bildebehandlings enheter varer
ved hjelp av digitale kameraer og programvare.
I vårt prosjekt skal vi som nevnt bruke et webkamera til å identifisere ulike objekter for så å
sortere disse individuelt. For å få til dette må vi ta i bruk et bildebehandlingsprogram som
heter Vision assistant for å håndtere den første delen av vårt maskinstyrings program, nemlig
behandling av bilder fra webkameraet og distribusjon av informasjonen hentet fra dem.
Vision Assistant 8.0 – Introduksjon
Vision Assistant 8.0 er et konfigurerbart bildebehandlingsprogram fra
National Instruments som ikke krever programmering av noe slag, man
simpelthen gjør en rekke valg som deretter kan gjøres om til en type kode
vi kan bruke til å integrere bildebehandlingen med resten av vårt
maskinstyringsprogram.
Figur.50: Vision
29
Hovedprosjekt
7.6.2
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Kamera
Kameraet som brukes til objekt identifisering er et webkamera med en oppløsning på 1.3
megapixler. Vi har valgt å bruke webkamera fremfor alt fordi det er et veldig økonomisk
alternativ til dyre profesjonelle kameraer. Det er også relativt enkelt å tilkoble og installere.
Kameraet må levere jevne og balanserte bilder med hensyn på lys og fargeforhold, derfor er
det blitt lagd stor vekt på god og uniform belysning av bildeområdet.
Med god belysning ville vi få færre markante skygger og marginal forstyrrelse i bildet
Kameraet skal kunne/må ha:
• God oppløsning - Få med alle konturer og former på objektene.
• God fargebalanse - Gjengi fargene korrekt.
Slik ser kameraet ut:
Figur.51: Colorvis USB kamera 1.3 mp
Vi måtte bruke ett annet kamera enn Colorvis USB kamera 1,3 mp på grunn av det hadde så
stor lyssensitivitet at spotene våre blendet kameraet. Derfor fikk vi ett nytt kamera av typen
Silvercrest.
Figur.52: Silvercrest USB kamera 1.3 mp
30
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.6.3 Objektidentifisering
Når stativet kom på plass og strømforsyning for halogenpærene var funnet en løsning på
kunne vi gå i gang med objektidentifiseringen. Den besto av form og farge gjenkjennelse.
Vi stilte inn spotene slik at det ble best belysning for objektene og tok testbildet.
Det er to måter å gjøre dette på:
7.6.3.1 Metode 1:
Objektidentifiseringen er delt inn i to:
1. Form identifisering
2. Farge identifisering
1. Først begynte vi med å lage et farge detekterings filter. Vi bestemte å bruke to farger, rød
og blå på hvitt underlag for å få best mulig resultat.
Fargedetekteringen ble lagd slik:
Original image → Copy 1 → Color threshold 1 → Remove small objects 1 →
Particle Analysis 1 → Retrive copy 1 → Color threshold 2 → Remove small objects 2 →
Particle Analysis 2
Figur.53: Objektidentifisering 1
Bildet blir tatt med USB kameraet og inn i Vision, det blir lagret som original image.
Eksempel på Original image:
Figur.54: Objektidentifisering bilde
Så blir det lagret en kopi av original image slik at vi kan hente det frem senere.
For å finne fargenes posisjon må de filtreres hver for seg.
”Color Threshold” filtrerer hvilke farger de skal detektere, en for rød og en for blå.
31
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
For Rød fikk vi følgene verdier:
• Red -min 0
-max 59
• Green -min 0
-max 9
• Blue -min 0
-max 31
For Blå fikk vi følgene verdier:
• Red -min 0
-max 24
• Green -min 0
-max 142
• Blue -min 0
-max 107
Etter å ha brukt Color threshold får vi bare objektet som har enten rød eller blå farge opp på
skjermen.
For hver farge må original bildet hentes frem slik at bildet som analyseres, er det samme for
hver farge.
Når man filtrer bort farger/objekter kan man få prikker og objekter som ikke man vil ha i
bildet.
Disse fjernes med Adv. Morphology Setup → remove small objekts som har en funksjon som
fjerner/filtrer bort små eller store objekter.
Etter hver operasjon som gjøres med bildet, blir det lagret som add copy(n) som man senere
kan hente frem som retrive copy(n) for nye operasjoner.
Etter å ha gjort de blå og røde objektene så klare som mulig, ble hvert av bildene av rød og blå
detektering funnet koordinatene til. Particle Analysis ble brukt for å finne senter koordinatene
til objektene, og måtte gjøres med hver av fargene på objektene.
Slik ble front diagrammet til dette seende ut, med koordinatene til objektene:
Figur.55: Objektidentifisering frontpanel
32
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Når dette var gjort ble denne lagret som en Labview VI blokk diagram.
Denne VI’en bestod av en imageinput og ”filtrene” som bestemmer hva som skal gjøres med
objektene i bildet som kommer inn.
Fig ? : Dette viser hvordan labview blokk diagrammet ser ut etter å ha brukt vision
Figur.56: Objektidentifisering subVI
2. Så begynte vi på å lage et form detekterings filter, en for runde og en for firkantet objekter.
Vi besluttet å bare bruke to typer objekter for å gjøre oppgaven gjennomførbar.
Bildet blir tatt med USB kameraet og inn i Vision, slik var prosessen for dette:
Original image → Color plane extraction → Pattern matching 1 → Pattern matching 2
Figur.57: Objektidentifisering
Bildet kom inn som et original image, så ble bildet konvertert til 8 bits bilde ved hjelp av
”color plane extraction”.
Dermed brukte vi ”pattern matching” først på de runde objektene. Og så etterpå på firkant
objektene.
”Pattern matching” fungerte slik at vi brukte en template ( bilde av objektet) for å
sammenligne med objektene som lå på plattformen.
Vi måtte ha en template for runde og en for firkantet objekt.
Når den finner de objektene som er like til templaten angir programmet posisjonen til
objektene med koordinater.
Deretter når dette var gjort ble denne prosessen lagret som en Labview VI blokk diagram.
Denne VI’en bestod av en imageinput og ”filtrene” som bestemmer hva som skal gjøres med
objektene i bildet som kommer inn.
33
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.6.3.2 Metode 2:
Objektidentifisering med color pattern matching:
Vi bestemte å bruke to farger og to former, rød og blå på hvitt underlag for å få best mulig
resultat, og firkantet og runde objekter.
Fargede form detekteringsfiltrene ble lagd slik:
Original image → Copy 1 → Color pattern matching 1 → Retrieve copy 1
→ Color pattern matching 2 → Retrieve copy 1 → Color pattern matching 3
→ Retrieve copy 1 → Color pattern matching 4
Figur.58: Objektidentifisering 2
Det ble lagd et ”farge, form filter” for hvert objekt. Rød rund, Rød firkant, Blå rund og blå
firkant. Vi fikk da ut koordinatene til hvert av objektene med tanke på hvilken farge og form
objektet har. På denne måten får vi ut 4 koordinerte strenger med koordinat informasjon.
Når dette var gjort ble det lagd en Labview VI som var veldig enkel å sette inn i hoved VI-èn
som tar selve bilde til identifiseringen.(Fig nr)
Figur.59: Objektidentifisering 2 SubVI
34
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Figur.60: Ferdig VI
Figur.61: Eksempel på at programmet fungerer ved bruk av metode 2, viser koordinatene
til blått rundt objekt
7.6.3.3 Valg av bildegjenkjennelses metode
Ved å kjøre en rask test med et bilde ser vi på fig nr at programmet finner koordinatene til
objektene på plattformen. Dette var med identifiserings metode 2, fordi dette var en metode
som fant koordinatene til objektene som enten var firkantet rød, firkantet blå, rund blå og rund
rød. Hvis vi hadde brukt metode en ville vi fått ut to resultat strenger, form og farge fra
detektering av et enkelt objekt, f.eks rød firkant. Vi måtte ha laget et eget program for å
koordinere sammenføyningen av verdiene fra disse to strengene. Dette er en langt fra effektiv
metode.
35
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.6.4 Bilde kalibrering
Som sagt bruker vi et webkamera for å mate informasjon til vår mikrokontroller, kameraet tar
et bilde som det så sender til en Labview VI utformet ved hjelp av Vision Assistant 8.0. Men
før noen korrekt avlesning kan gjøres må informasjonen i bildet stemme overens med de
faktiske forhold. For å oppnå en rimelig grad av nøyaktighet må vi gi programmet en del
informasjon om de virkelige forhold, dette kalles å kalibrere bildet for lesning av programmet.
(Bilde) Her er det orginale, uendrede bildet vårt. Som nevnt over har programmet ingen
anelse om virkelige mål.
Figur.62: Kalibrering 2
Select a calibration type: Her har vi valgt ”Image calibration” i Vision Assistant 8.0 og har
fått opp 3 valg. Vi velger ”Grid Calibration” fordi man kan skrive ut et koordinatsystem
bestående av prikker og dekke måleområdet med dette, prikkene har en gitt avstand fra
hverandre og ved å definere avstanden mellom dem sett ut ifra kameraets perspektiv får man
de reelle målene.
36
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Figur.63: Kalibrering 3
Load a calibration template: I denne neste delen må vi velge om vi skal bruke en ikkelineær eller en perspektiv template, dette vil si at vi må definere hvilken avstand det er fra
kameraet og til måleområdet. Vi velger her perspektiv måling fordi vårt kamera står relativt
langt fra måleområdet.
Figur.64: Kalibrering 4
Threshold the grid: Her må vi velge terskelen for separering av prikkene fra resten av bildet.
Vi velger å bruke standard innstillingene fordi vårt bilde ikke inneholder nevneverdig mye
informasjon og derfor er lett å behandle.
37
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Figur.65: Kalibrering 5
Define dot spacing: I denne delen kan vi definere ytterpunktene på vårt måleområde og den
virkelige avstanden mellom prikkene på bildet. Vi velger å måle avstanden i millimeter.
Figur.66: Kalibrering 6
Specify a calibration axis: I denne siste delen definerer vi nullpunkt og akse retningene for
vårt måleområde. Vi velger punktet nederst i venstre hjørne av vårt måleområde og setter
vinkelen til 0.
Innstillingene vi har gjort til nå har vært relativt enkle å utføre fordi vårt bilde inneholder
forholdsvis lite informasjon og står vinkelrett i forhold til kameraet. For å fullføre
kalibreringen må vi gjøre noen utregninger for å finne forholdet mellom vikelige koordinater
(mm) og antal step motorene må gå for å tilsvare dette.
38
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.6.5 Millimeter til step konversjon
Vi har nå i Vision Assistant definert hvor mange millimeter i virkelige koordinater bildet som
genereres av webkameraet representerer, nå må vi regne ut hva disse målingene tilsvarer i
step, en enhet som stepmotorene våre opererer med.
For å finne hvor mange step motorene må gå per millimeter i virkeligheten, merket vi først
hvor maskinen stod i utgangspunktet, deretter kjørte vi maskinen 500 step og så målte vi
distansen mellom de to punktene.
Maskinen hadde gått 16,5mm på 500 step, så regnet vi om dette for å finne ut hva vi må
multiplisere resultatene fra vision systemene med for å omgjøre målene til step.
16,5mm per 500 step
16,5/500 = 0,033mm
1 step = 0,033mm
1/0,033 = 1 -> 1mm = 30,303 step
Vi må da gange målingene vi får ut i millimeter med 30,303 for å konvertere dem til step.
39
Hovedprosjekt
7.7
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
MINT PROGRAMMERINGS-DEL
Mint er et programmeringspråk utviklet av Baldor A.S og kom med mikrokontrolleren
Smartstep/3. Det er et programmeringspråk med grunnlag i en BASIC lignende struktur. Vi
skal her gå igjennom vårt mint program for kjøring av den kartesiske maskinen steg for steg.
Selve Mint delen består av to deler, konfigurasjonsfilen og programfilen.
Konfigurasjons delen
AUTO:
AXES[1,2]
Reset[0,1,2]
CONFIG = _stepper , _stepper
SCALE[1,2]= 1,1;
Speed[1,2] = 5000,5000;
ACCEL[1,2] = 20000,20000;
RAMP[1,2] = 5,5;
BACKOFF[2] = 1;
BACKOFF[1] = 1;
HMSPEED[1,2] = 1200, 1200;
Auto – Auto er en funksjon som fungerer på den måten at hver gang maskinen slås på vil den
automatisk kjøre en setup eller programfil.
Axes[1,2] – En funksjon som slår på aksene, i vårt tilfelle akse 1 og 2.
Reset[0,1,2] – Fjerner gamle verdier og variabler fra minnet.
Config = _Stepper, _Stepper – En standard konfigurasjonsfil som inneholder nødvendig
informasjon om inn/ut porter o.s.v.
Scale[1,2] = 1,1 – Scale er en funksjon som bestemmer hvilken tall skala maskinen opererer
med. Vi har valgt 1,1 og opererer dermed med 1000-er.
Speed[1,2] = 5000,5000 – En funksjon som setter en standard fart på maskinens bevegelsser,
altså hvor fort stepmotorene skal spinne.
Accel[1,2] = 20000,20000 – Accel styrer hvor raskt maskinen skal akselerere eller deselerere,
i vårt tilfelle har vi satt denne 4 ganger høyere enn farten fordi vi vil at maskinen skal reagere
raskt når den treffer home bryterne og dermed ikke ødelegge dem.
Ramp[1,2] = 5,5 – Ramp er en funksjon som styrer akselerasjonsprofilen til maskinen, jo
høyere verdi, jo rundere blir profilen og dermed tregere.
Backoff[1,2] = 1 – En funksjon som forteller maskinen at den skal rygge bakover når den
treffer en home switch og stoppe når den ikke lenger berører den. Dette er brukbart når du
bruker brytere fordi systemet hadde bare klikket hvis maskinen simpelthen stopped når den
trigget en home switch.
HMspeed[1,2] = 1200, 1200 – Farten maskinen søker etter endebryterne på.
40
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Programdelen
Dette programmet vil bli referert til i Labview delen, men vi vil kort forklare om noen av
funksjonene.
Commson – Denne funksjonen aktiviserer en beskyttet kommunikasjonskanal som benytter
såkalte comms for å kommunisere med externe programmer, i vårt tilfelle Labview.
Kommunikasjonen skjer via seriell porten på en PC og seriell inngangen på
mikrokontrolleren. Vi bruker comms som en slags handshake, for å få og sende bekreftelse på
at noe har blitt forandret i programmene eller at en rutine har kjørt ferdig.
Auto:
Commson
Home[1] = 0
Home[2] = 0
PAUSE IDLE [1,2]
MoveR[1,2] = 50, 3400;
Go[1,2]
PAUSE IDLE [1,2]
ZERO
Comms(25) = 1
Comms(4)=1
REPEAT
- Starter programmet automatisk
- Slår på beskyttet kommunikasjon
- Søker etter endebryter på akse 1
- Søker etter endebryter på akse 2
- Setter programmet I en kort pause
- Mater koordinater inn I maskinen
- Kjører maskinen etter koordinatene
- Setter programmet I en kort pause
- Setter et nytt datum eller nullpunkt
- Setter Comms 25 lik 1
- Setter comms 4 lik 1
- En løkke som gjentar hva som ligger
på innsiden
IF Comms(5)=1 Then GoSub MoveXY
IF Comms(11)=1 Then GoSub MagnetON
IF Comms(12)=1 Then GoSub MagnetOFF
Until Comms(25)=0
#MoveXY
MoveA[1] = Comms(1)
MoveA[2] = Comms(2)
Go[1,2]
Pause Idle[1,2]
Comms(4) = 0
Comms(5) = 0
Return
#MagnetON
Out1=0
Wait=100
Comms(11)=0
Return
#MagnetOFF
Out1=1
Wait=100
Comms(12)=0
Return
- Subrutine MoveXY
- Flytter akse 1 til Verdi satt av comms 1
- Flytter akse 2 til Verdi satt av comms 2
-
Returnerer til hovedprogrammet
Subrutine MagnetON
Slår på brukerport 1 og dermed magneten
Venter 100 millisekund
Setter Comms 11 like 0
Returnerer til hovedprogrammet
41
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
42
Hovedprosjekt
7.8
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
LABVIEW DEL
7.8.1 En introduksjon
Figur.67: Labview logo
Labview er en forkortelse for “Laboratory Virtual
Inststrumentation Engineering Workbench”. Programmet er en
utviklings plattform for et visuelt programmerings språk fra
National Instruments kalt “G”. Labview var originalt utviklet
for Apple Macintosh i 1986 men har siden spredt seg til å
inkludere en mengde systemer som Windows, UNIX, Linux og
Mac OS. Labview brukes primært for innsamling av
data, instrumentasjons kontroll og industrielle automasjoner.
Den nyeste versjonen 8.20 ble utgitt i 2006.
Programmerings språket som benyttes av Labview kalles bare ”G” og er et språk skreddersydd
for effektiv datastrøm. Utførelse er avhengig av hvordan programmet er strukturert grafisk, i
et såkalt blokkdiagram. Funksjoner avbildes som diverse bokser som kalles VI-er og disse kan
kobles til hverandre ved å strekke linjer mellom dem. Disse linjene bærer med seg variabler
og hver boks kan utføre sin funksjon når den har blitt matet riktige variabler.
Mange ganger har man bruk for å kjøre mange bokser samtidig og til dette er ”G” fullt
kapabel, bygd for å dra nytte av de mange nyvinninger innen prosessorer som multi-tråd
teknologi.
Labview knytter skapelsen av såkalte front
paneler(User interfaces) inn i utviklingen av
program. Som sagt kalles Labview
programmer virtuelle instrumenter eller VI-er
forkortet.
et
Figur 68: Eksempel på en VI. Her genereres en tabell
med 2 variable, sorteres i stigende rekkefølge og så
telles antall elementer i tabellen
Hver VI har tre komponenter: Blokk diagram, front panel og et koblings skjema. Boolske
kontroller og indikatorer på front panelet tillater en operatør å legge inn eller hente data fra en
VI som kjører. Front panelet fungerer også som interface for hele programmet, derfor kan VIen enten kjøres som et individuelt program hvor front panelet tjener som brukerens interface
eller det kan overføres til et annet blokk diagram og fungere som et enkelt ledd i en større
kjede av programmer. Denne grafiske fremgangsmåten gjør at også ikke-programmerere kan
bygge programmer ved simpelthen å dra og slippe og virtuelle representasjoner av lab utstyret
de allerede er kjent med og lage programmer fra dette. Denne enkle fleksibiliteten er en av
grunnene til at Labview har oppnådd den graden av suksess den nyter i dag.
43
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
I denne delen skal vi forklare steg for steg akkurat hva som skjer når bildegjenkjennelses
programmet kjøres.
Men først vil vi gi en gjennomgang av de forskjellige uttrykk og definisjoner som vi
kommer til å bruke i denne gjennomgangen for å utdype akkurat hva programmet gjør og
lettere forstå hva som skal til for å generere resultatene.
Array – I datavitenskap er Array en data struktur som består av en gruppe elementer som
hver har et enkelt navn, og som blir gitt adgang til ved hjelp av et indeks. I de fleste
programspråk består hvert element av den samme typen data og et array opptar en
kontinuerlig mengde plass på lagringsmedia. Array elementer er vanligvis nummererte og
indivuduelle elementer kan gjøres tilgjengelig via deres numeriske posisjon i et array.
Enkelte Array er flerdimensjonale, som betyr at mer enn et index kreves for å få tilgang til
et element. For å si det på en annen måte kan et to-dimensjonalt array ses som to
elementer i et plan som begge har en x og y posisjon, og hvor denne informasjonen kan
nås ved å oppgi disse koordinatene som en index.
I denne delen av rapporten har vi lagt opp et eget system for inndeling av kapitler, alle
henvisninger til kapitler bør ikke forvirres med de kapitlene som er nummerert utenfor denne
delen.
44
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
7.8.2 Labview gjennomgang
Del 1 – Initialisering og innhenting av informasjon
I seksjon (nr) forklarte vi hvordan vi har planlagt, bygd og kalibrert bildebehandlings delen av
prosjektet. Her skal vi i detalj forklare koden som ble generert av Vision Builder 8.0(seksjon
nr) og hvordan vi har koblet den opp mot resten av systemet.
Når vi bygde systemet for oppkobling mot webkamera genererte vi en Labview VI ut av de
forskjellige valgene vi gjorde
I denne første delen av vårt Labview program håndteres alt av initialisering av kamera og
innhenting av informasjon fra bildene som kameraet skal ta. Først initialiseres kameraet, så tar
det et bilde, behandler så bildet og sender til slutt ut informasjonen programmet har funnet ut
ifra bildet. Vi vil ta for oss de forskjellige rutinene hver for seg i detalj.
Figur.69
Del 1.1: Init
Den første delen av seksjon 1 velger og initialiserer USB kameraet, starter en
fotosession og genererer et bilde.
Del 1.2: Bildebehandling
Denne delen er selve bildebehandlingsdelen. Her behandles bildet sent fra del 1. Når
bildet er ferdigbehandlet sendes informasjonen videre til seksjon 2
45
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 1.1
Figur.70
1.1 IMAQ USB enumerate cameras – Lager en array som inneholder en liste over
tilgjengelige USB kameraer funnet i systemet som kan initialiseres.
1.2 Index array – En VI som man bruker til å velge ut et enkelt element fra et array. Her
har vi valgt det første elementet i array generert av IMAQ USB enumerate cameras.
1.3 USB Camera – Viser simpelthen navnet til kameraet på frontpanelet.
1.4 IMAQ USB init – Starter en ny IMAQ session med navnet på USB kameraet vi har
valgt ut med Index array. Viderefører denne informasjonen til den neste VI-en.
1.5 IMAQ USB snap – Tar et enkelt bilde med kameraet vi har valgt og initialisert.
Sender bildet og IMAQ sessionen videre til neste punkt.
1.6 IMAQ USB Close – Stenger IMAQ sessionen som ble åpnet med IMAQ USB Init
1.7 IMAQ Dispose - Fjerner bildet fra minnet for å frigjøre plass til det neste bildet som
skal tas.¨
1.8 Simple error handler – Indikerer om en feil har oppstått i systemet. Hvis en feil har
oppstått returnerer denne VI-en en beskrivelse i en valgfri dialogboks.
1.9 IMAQ Create – Sender informasjon til IMAQ USB snap om å lage en bildefil.
1.10 Bildefilen sendes videre til neste del av programmet.
46
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 1.2
Figur.71
1.2.1 Image – Sender bildeinformasjonen før behandling til et display på frontpanelet.
1.2.2 Identifikasjon av fargede objekter – En VI som vi genererte ved hjelp av Vision
Assistant 8.0 og inneholder en rekke funksjoner som behandler bildet og identifiserer
objekter som vi har spesifisert. Vi skal se nærmere på denne.
1.2.3 Koordinat posisjonene til alle røde firkantede objekter identifisert av VI i steg 10.
1.2.4 Koordinat posisjonene til alle blå firkantede objekter identifisert av VI i steg 10.
1.2.5 Koordinat posisjonene til alle blå runde objekter identifisert av VI i steg 10.
1.2.6 Koordinat posisjonene til alle røde runde objekter identifisert av VI i steg 10.
Vi skal på neste side se nærmere på VI-en i steg 2, ”Identifikasjon av fargede objekter”. I
denne VI-en ligger det fire funksjoner som utgjør bildebehandlingsdelen av vårt
maskinstyringsprogram.
47
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 1.2.2 - Identifikasjon av fargede objekter.VI
Figur.72
1.2.2.1 Image in – Her kommer det uforandrede bildet som ble generert i del 1 inn i VI-en.
1.2.2.2 Image buffer – Denne VI-en legger bildet inn i RAM for å enkelt kunne hente det
tilbake som det var før det ble forandret.
1.2.2.3 IMAQ Create – En VI som forteller den neste VI-en i rekken å generere en mal
(template) for bildegjenkjenning.
1.2.2.4 IMAQ read image and vision info – En VI som leser inn en predefinert mal fil.
1.2.2.5 IMAQ setup match color pattern – Alt av oppsett og innstillinger til VI nummer 6
ligger i denne VI-en.
1.2.2.6 IMAQ Match color pattern – Bildet, VI nr. 4 og 5. blir matet inn i denne VI-en. Den
leter etter en definert mal i bildet og returnerer informasjon om alle objekter i bildet den
gjenkjenner. Denne VI-en har en mal som er definert som røde firkanter, derfor vil den søke
gjennom hele bildet og returnere koordinatene til alle røde firkanter i bildet.
1.2.2.7 IMAQ Dispose – Fjerner mal filen fra minnet etter bruk.
1.2.2.8 Image Buffer – Legger Bildet inn i minne igjen før bildeinformasjonen blir sendt
videre til den neste bildegjenkjennelses funksjonen.
48
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
1.2.2.9 Match offset – En funksjon som forskyver midtpunket av X-Y koordinatene til
gjenkjente objekter. Vi har valgt å ikke bruke denne så verdiene er begge 0.
1.2.2.10 Rød Firkant – Dette er en port ut av Identifikasjon av fargede objekter.VI, her blir
all informasjonen om objektene som ble gjenkjent av IMAQ Match color pattern sent til andre
deler av programmet.
Identifikasjon av fargede objekter.VI består av ytterligere 3 slike kjeder som utgjør en
funksjon, bildeinformasjonen blir sent til hver kjede. De resterende gjenkjenner respektivt
røde rundinger, blå firkanter og blå rundinger og alle er koblet til hver sin utgang
Del 1.2 – fortsatt…
Figur.73
Her er vi tilbake i del 2 igjen. Her kan man se strengene med informasjon som kommer fra de
fire bildegjenkjennelsesfunksjonene bakt inn i 2. Identifikasjon av fargede objekter.VI. Disse
fire strengene inneholder en såkalt array av klaser, det vil si man har en rekke klaser bakt inn
i strengen og disse klasene inneholder selv array-er.
Vi trenger en god måte å hente ut akkurat den informasjonen vi har nytte av, dette vil bli
forklart i den neste delen.
49
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2
Figur.74
Figuren over viser en representasjon av den delen av programmet som sorterer data fra
bildebehandlingsdelen, behandler den og sender de relevante data til mikrokontrolleren for
videre behandling. Her har vi delt opp denne seksjonen i fire deler for å lettere kunne gå inn i
detalj om hver enkelt funksjon som programmet utfører. Hele denne delen er omgitt av en
Stacked structure
2.1: De fire strengene med informasjon fra bildebehandlingsdelen kommer inn her for videre
behandling.
2.2: Data strengen fra punkt I kommer inn og blir sortert via en index og så modifisert for
videreføring til mikrokontroller.
2.3: Data blir sendt til mikrokontroller, slår på magneten, sender til hullet, slår av magneten,
gir ut en konstant til del 2.4.
2.4: Et signal blir sendt fra 2.3 og som setter index et hakk høyere. Prosessen blir så gjentatt.
2.5: Stopper programmet hvis det ikke mottar verdier fra bildebehandlingsdelen.
Hele denne delen av programmet gjentar seg selv 4 ganger , en gang for hver av de 4
inngangs-strengene Rød Firkant, Blå firkant, Blå rund og Rød rund.
50
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.1
Figur.75
Her ser vi de fire strengene som inneholder et array av klaser og den øverste Rød firkant er
koblet til. Grunnen til at ikke alle fire er koblet opp på en gang er fordi vi har benyttet en
Stacked structure og plassert databehandlingsdelen inni denne for å få tilgang til hver av
strengene i tur og orden. Den første strengen vi tar i bruk er den som inneholder informasjon
om røde firkant objekter.
51
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.2
Figur.76
2.2.1 I denne delen kan vi se strengen med informasjon fra ”Rød firkant” helt til venstre.
Strengen inneholder den informasjonen vi trenger men den ligger fremdeles begravd iblant en
hel masse annen informasjon i strengen. Derfor trenger vi en måte å grave ut denne
informasjonen på.
2.2.2 Unbundle.VI - Her ser vi strengen bli matet inn i en funksjon som heter unbundle.VI.
Denne splitter opp all klasene i vår streng og presenterer dem ved deres navn og i tillegg setter
opp koblingspunkt for hver enkelt klase. Den informasjonen vi søker ligger i klasen som heter
”position”. Men det er ikke nok å bare hente ut klasen siden informasjonen vi vil ha ligger
bakt inn i denne.
Derfor bruker vi en lignende funksjon Unbundle by name.VI som henter ut de elementene
som ligger bakt inn i ”Position” klasen. Da får vi ut 2 en dimensjonale array som heter
respektivt X og Y og det er disse vi vil ha tak i, de inneholder koordinatene til objektene som
ble identifisert i bildebehandlingen.
Rundt disse to funksjonene har vi strukket en for loop for å sikre at dataene blir samlet hurtig
nok og alltid er tilgjengelige.
2.2.3 Index array.VI - Siden x-y koordinatene vi skal bruke ligger i to array trenger vi en
funksjon som separerer de enkelte elementene slik at vi kan sende dem videre individuelt.
Derfor har vi brukt Index array, en VI som separerer elementene ved å definere en index. I
utgangspunket er indexen definert som 0 eller det første elementet i en array. Input til index
funksjonene er koblet sammen med del 4 av programmet og vi skal komme tilbake til dette
etterhvert.
2.2.4 Multiply.VI - X-Y verdiene som har blitt generert er målt i millimeter og passer derfor
ikke å bruke som direkte mål for vår mikrokontroller siden vi bruker stepmotorer, vi har
derfor gjort noen utregninger på forholdet mellom millimeter og antall step (seksjon nr.). Vi
52
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
har regnet ut at vi må gange X-Y koordinatene med 30,303 for å konvertere dem fra
millimeter til step.
2.2.5 Add.Vi - Det femte steget i denne delen av programmet legger til en offset målt i step
kalt Xo og Yo. Det er avstanden fra senter av magneten til origo på koordinatsystemet vi satt
opp i kalibreringsdelen (Seksjon nr).
Figur.77: Illustrasjon av forholdet mellom
koordinat systemet og magneten.
Da vil utregningen som utføres av Labview definert av oss se slik ut:
X(mm) * 30,303 = X(Step) + Xo(Step) = X+Xo(step)
Y(mm) * 30,303 = Y(step) + Yo(step) = Y+Yo(step)
Variablene kan forandre seg hele tiden sett ut ifra hvor vi har definert koordinatsystemet og
posisjonen til magneten. For mer informasjon se seksjon nr om kalibrering av systemet.
2.2.6 - De modifiserte X-Y verdiene sendes videre til del 2.3
2.2.7 - Index inngangen på boks 2.2.3 går til del 2.4 og er koblet til boks 2.4…
2.2.8 - Sender ut verdiene til de sorterte X-Y koordinatene til del 2.5
53
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.3
Figur.78
Del 2.3 er spesiell fordi den ligger på innsiden av en stacked loop med hele 6 steg. For å
forklare virkemåten til denne funksjonen går vi gjennom hele sekvensen steg for steg. Det er
denne delen som sender ut de sorterte data til mikrokontrolleren som i tur konverterer disse
verdiene til fysisk handling.
2.3.1 - De modifiserte X-Y verdien kommer inn gjennom en case loop vi har konstruert i del
2.5 for å sjekke om verdiene som kommer inn er høyere enn null, hvis dette ikke er saken
stenges denne delen av programmet ved å sette betingelsen for å kjøre lik false og vår
kartesiske robot vil ikke flytte på seg unødig.
2.3.2 MovXY.VI – Dette er en VI som vi har lagd for å mate koordinater inn på
mikrokontrolleren via serial porten. Vi skal se nærmere på denne VI-en.
54
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.3.2 – MovXY.VI
Figur.79
2.3.2.1 – Dette er inngangene hvor X-Y koordinatene blir matet inn i VI-en.
2.3.2..2 Number to decimal string.VI - Siden strengen med tall-data inneholder desimaltall
og i tillegg ikke er i riktig format må vi konvertere disse til et passende format. Denne VI-en
har 3 tilkoblingspunkt: Number, Width og Decimal integer string. Number er hvor
desimaltallet vårt kobles til, width er den definerbare bredden på strengen som kommer ut av
Decimal integer string kontakten. Under kan vi se et skjema over virkemåten til denne VI-en.
number width
4.6
2
3.0
4
–311
3
decimal integer
string
_5
Desimaltall blir rundet av til heltall
Hvis bredden er lengre enn nødvendig blir det lagt til
_ _ _3
mellomrom til venstre for tallet
Hvis bredden er utilstrekkelig vil stringer bli så stor som
–311
nødvendig.
Figur.80
2.3.2.3 Wait until next ms multiple.VI – Denne VI-en kontrollerer hvor fort hver syklus I
programmet skal kjøres, altså skal det ta 50 millisekunder før en syklus har kjørt ferdig ifølge
våre innstillinger.
55
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
2.3.2.4 - Skriv box
En VI laget av Morten Ottestad, dens funksjon er å konvertere et tall til en Xmit string som
kan leses av mint programmet på mikrokontrolleren, definere hvilken postboks på
mikrokontrolleren å skrive dette tallet til og så sende tallet ut på serial porten.
Figur.81
2.3.2.4.1 – Her legges alle innstillinger til serial porten inn i en VI som kalles VISA configure
serial port. Denne informasjonen blir så matet i en streng til del 2.3.2.4.5. Vi har her valgt:
Com port = 1 , Baudrate = 9600, Data bits = 8.
2.3.2.4.2 – Denne delen av programmet sjekker hvilken postboks som er satt, hvis tallet er
under 9 legger den til en 0 til venstre for tallet.
2.3.2.4.3 – Her genereres og legges til de korrekte verdiene til strengen slik at Labview.
2.3.2.4.4 - Her genereres og legges til de korrekte verdiene til strengen slik at Labview.
2.3.2.4.5 – Konfigurasjons informasjonen fra del 2.3.2.4.1 blir matet inn her, sammen med
strengen som inneholder vår modifiserte koordinat og blir så lagt ut på seriell porten for å
føres til mikrokontrolleren og mint programmet som kjører på den.
56
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
2.3.2 - MovXY.VI fortsatt…
Figur.82
Her er vi tilbake i MovXY igjen og vi kan se at dataene som blir sendt inn blir ført ut via
seriell porten. Nå har vi satt Comms(1) lik X-koordinatene og Comms(2) lik Y-koordinatene
på mikrokontrolleren, disse verdiene vil forbli gjeldende helt til vi forandrer dem. Nå trenger
vi å sende et signal til mikrokontrolleren om å starte en egenkomponert subrutine som bruker
koordinat informasjonen og kjører den kartesiske maskinen til disse koordinatene.
Figur.83
I denne neste sekvensen setter vi Comms(5) lik 1 med boks 2.3.2.4.6. Dette vil kjøre en
subrutine på mikrokontrollerens mintprogram som kjører den kartesiske maskinen til
koordinatene som ble forsynt av kameraet og bildebehandlingsprogrammet.
Vi har satt inn en Wait until next ms multiple i 2.3.2.4.7 for å forsikre oss om at de to
programmene forblir samkjørte.
57
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
2.3.2 - MovXY.VI fortsatt…
Figur.84
2.3.2.4.8 les boks.Vi – En VI skrevet av Morten Ottestad som leser verdier angitt av
mikrokontrolleren. Denne har vi satt til å lese Comms(4) fordi nå subrutinen MoveXY er
ferdigkjørt skal comms(4) settes lik 0.
2.3.2.4.9 Decimal string to number.VI – Konverterer de numeriske karakterene i en streng
til desimaltall etter en gitt offset.
string
offset default offset past number number
13ax
0
0
2
13
–4.8bcde conversion 0
0
2
–4
a49b
0
–9
0
–9
Figur.85
2.3.2.4.10 Equal?.VI – Equal er en funksjon som sammenligner verdier mot verdien som er
spesifisert konstant, i dette tilfellet tallet 1. Hvis verdien som kommer inn er lik 1 vil
funksjonen returnere true, hvis dette ikke er tilfellet vil den returnere false. Siden vi har satt
comms(4) lik 0 og dette har blitt lest av 2.3.2.4.8 og ført inn i systemet vil nå equal
funksjonen returnere false til stopp bryteren som hører til while løkken rundt programmet. Da
denne har blitt satt til å stoppe hvis den mottar et false signal fra Equal funksjonen vil denne
delen av programmet stoppe og gå videre til neste steg…
2.3.2.4.11 Wait until next ms multiple.VI – Løkken bruker 100 millisekunder på å kjøre
ferdig som definert av denne funksjonen
58
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
2.3.2 - MovXY.VI fortsatt…
Figur.86
2.3.2.4.12 – Skriv boks.VI – Denne skriver verdien 0 til comms(5) for å forsikre om at mint
programmet ikke skal hoppe inn på subrutinen MoveXY igjen.
2.3.2.4.13 Wait until next ms multiple.VI – Løkken bruker 50 millisekunder på å kjøre
ferdig.
Figur.87
2.3.2.4.14 Skriv Boks.VI – Skriver verdien 1 til comms(4) slik at programmet er klart til å
kjøres igjen. Denne verdien ble satt til 0 av subrutinen MoveXY når den var ferdigkjørt.
2.3.2.4.15 Wait until next ms multiple.VI – Løkken bruker 50 millisekunder på å kjøre
ferdig.
59
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.3 fortsatt…
Figur.88
Her er vi tilbake i hovedprogrammet igjen. Siden MovXY.VI er ferdigkjørt vil stack løkken
fortsette til neste punkt…
Figur.89
Dette punktet fungerer simpelthen som en pause i programmet slik at det ikke skal overkjøre
det tregere mint programmet på mikrokontrolleren. Funksjon 2.3.3 er en Wait VI som gjør at
programmet venter i 100 millisekunder før det fortsetter til neste punkt…
60
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.3 fortsatt…
Figur.90
I dette punktet finner vi en enkelt funksjon, 2.3.4 MagOn/Off.VI. Denne har blitt laget for å slå
på magneten og vi skal se nærmere på denne nå.
Del 2.3.4 – MagOn/Off.VI
Figur.91
Figur.92
Her kan vi se et oversiktsbilde over VI-en. Den består av en case løkke som er koblet til en
bryter. Når bryteren er slått på vil den returnere et true signal til løkken og siden som
inneholder funksjon 2.3.4.1 vil stå åpen. Når bryteren er slått av vil den returnere et false
signal og siden som inneholder funksjon 2.3.4.2 vil stå åpen.
I dette tilfellet vil bryteren være slått på og funksjonen 2.3.4.1 vil sette comms(12) lik 1. Dette
vil så sendes til mikrokontrolleren og trigge subrutinen #MagnetON som vil slå på magneten.
61
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.3 fortsatt…
Figur.93
Her er vi tilbake i del 2.3 igjen, nå som 2.3.4 har kjørt ferdig fortsetter vi til neste steg…
Figur.94
2.3.5 MovXY.VI – Funksjonen vi brukte til å sende koordinatene fra bildebehandlingsdelen
med bruker vi også her.
2.3.6 – 2 konstanter som representerer X-Y koordinater. Dette er koordinatene til hullet som
objektet skal slippes ned i. Disse blir matet inn i 2.3.5 MovXY funksjonen og skrives til
mikrokontrolleren.
Nå er objektet posisjonert over hullet som har blitt spesifisert av oss.
62
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Etter MovXY.VI har kjørt ferdig fortsetter programmet til neste steg…
Del 2.3 fortsatt…
Figur.95
2.3.7 MagOn/Off.VI – Funksjonen for å slå av og på magneten. Nå har vi slått bryteren av,
dermed sendes et signal til mikrokontrolleren som slår magneten av.
2.3.8 Wait.VI – Forteller programmet at det skal vente 100 millisekunder før det fortsetter.
Nå ligger objektet i et hull som vi har definert. Vi vil nå at maskinen returnerer til nullpunktet
vi spesifiserte.
Figur.96
2.3.9 – Funksjonen som vi brukte for å frakte objektet til hullet kan vi bruke igjen for å flytte
maskinen tilbake til utgangspunktet.
2.3.10 – 2 konstanter som oppgir X-Y koordinatene til nullpunktet, koblet til MovXY.VI.
63
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Etter MovXY er ferdig å kjøre fortsetter programmet til neste steg…
Del 2.3 fortsatt…
Figur.97
2.3.11 – En konstant som blir sendt til funksjon 2.4.1 i neste del av programmet.
2.3.12 Wait – Ber programmet vente i 100 millisekunder.
Denne delen av programmet vil repetere så lenge hovedprogrammet kjører, eller så lenge det
kommer inn verdier fra bildebehandlingsdelen.
Vi vil nå ta for oss del 2.4 av programmet…
64
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Del 2.4
Figur.98
2.4.1 Equal?.VI – En likhetsfunksjon som returnerer true hvis verdien inn stemmer med hva
som har blitt definert. Her har vi definert tallet 1, og siden vi sendte ut konstanten 1 fra del 2.3
returnerer denne funksjonen true til del 2.4.2.
2.4.2 Select.VI – Denne funksjonen returnerer forskjellige verdier avhengig om den får et true
eller false signal. I vårt tilfelle vil den returnere ved et false signal verdien som ligger lagret i
2.4.3. Hvis den får returnert true vil den legge 1 til verdien lagret i 2.4.3.
Siden vi i vårt tilfelle får returnert true her vil funksjonen lagre tallet 1 i 2.4.3 siden
utgangspunktet var 0.
2.4.3 Feedback node – En funksjon som lagrer verdier gjennom flere iterasjoner av
hovedprogrammet. For oss vil den lagre verdien som definerer index i del 2.1 av programmet.
Del 2.5
Figur.99
Denne delen av programmet sjekker om bildebehandlingsdelen faktisk sender ut informasjon
om gjenkjente objekter, hvis dette ikke er tilfellet vil bare verdien 0 bli sendt ut. Dette vil skje
enten hvis bildebehandlingsprogrammet ikke finner det spesifikke objektet eller hvis alle
objektene har blitt flyttet til hull. I så fall vil ulikhets funksjonen returnere false til
stoppknappen som er koblet til while løkken som omgir hele del 2 av programmet og stoppe
det. Vi skal utdype denne prosessen på neste side.
65
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
Steg 1.
Her ser vi del 2 av vårt program når
det er koblet til strengen som
inneholder informasjonen om de
Røde firkantene i bildet. Når alle
disse verdiene har blitt behandlet vil
verdien 0 returneres til del 2.5 og
while løkken rundt vil stoppe.
Stacked løkken rundt hele denne vil
da fortsette til neste steg…
Figur.100
Steg 2.
Den neste delen inneholder en
ventefunksjon som ber det vente
100 millisekunder.
Figur.101
Steg 3.
I denne delen ser vi nesten det
samme programmet som vi har i
steg 1 med den forskjellen at
koordinatene til hullet er ulike. Vi
har 4 ulike hull med 4 koordinater.
Koordinatene til blå firkanter er
koblet til her og korresponderende
hull koordinater.
Figur.102
Denne prosessen vil gjenta seg for alle de fire strengene med koordinat informasjon helt til
alle objekter har blitt flyttet til sine respektive hull. Når programmet har gått gjennom alle
stegene vil hele prosessen repeteres.
66
Hovedprosjekt
8
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
KONKLUSJON
I løpet av perioden for hovedprosjektet skulle det bygges et stativ for kamera og spotlights,
utvikles et program for identifisering av ulike objekter med varierende farge og form, utvikles
rutiner for styring av den kartesiske plattformen og skrive en utfyllende rapport om dette.
Vi har brukt en god del tid på å kalibrere programmet for ulike innstillinger av blant annet
magneten og kameraet, hver gang disse forskyver seg må det kalibreres på nytt. Vi har hatt en
del problemer med å få vision systemet til å fungere fullstendig, det vil si det har vært en del
problemer med å få programmet til å faktisk gjenkjenne objektene.
Til slutt måtte vi inngå et kompromiss og bruke en forenklet bildebehandlingsdel for å bli
ferdige i tide til presentasjonen, men teorien om bildebehandlingsdelen stemmer, vi fikk
simpelthen ikke nok tid til å kalibrere det fullstendig.
67
Hovedprosjekt
9
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
UTSTYRSLISTE
Utstyret som brukes og er blitt skaffet til prosjektet er:
•
2 unipolare stepp motorer RS 440-464
•
Veroboard
•
Transistor IRF 3415
•
Power supply på 20 V og 5 V
•
Webkamera Silvercrest USB 1.3 mp
•
PC med serial inngang
•
Ledninger i ulike farger og størrelser
•
Mikrokontroller type Smartstep 3 med programmet cTerm
•
Brytere
•
Diverse Aluminiums biter og plater
•
Elektromagnet
•
4mm maskinskruer med muttere
•
8mm maskinskruer med muttere
•
10mm maskinskruer med muttere
•
4 stk Halogenpærer type 12 V, 35W
•
2 stk demonterte loddestativ
•
Rød/Blå/Svart lakk
68
Hovedprosjekt
Gruppe 10
Henrik Juel Fossen og Kristoffer Enerstad
10. Kilder
•
•
•
•
•
•
•
•
•
•
www.ni.com
www.rsonline.no
www.me.utexas.edu (basic vision)
www.biltema.no
www.elfa.se
www.baldor.com
www.Wikipedia.com
www.electronicproducts.com
Optimised Controll (instruksjonsmanualen til mikrokontrolleren)
Notater fra Morten Ottestad sine forelesninger og lab oppgaver
69