Matlab script - placering af kran 1 Til at beregne den ideelle placering af kranen hos MSK, er der gjort brug af et matlab script. Igennem dette kapitel vil opbygningen af dette script blive gennemgået. Bemærk at alle længdemål er opgivet i centimeter, og vinkler i radianer. Til at beskrive kranens rækkevide er der gjort brug af 3 længdemål, hvilket er R1, R2 og R3. Disse mål dækker over henholdsvis det første og andet led i kranen, samt den samlede rækkevide for denne. Herudover tages der højde for den minimale vinkel imellem de første og andet led i kranen. Denne vinkel, benævnt som Qmin, begrænser dermed hvor tæt på søjlen kranen er i stand til at nå. Til at illustrerer den ideelle placeringen af kranen, gives der point til kranen for hvert ønsket punkt kranen er i stand til at nå, når den er placeret i et givet punkt. Dette gøres ved at lægge en matrice over køkkenarealet, hvorefter pointene for hvert felt i matricen udregnes. For at gøre denne matrice, benævnt i scriptet med navnet v, overskuelig for læseren, dækker hvert felt i matricen over et areal på 1 [cm]. Dette skyldes at matricens felter kun kan benævnes med heltal, og af denne grund benyttes måleenheden centimeter, eftersom decimeter blev antaget til at være for unøjagtig. Størrelsen for det udregnede område hos MSK er givet ved x- og y-koordinaterne, benævnt med henholdsvis xmax og ymax i scriptet. Til at beskrive et punkts koordinater, vægtning samt vigtighed er der benyttet 5 variabler. P x(n.m) og P y(n.m) beskriver henholdsvis punktets x- og y-koordinat, hvorimod P y(n.m) beskriver hvor mange point kranen vil få i en given position, hvis den er i stand til at nå dette punkt. Bemærk at disse punkter benytter variablerne n og m, hvor n blot beskriver punktets nummer, hvilket kun beskriver hvilken rækkefølge scriptet checker punktet. Variablen m beskriver derimod punktets prioritet. Dette skyldes at nogle opgaver kan udføres ved forskellige positioner og af denne grund vil kranen blive tildelt point, omendt færre end for det ønskede punkt, hvis den er i stand til at nå sekundere punkter. Denne metode er brugt, frem for blot at tildele alle punkter en vis mængde point, eftersom kranen ikke vil være i stand til at gavne mere ved at kunne nå flere punkter ved en station, 1
2 KAPITEL 1. MATLAB SCRIPT - PLACERING AF KRAN udover det ønskede. Denne metode giver dermed flest point til den position, hvor kranen er i stand til at gavne flest forskellige stationer frem for at kunne nå ethvert punkt ved en enkelt station. Udover ønskede punkter, er der også punkter der skal undgås hos MSK. Disse punkter er søjler, hvilket forhindre kranens bevægelser. Disse er benævnt med 4 forskellige variabler. Ox(i) og Oy(i) beskriver henholdsvis forhindringens x- og y-koordinat. Or(i) beskriver derimod forhindringens radius. Igen beskriver i blot i hvilken rækkefølge scriptet skal checke om forhindringerne stå i vejen for kranen. Til at beregne hvor mange point et givent felt i matricen er i stand til at opnå, gøres der brug af en række løkker. De to første løkker i dette script checker først hver eneste x-koordinat og den anden løkke checker dermed hvert eneste y-koordinat for hvert x- koordinat. Bemærk at der for x-koordinat løkken er tilført udregningen vist i formel 1.1. Hvad denne formel gør, er at den først sletter alle viste resultater, hvorefter den viser procentvis hvor langt scriptet er nået i udregningerne. Dette er gjort, eftersom scriptet er meget tidskrævende og dermed vise at scriptet stadig beregner frem for blot at være gået i stå. Denne beregning er derfor også lagt ud i den forreste lykke, for at minimere antallet af gange den udføres, eftersom det reelt set er en unødig beregning der kun er til for at hjælpe brugeren. clc x/nmax (1.1) Herefter er der to løkker for variablerne n og m. Formålet for disse er at checke hvert eneste punkt, både første-, andet- og tredjeprioritets koordinaterne. Bemærk at der før m løkken gøres brug af formel 1.2. Dette benyttes i m løkken, ved at checke om denne variabel er 0 før der regnes videre på prioriteringerne. Hvad dette gør er, at checke om et højere prioriteret koordinatsæt for punktet er opnået, i hvilket tilfælde de lavere prioriterede koordinatsæt ignoreres og dermed sænker antallet af beregninger der skal udføres. mmax = 0 (1.2) I starten af løkken for m checkes der ligeledes om hvorvidt et punkt giver point at opnå. Dette er igen for at sænke antallet af beregninger eftersom alle punkter tjekkes for første, andet og tredje prioriteter, hvor flere af punkterne kun består af et første prioritet. Herefter checkes der om et punkt ligger inden for kranens rækkevidde, og punkter der ligger uden for denne ignoreres. Til at udregne hvordan kranen er i stand til at opnå et punkt, måles først afstanden imellem kranens placering, punkt C på Fig: 1.1, og det ønskede punkt, punkt P på Fig: 1.1. Ud fra de nu 3 kendte længer R1, R2 og CP kan vinklerne Q1 og Q3 udregnes ud fra cosinusrelationen, vist i formel 1.3.
3 Figur 1.1: Vinkler og længder til udregning af kranens konfiguration ( l 2 v c = arccos a + lb 2 ) l2 c 2 l a l b (1.3) Ud fra disse udregninger, checkes vinklen Q3 for at sikre at denne ikke er mindre end hvad der er muligt for kranen. Denne mindste vinkel er, som tidligere nævnt, givet med konstanten Qmin. Der benyttes den absolutte værdi af begge vinkler, for at sikre begge vinkler regnes positivt med uret. Eftersom kranen er toledet, er den i stand til at opnå det ønskede punkt ved hjælp af to forskellige konfigurationer. Til at udregne disse, er det nødvendigt at kende kranens orientering i forhold til det globale koordinatsystem. Til dette benyttes en enhedsvektor der ligger vandret i det globale koordinatsystem. Det er dermed muligt at udregne vinklen imellem denne vektor, og vektoren CP. Bemærk at formlen der benyttes til at udregne denne vinkel, formel 1.4, kun er i stand til at udregne cosinus værdien, og er dermed ikke i stand til at skelne imellem om vinklen går med og imod uret. v = arccos ( ) A B A B (1.4) Af denne grund gøres der brug af sign funktionen til at checke hvilken retning vektoren CP peger. Eftersom den anden vektor altid ligger vandret med det globale koordinatsystem betyder dette at en negativ y-koordinat for vektoren CP vil betyde at vinklen er med uret, hvorimod en positiv er med uret. Bemærk at sign funktionen giver resultatet 0, hvis y-koordinatet også er 0. Af denne grund checkes der om dette er sandt, i hvilket tilfælde sign funktionen ikke vil blive benyttet da formlen ellers vil være ude af stand til at skelne imellem 0 og 180. Ved at kende vinklerne imellem ledende i kranen, samt kranens orientering i det globale koordinatsystem, kan de to mulige endepunkter for det første led, A og B, udregnes, se Fig: 1.1. Bemærk at alle vektorene er tredimensionelle, men har ingen udstrækning i z-aksen. Dette har først betydning senere i scriptet hvor der skal udregnes afstande imellem vektorer, men er ellers uden betydning.
4 KAPITEL 1. MATLAB SCRIPT - PLACERING AF KRAN Før løkken der checker forhindringerne i køkkenet, gøres der brug af formlerne 1.5 og 1.6. Hvad disse variabler benyttes til, er indikere om det er muligt at opnå det ønskede punkt, P, ved at gå igennem henholdsvis punkt A eller B. Af denne grund nulstilles variablerne LimitA og LimitB før forhindringerne checkes for hvert enkelt punkt. LimitA = 0 LimitB = 0 (1.5) (1.6) I løkken for variablen i opstilles først vektorer imellem forhindringen O og punkterne C,A,B og P. Herefter udregnes afstanden imellem forhindringen og alle leddene i kranen, ved hjælp af formel 1.7, der udregner den korteste afstand imellem et punkt og en linje. AB AC d C,AB = AB AB AC sin(θ) = AB = AC sin(θ) (1.7) Bemærk at formlen af denne grund ikke er tilstrækkeligt, eftersom den kun er i stand til at udregne afstanden til centerlinjen af leddene i kranen, og ikke selve leddet, se Fig: 1.2 Af denne grund gøres der brug af Pythagoras til at udregne hvor tæt på kranen punktet reelt set er. Ud fra afstanden imellem endepunkterne for det enkelte led i kranen samt forhindringen, kan disse opdeles i to retvinklede trekanter ved hjælp af den vinkelrette afstand, fundet i formel 1.7. Bemærk at hvis forhindringen, illustreret på Fig: 1.3, ligger imellem endepunkterne af kranen, vil længden af vektorene AD og BD være lig med længden for vektoren AB. Er forhindringen derimod uden for disse punkter, vil den samlede længde dermed blive AB + 2 BD eller AB + 2 AD, for situationen illustreret på Fig: 1.3. Herefter checkes begge led for kranen, i begge situationer, om forhindringen blokere denne. Dette gøres ved først at checke om den vinkelrette afstand imellem forhindringen, se formel 1.7, og leddets centerlinje er mindre end forhindringens radius. Hvis dette er tilfældet checkes herefter om længden, udregnet ved hjælp af Pythagoras, er mindre end leddets samlede længde plus den dobbelte radius af forhindringen, illustreret Figur 1.2: Illustration af begrænsningerne for udregningen af afstande
5 (a) Forhindring inden for kranens led. (b) Forhindring uden for kranens led. Figur 1.3: Illustration af udregninger med Pythagoras. på Fig: 1.3. Er begge sande, betyder det at forhindringen står i vejen for leddet, og LimitA eller LimitB, afhængig af hvilken konfiguration der blokeres, sættes til at være lig 1. Endeligt checkes om LimitA + LimitB er mindre end to, i hvilket tilfælde kranen er i stand til at opnå det ønskede punkt ved hjælp af minimum en konfiguration. Kranens position tildeles derfor pointene, P z, for det givne punkt og sætter mmax til at være lig 1 således at scriptet ikke checker lavere prioriteringer af samme punkt. Når scriptet er færdigt med at tildele hver position for kranen point, alt efter hvor mange ønskede punkter den er i stand til at nå fra en given position, laves et conturplot for at visualiser pointfordelingen og dermed den optimale placering af kranen.