ELE610 Prosjekter i robotteknikk, vår 2016.



Like dokumenter
ELE610 Prosjekter i robotteknikk, høst 2018.

ELE610 Prosjekter i robotteknikk, vår 2017.

ELE610 Prosjekter i robotteknikk, vår 2018.

ELE610 Prosjekter i robotteknikk, vår 2015.

ELE610 Prosjekter i robotteknikk, vår 2015.

Straffespark Introduksjon Scratch Lærerveiledning

Skilpaddefraktaler Erfaren Python PDF

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

ELE610 Prosjekter i robotteknikk, høst 2017.

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Shellscripting I. Innhold

Kanter, kanter, mange mangekanter

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Utførelse av programmer, metoder og synlighet av variabler i JSP

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

3. Introduksjon til prosjektet Hringr. Scratch fra scratch Enkel programmering for nybegynnere

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Klask-en-Muldvarp. Steg 1: Gjøre klart spillbrettet. Sjekkliste. Introduksjon

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Skilpadder hele veien ned

Sprettball Erfaren ComputerCraft PDF

Asteroids. Oversikt over prosjektet. Steg 1: Enda et flyvende romskip. Plan. Sjekkliste. Introduksjon

Kapittel og 5. september Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 4.

Bygg et Hus. Introduksjon. Steg 1: Prøv selv først. Skrevet av: Geir Arne Hjelle

MIK 200 Anvendt signalbehandling, Lab. 5, brytere, lysdioder og logikk.

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Steg for steg. Sånn tar du backup av Macen din

Hvordan lage et sammensatt buevindu med sprosser?

Komme i gang med Skoleportalen

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

1. Programmering: Hva og hvorfor? Scratch fra scratch Enkel programmering for nybegynnere

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Del 1: Overgang fra gammel hjemmeside til ny hjemmeside

Generell informasjon om faget er tilgjengelig fra fagets nettside, og for øvinger brukes canvas. 1 Øving med systemidentifikasjon.

Spøkelsesjakten. Introduksjon

Labyrint Introduksjon Scratch Lærerveiledning. Steg 1: Hvordan styre figurer med piltastene

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Administrasjon av FLT-Sunnhordland Web-side

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

Verden. Steg 1: Vinduet. Introduksjon

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

FTP Info til brukerne

Den grafiske løsningen for dine vaktrunder, brannrunder, HMS runder, inspeksjonsrunder og vedlikeholdsoppgaver

Velkommen som ny bruker av Uni Økonomi!

Enarmet banditt Nybegynner Scratch Lærerveiledning

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

Start et nytt Scratch-prosjekt. Slett kattefiguren, for eksempel ved å høyreklikke på den og velge slett.

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Del 1. Generelle tips

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

Introduksjon til ComputerCraft Introduksjon ComputerCraft PDF

Norgestur. Introduksjon. Steg 1: Et norgeskart. Sjekkliste. Scratch. Skrevet av: Geir Arne Hjelle

Steg 1: Katten og fotballbanen

INF1000 Metoder. Marit Nybakken 16. februar 2004

Endringer etter omlegging til ny AD

Side 1 av 11

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Tegneprogram Journeyman Scratch PDF

Spørsmål og svar om GeoGebra, versjon 2.7 bokmål

Øvingsforelesning i Python (TDT4110)

HØGSKOLEN I SØR-TRØNDELAG

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

FRC-Feeder-E. Et sikkert og raskt verktøy for overføring av data til File Record Converter Versjon 1.9

Hvor i All Verden? Del 2 Erfaren Scratch PDF

Gangemesteren Nybegynner Scratch PDF

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Brukerveiledning for Digifob Pro

Dagens tema: 12 gode råd for en kompilatorskriver

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2014

2009 Thomas Haugland Rudfoss. PowerPoint 2007 En rask introduksjon

MAT1030 Diskret matematikk

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

Steg 1: Hvordan styre figurer med piltastene

PCK Håndterminal. Brukerveiledning

Introduksjon til dataanlegget ved Institutt for informatikk. Marc Bezem Institutt for informatikk Universitetet i Bergen

Hvordan å lage og publisere ditt personlige visittkort

Humanware Companion.

Legg merke til at at over de blå klossene er det flere kategorier av kommandoer i forskjellige farger, for eksempel

Løse reelle problemer

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

DIPS Communicator 6.x. Installasjonsveiledning

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

Start et nytt Scratch-prosjekt. Slett kattefiguren, for eksempel ved å høyreklikke på den og velge slett.

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

GruNot '95. Notatsystem for gruppeterapi. Versjon

Fag ITD Bildebehandling og mønstergjenkjenning. mandag 28. oktober til fredag 15. november 2013

Redd verden. Steg 1: Legg til Ronny og søppelet. Sjekkliste. Introduksjon

Lær å bruke Microsoft Mathematics, Matematikk-tillegget i Word og WordMat. Av Sigbjørn Hals

AirLink 2200 FAQ. Side 2 Side 2 Side 3 Side 4 Side 6 Side 7 Side 8 Side 10 Side 11 Side 12 Side 13 Side 13 Side 14 Side 15 Side 16 Side 18

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Leksjon 3. Kontrollstrukturer

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

Transkript:

Stavanger, 12. januar 2016 Det teknisknaturvitenskapelige fakultet ELE610 Prosjekter i robotteknikk, vår 2016. RobotStudio-del, oppgave 4. Også i denne fjerde RobotStudio oppgaven skal dere etter hvert kjøre programmet på en av de virkelige ABB robotene. Her skal vi sette opp kommunikasjon mellom Matlab og RobotWare, det vil si kontrolleren (ABB roboten), og fra Matlab fortelle roboten hva vi ønsker den skal gjøre. Før der gjør oppgavene på laboratorium E459 skal dere lese om Sikkerhet på robotlab, det er på prosjektside for Industriroboter (ABB) på It s learning, det er lenke til denne sida fra fagets (ELE610) si side i It s learning. Godkjenning foregår ved at dere viser at roboten på E459 gjør det som en ønsker, og leverer rapport med RAPID-kode på It s learning, det er ingenting annet som trenger å være med i rapporten. 4 Styre robot fra Matlab For oversikten sin del er også denne oppgaven delt opp i flere punkt, og vi starter med oversikt over brukte filer. 4.0 Introduksjon I denne oppgaven er det flere filer dere trenger, og noen dere klarer dere uten men som likevel kan være nyttige og gi litt hint om hvordan ting kan gjøres. Eller kanskje bare øke forvirringen? Merk at også mange av disse filene, kanskje i andre versjoner, er tilgjengelige fra andre steder også. En fullstendig oversikt over verktøy og nyttige filer (for ABB robotene) skal finnes på vår prosjektside på It s learning, Industriroboter (ABB). Dette prosjektet inneholder oppdatert (?) informasjon, programvare og programmer om og til robotene i robotcellen på E459. Der er også med en del fra denne øvinga, etter hvert kanskje litt bedre oppdatert, og som skal kunne brukes som startgrunnlag for videre arbeid med robotene, for eksempel prosjekt i faget ELE630. Karl Skretting, Institutt for data- og elektroteknikk (IDE), Universitetet i Stavanger (UiS), 4036 Stavanger. Sentralbord 51 83 10 00. Direkte 51 83 20 16. E-post: karl.skretting@uis.no.

Her er en oversikt over filer: Vi kan i denne øvinga ta utgangspunkt i samme pack-and-go fila som før UiS E459 des15.rspag. TriplePen.rslib, modell av verktøyet. For å tegne figuren som lages i Matlab kan dette verktøyet, eller den enkle pennen brukes. TriplePen.mod, modul med RAPID kode for verktøyet. Kun for del 4.5. abbcom.zip, Pakke fil med flere Matlab funksjoner for kommunikasjon med robot. Merk at av en eller annen grunn virker kommunikasjonen bare for 32 bits Matlab. MatlabCom.mod, en modul med RAPID kode som kan brukes for å utføre kommandoer sendt fra Matlab. Merk at Matlab program som sender kommandoer ikke er laget her. Det er deres oppgave. lab4 bane.m, definerer x-, y-, og z-koordinater for bane som kan overføres til kontroller for å styre roboten. Prinsippet for kommunikasjon. Prinsippet for å styre roboten fra Matlab er ganske enkelt. Matlab kan, via PC SDK, lese verdier fra kontrolleren (RAPID) og skrive til disse. Dette kan også gjøres mens programmet kjøres. Når en fra utsiden går inn og endrer på verdier i et program som kjører er det helt nødvendig at en vet hva en gjør, ellers kan det fort bli feil. Jeg har laget noen Matlab-filer som prøver å forenkle bruk av PC SDK noe. De virker godt når ingenting feil skjer og når det en skal gjøre er med i filene her. I denne første oppgaven er det forhåpentligvis slik. I siste oppgave trenger dere gjerne noe ekstra og må bruke funksjoner direkte i PC SDK. Ta gjerne help for hver enkelt for litt mer informasjon og se koden for detaljer. M-filene er: abbcom abbedit abbmain abbmaster abbnew abbread abbstring abbtext abbwrite Lager en struct som brukes for kommunikasjon med en ABB robot Editerer felt fra ABB RAPID variabel lagert i en struct Script for å teste abb*.m funksjoner og MatlabCom module i RAPID Spør om master-tilgang til en robot Lager en struct med noen felt fra ABB RAPID variabel Leser noen felt fra ABB RAPID variabel til en struct Lar Matlab lage en string av ABB RAPID struct som.stringvalue Lar Matlab lage en text av ABB RAPID struct Skriver struct til ABB RAPID variabel på robot Disse filene er installert på../documents/matlab/common katalogen på PCer på E459. Det kan være en fordel å se på disse filene (og PC SDK) i fred og ro, før dere er på laboratoriet. Pakk derfor gjerne ut filene i deres egen PC og se på de der. Er RobotStudio også installert kan dere finne dokumentasjonen 2

for PC SDK og lese litt på den, i hvert fall for de kommandoer og dataobjekt som er brukt i m-filene. Det er svært omfattende og derfor ikke helt enkelt å få oversikt over, men det er rimelig ryddig organisert. Dokumentasjonen kan finnes ved å skrive PC SDK i søkefeltet under startmenyen i Windows. 4.1 Gå i ring Her skal dere starte med å endre i stasjonen slik at en kan en felles programmodul som kan kjøres på begge robotene. Det er en fordel siden en da kan kjøre programmet på den roboten som er ledig, men også en utfordring siden bord (workobject) er ulikt plassert i forhold til hver enkelt robot, og ikke minst at de gjerne har ulikt verktøy montert. Når en bevegelse til en målpunkt gis i programmet brukes både verktøy og workobject, og her skal vi bruke navn som kan brukes for begge robotene, ttool og wobjbord. Denne programmodulen skal inneholde fire punkt definert 50 mm over bordplata, de kan være i posisjoner (-150,-100), (150,-100), (150,100) og (-150,100). Det skal også være definert to baner, en som går med klokka og en som går mot klokka. For å lage dette i stasjonen for Rudolf så sletter en først det som er, alternativt kan en endre. Under Home og Paths&Targets slettes bane Path 10 og punkt under workobjects. En kan så gå til RAPID og åpne programmodul EnkelPenn, her oppretter en et nytt verktøy ttool som er identisk med tenkel- Penn ved å kopiere kodelinja. En går så til programmodul E459RPennTest og kaller denne heller for E459Test41, det skal nå være en modul for testing av enkle bevegelser over bordet. En kan kopiere inn wobjbordn fra programmodul E459GriperTest for Norbert. En bør også bytte oframe og uframe delene i definisjonen av disse workobject. Så legger en til ei ekstra linje med wobjbord, som nå settes helt lik wobjbordr. Til slutt kan linjene for wobjbordr og wobjbordn kommenteres bort. Nå må en riktig nok endre wobjbord etter hvilken robot en har, men det får en tåle. Alternativet er å ha eksta modul, eller å ha workobject med sammen men verktøy slik som ttool. Videre lages målpunkt og to baner, en mot klokka og en med klokka. Bruk ttool og wobjbord. Lag også en funnksjon PROC GaaIRing() som går enten banen med eller mot klokka om og om igjen. Dette kan styres av en global logisk variabel clockwise. Når simulering nå virker bra for Rudolf fortsetter en med å få Norbert til å gjøre det samme. En går til RAPID og åpne programmodul GriperSim, her oppretter en et nytt verktøy ttool som er identisk med tgriper ved å kopiere kodelinja. En sletter programmodul E459GriperTest og kopierer inn E459Test41 i stedet. Så redigerer en ei linje i denne modulen, wobjbord må endres til å bli likt wobjbordn. Nå synkroniserer en til stasjonen, og går så i stasjonen, Homefane, og fjerner det som ikke trengst lenger. Det er for eksempel gamle punkt under wobj0 og wobjbordn. En kan gjerne også fjerne klossen på bordet. Nå 3

bør begge robotene gå fint i ring med klokka når simulering kjøres. Dere legger gjerne merke til en feil for Norbert. Rektangelet som banen går i har ikke samme orientering som bordet. Dette skyldes at x-akse for wobjbordn og wobjbord er parallelt med kortsida for bordet, og kan ordnes ved å rotere workobject -90 grader omkring z-aksen. Gjør dette. Husk synkronisering. Sjekk at stasjon og program for både Rudolf og Norbert stemmer, merk at Rudolf og Norbert har hver sin kopi av programmodul E459Test41 og at kun ei linje er forskjelig mellom disse. 4.2 Enkel kommunikasjon Nå har vi vist at samme program kan brukes for å styre Norbert som Rudolf, det er bare ei linje, wobjbord, som må endres. Derfor velger vi nå å fjerne Norbert fra modellen som brukes i simulering, også transportbånd og bord ved vinduet kan fjernes. Stasjonen lagres så med navn lab4 2.rsstn. Også navn for program kan endres, til for eksempel E459Rudolf2, og lagres. Nå skal programmet endres slik at en kan enkelt snu retning for banen ved å endre verdien for en logisk variabel, for eksempel clockwise. Jeg har ennå ikke sett noen enkel måte dette kan gjøres på i simulering mens roboten kjører, TPReadFK kan bare brukes når roboten stopper opp og venter på svar. Vi får vente til vi er på laboratoriet før vi ser den fine effekten av å endre verdi for clockwise samtidig som programmet faktisk kjører. For å få dette til slik at retning endres raskt så bør målpunkta lagres i et array, og en kan gjerne legge til ekstra punkt midt på hver linje. Da har en 8 punkt i array. Ved å bruke en konstant npunkt for å angi hvor mange punkt en har i arrayet så får en noe større fleksibilitet. Hovedløkka i programmet kjøres mange ganger (WHILE TRUE), og er ganske enkel: En går til et punkt i lista (MOVEL), punktet er gitt med indeks ipunkt, deretter økes eller minkes ipunkt avhengig av verdi for clockwise, merk at en alltid må ha ipunkt mellom 1 og npunkt. På denne måten sjekkes ønsket retning en skal gå i oftere enn om hele banen skulle kjøres. Sjekk at dette virker i simulering, sjekk begge retninger. Lagre filer. Test på roboten. Start Matlab (32 bits versjon). Hvis dere ikke har installert 32-bits versjon av Matlab på deres bærbare PC (noe dere normalt ikke har) er det gjerne enklest å bruke en av de to PCene som er like ved ABB-robotene, brukernavn Robot og passord abb. Begge disse har 32-bits versjon av Matlab installert men også 64 bits versjon så pass på at riktig versjon startes. Når Matlab har startet her er en i (eller går til)../documents/matlab katalogen, der er det ei oppstartsfil ele610.m som dere skal kjøre. En katalog../documents/matlab/common, der nødvendige filer for kommunikasjon med robot er installert, settes da inn i 4

søkestien og Matlab går til katalog for deres gruppe, etter at dere har skrevet deres gruppenummer. Start RobotStudio på PCen, her kan dere gjerne bruke deres egen bærbar PC. koble til en ev de fysiske kontrollerne via nettverket og last RAPID programmet dere har laget E459Rudolf2 inn på roboten. Nå kan programmet kjøres på samme måte som vi har kjørt programmene for tegning og flytting av klosser. Videre i oppgaven er det enklest å sette roboten over i automatisk mode og kjøre programmet slik. Det kan alternativt kjøres manuelt men da må en holde sikkerhetsbryteren inne selv i lang tid. For automatisk mode må bryteren på robotkontrolleren i maskinrommet E459b settes til auto-mode, en godkjenner dette på FlexPendanten, og trykker så på lysknappen attmed bryteren på robotkontrolleren for å få Motors on. Så kan programmet startes med symbolet på FlexPendanten. Merk at når roboten kjører i automatisk modus så er sikkerhetsbarrieren aktiv og alt personell må være utenfor sikkerhetssonen omkring robotene. Programmet deres får nå roboten til å bevege seg i en rektangulær bane over bordet. Tilbake på Matlab så kan dere nå koble dere til ønsket robot kontroller med rc = abbcom( Rudolf ); % eller Norbert Ta gjerne først help abbcom for å se hva denne fila skal gjøre, eller dere kan åpne fila fra../documents/matlab/common og se på kommandoene som ligger bak. Se gjerne på resultatet, rc variabelen er en struct i Matlab med flere felt noen felt er vanlige variabler, tall eller tekststrenger, mens andre er spesielle (pekere til) PC NET objekter. Til disse objektene er det knytta både datafelt og funksjoner. Det kan være at rc = abbcom( Rudolf ); ikke klarer å opprette forbindelsen, da kan en prøve en gang til og det vil da ofte bli opprettet forbindelse. Dere oppretter så en Matlab-variabel som brukes for å overføre data mellom Matlab og RAPID. rclockwise = abbnew(char( T ROB1, E459Rudolf2, clockwise ), bool ); Første argument her er et tekstarray som består av programnavn (alltid T ROB1), modulnavn og variabelnavn, andre argument er datatype. Disse argumentene må samsvare med slik det er i (programmet som kjører i) roboten. Utargumentet rclockwise er en vanlig struct i Matlab. Denne er laget slik at den gjenspeiler strukturen for datatypen i RAPID, for en logisk variable er det ganske enkelt men noe større for et målpunkt. Matlab kan lese hva denne variabelen er i robot kontrolleren med rclockwise = abbread(rc, rclockwise); For å endre verdi på en variabel i RAPID trenger en Master-tilgang på kontrolleren. Det kan en få med rc = abbmaster(rc); Hvis dette har gått bra kan en endre verdi i Matlab variabelen rclockwise 5

og deretter skrive den til RAPID rclockwise.value = rclockwise.value; rclockwise = abbwrite(rc, rclockwise); De to siste kommandoene her kan gjentas og en skal da se at hver gang skifter roboten retning. Til slutt kan en gjerne frigjøre skrivetilgangen slik at en igjen kan bruke FlexPendanten rc.mmaster.release(); Her kaller en Release funksjonen for rc.mmaster objektet. Når dette virker er denne delen gjort. 4.3 Jogge robot fra Matlab I denne oppgaven skal en fra Matlab sende kommandoer som styrer roboten, (jogging). Her kan en utvide det som ble gjort i forrige del og endre på RAPID kode og Matlab fil. RAPID koden i programmet må lages slik at den passer med Matlab instruksjonene som setter verdier i RAPID variabler og slik at roboten gjør det som foventes her. Dere kan velge å gjøre det enkelt, med kun kommandoer for stegvise bevegelser x, y, og z-retning. Dere kan eventuelt også legge til kommandoer for å bevege enkel akse til en bestemt vinkel, sette alle vinkler til en utgangsposisjon, eller øke/redusere en aksevinkel med et gitt antall grader. Planlegg på forhånd hvordan dere vil ha kommandoene som sendes, og hvordan dere vil lage brukergrensesnittet i Matlab for å gi inn disse kommandoene. Brukergrensesnittet i Matlab kan lages ferdig før dere er på robotlaboratoriet. Hint Det kan være flere måter å løse dette på. Jeg velger å å vise et lite eksempel der en i RAPID programmet har flere variabler som Matlab skal få lov å endre under kjøring. VAR num mlcmd := -1; VAR num mlsteg := 10;! [mm] VAR robtarget p0 := Target_10;! et punkt over bordet VAR num dx := 0; VAR num dy := 0; VAR num dz := 0; Den vitigste her er mlcmd som er et heltall som Matlab setter for å fortelle roboten hva den skal gjøre. Denne antas å være 0 (eller negativ) når roboten er ferdig med å gjøre dette og Matlab kan gi neste kommando. På denne måten blir det alltid en stopp (pause) mellom hver kommando, noe som i enkelte sammenhenger kan være uheldig men her tolereres. I neste deloppgave er et litt mer avansert eksempel der denne stoppen kan unngås. I dette eksempeler er hovedløkka i RAPID programmet en evig løkke 6

WHILE TRUE DO IF (mlcmd <> 0) THEN TEST mlcmd CASE 1 : dx := dx + mlsteg; CASE 2 : dx := dx - mlsteg; CASE 3 : dy := dy + mlsteg; CASE 4 : dy := dy - mlsteg; CASE 5 : dz := dz + mlsteg; CASE 6 : dz := dz - mlsteg; ENDTEST mlcmd := 0;! gir kontroll til Matlab MoveL Offs(p0, dx, dy, dz),vspeed,fine,uispen\wobj:=wobord; ENDIF WaitTime 0.01; ENDWHILE Fra Matlab kan en da sette mlcmd og mlsteg og eventuelt andre parametre hvis en lager en mer fullstendig løsning. Dette kan gjerne gjøres på en litt mer elegant måte enn det som ble gjort i forrige oppgave, der en bare brukte kommandolinjegrensesnittet. Dessverre gir ikke Matlab direkte kontroll med tastetrykk på tastaturet, det gjør at en ikke kan styre med piltaster og PgUp og PgDn. Brukergrensesnittet i Matlab kan lages avansert hvis en bruker Figure og de muligheter en har til å lager bokser, slidere og brytere der, som for eksempel i boxcar gui.m oppgave 1 i FPGA del. Det er dessverre ganske omfattende og etter mitt syn komplisert å lage selv forholdsvis enkle GUI (graphical user interface) på denne måten. Et enkelt alternativ er å bruke menu og input funksjonene. Noen linjer i m-fil som bruker dette kan være: valg = -1; % bruker har ikke gitt inn ønsket sitt steg = -1; % heller ikke noe nytt ønsket steg while (valg < 0) (valg == 7) valg = menu( Velg kommando :,... x++,... % 1 x--,... % 2 y++,... % 3 y--,... % 4 z++,... % 5 z--,... % 6 Gi ønsket steg,... % 7 Avslutt ); % 8 if valg == 7 steg = input( Gi ny verdi for steg [mm] : ); end % mer her... end 7

4.4 Sette robotbane fra Matlab En stor utfordring ved å programmere roboter er å bestemme punkt og baner roboten skal gå til etter hvert, altså på grunnlag av observasjoner gjort mens programmet går. En vet da altså ikke på forhånd, eller en kan ikke på forhånd sjekke og optimalisere banen som roboten skal følge og dermed kan det oppstå både feil og klossete bevegelser. I denne oppgaven skal en fra Matlab sende kommandoer og punkt som styrer roboten. Her kan en utvide det som ble gjort i forrige del og endre på RAPID kode og Matlab fil. Det kan fort bli ganske mye å holde orden på for hvert program en lager på denne måten. Jeg prøvde derfor å samle de RAPID variabler og programdeler (funksjoner) som ofte er felles i slike program til en egen modul, MatlabCom.mod. Her er mlcmd brukt i forrige del splittet i to variabler, en som indikerer det roboten gjør og en som indikerer det Matlab ønsker roboten skal gjøre etterpå.! de viktigste variabler VAR num nmatlabcomwrd := 0; VAR num nmatlabcomwmw := 0;! What Robot Does! What Matlab Wants robot to do next I denne RAPID koden har jeg lagt til rette for å sende store (uendelige) datamengder til RAPID for å kjøre (uendelig) lange baner. Det er gjort ved at det er tenkt at vi har to array med punkt, et array med bane som RAPID kjører, og et array med bane som RAPID skal kjøre etterpå. Når en bane (et array) er kjørt ferdig skifter RAPID uten stans til neste bane og kjører den som en fortsettelse av forrige bane. De to array skifter da betydning. Mens RAPID kjører en bane kan Matlab klargjøre neste bane ved å skrive inn data til den og sette at denne banen skal kjøres neste gang, sette nmatlabcomwmw. Jeg har valgt å bruke tre array for hver bane, for henholdsvis x-, y- og z-data, og dermed er det totalt seks array med data i MatlabCom.mod. I tillegg er det variabler for å vise hvor mye av array som brukes, fra MatlabCom.mod: CONST num nmatlabcommaxlen := 50; VAR num nmatlabcomarrayx1{nmatlabcommaxlen}; VAR num nmatlabcomarrayy1{nmatlabcommaxlen}; VAR num nmatlabcomarrayz1{nmatlabcommaxlen}; VAR num nmatlabcomlen1 := 0; VAR num nmatlabcomarrayx2{nmatlabcommaxlen}; VAR num nmatlabcomarrayy2{nmatlabcommaxlen};! så mange element som brukes i array over VAR num nmatlabcomarrayz2{nmatlabcommaxlen}; VAR num nmatlabcomlen2 := 0;! så mange element som brukes i array over Det viste seg også å være utfordrende å skrive til RAPID array fra Matlab. Løsningen som jeg fikk til å virke er ikke så elegant som en kanskje kunne 8

ønske, men det virker. Det ble opprettet en num variabel rnum som så ble brukt i en kommando med form ArrayX.WriteItem(rNum, ri); for å skrive en verdi til et element i et array, her ArrayX. ri gir indeks for array, og her må en merke seg at denne indeksen brukes på en PC NET funksjon WriteItem og der er det indeksering fra 0, selv om både Matlab og RAPID har indeksering fra 1. Oppgaven: Oppgaven deres er å sende punkt fra Matlab til RAPID. Disse punkta utgjør en bane, og RAPID kjører så denne banen når den er ferdig. Mens roboten går denne banen skal en sende over neste bane, fortsettelsen av den totale banen, og roboten skal så, uten stans, fortsette med neste bane når forrige bane er ferdig. Planlegg på forhånd hvordan dere vil ha kommandoene som sendes, og hvilke RAPID variabler som skal endres fra Matlab. Dere kan gjerne bruke MatlabCom.mod her, men enklere alternativ kan også velges. Brukergrensesnittet i Matlab kan lages ferdig før dere er på robotlaboratoriet. Dere må også tenke (først og siden gjøre) både på ryddighet og funksjonalitet i RAPID kode. Noen flere hint er: La variabler starte med prefiks etter type: ttoolnavn, probtarget, ncounter (type num), wobjworkobject, o.s.v. Tenke mer robusthet for programmet, gjerne ved å bruke strukturer som PROC,..., ERROR,... RETRY; ENDPROC. Gi relevant og fortløpende informasjon om akser og mulige uheldige ting (problemer) som kan oppstå eller har oppstått. Bruk TPWrite for å skrive (feil)meldinger. Funksjonen CJointT vil gi informasjon om vinkel for hver av de 6 aksene på roboten, en kan også la Matlab lese robotens vinkelposisjoner. CalcJointT kan brukes for en vilkårlig (neste) punkt og sjekke om punkt kan nås. Funksjoner CPos, CRobT og flere til kan brukes for å finne andre nå-verdier (current). I stedet for MoveL vil ofte MoveJ eller MoveAbsJ gi bedre bevegelser, men de må bare brukes når det ikke er et krav med lineær bevegelse og bane ikke gir kollisjoner. Det blir ofte sirkelbevegelser, og dermed kan det være at de gå ned i for eksempel bordflata. I stedet for WaitTime i ei løkke så kan en gjerne bruke WaitUntil. 9

4.5 Tegne blomst Som en siste test kan en bruke pennen på Rudolf og tegne blomsten som lages med lab4 bane.m. Hvis en bruker TriplePen så er det i utgangspunktet bare definisjon av de ulike pennene (tool) en trenger å kopiere inn. Men en kan gjerne se på de andre definisjonene av ulike variabler og funksjoner og på hvordan disse kan brukes i eksemplene på slutten. Særlig kan det være nyttig å se hvordan vi her kan bytte mellom ulike farger. Prøv gjerne å lage programmet slik at en kan velge hvilken farge som skal brukes, eller kanskje til og med tegne tre blomster (inni hverandre) med ulik farge? 10