Kamerabaserat Positioneringssystem för Hamnkranar Användarhandledning Olof Larsson Version 1.0 25 november 2009 Granskad Godkänd Status 1
Projektidentitet 09/HT, CaPS Linköpings Tekniska Högskola, ISY Namn Ansvar Telefon E-post Mohsen Alami designansvarig (DES) 073-7704709 mohal385@student.liu.se Tobias Andersson dokumentansvarig (DOK) 076-3093880 toban563@gmail.com Fredrik Bodesund designansvarig (DES) 076-8913299 frebo449@student.liu.se Isac Duhan 073-5811085 isac.duhan@gmail.com Emil Granberg 070-2864574 graem978@student.liu.se Erik Jakobsson testansvarig (TST) 070-6226872 mreijster@gmail.com Axel Landgren hemsideansvarig (HEM) 073-8747296 axela706@student.liu.se Olof Larsson 070-8109389 olola417@gmail.com Mikael Ögren projektledare (PL) 073-7623772 ogren.mikael@gmail.com E-post: tsrt10-kph@googlegroups.com Hemsida: http://www.isy.liu.se/edu/projekt/tsrt10/2009/hamnkran_2009 Kund: ABB, 721 83 Västerås, tele: 021-32 50 00, fax: 021-13 41 12, info@se.abb.com Kontaktperson: Johan Sjöberg, 021 34 20 47, johan.sjoberg@se.abb.com Beställare: Martin Skoglund, 013 28 28 03, ms@isy.liu.se Kursansvarig: David Törnqvist, 013 28 18 82, tornqvist@isy.liu.se Handledare: Fredrik Lindsten, 013 28 40 43, lindsten@isy.liu.se 2
Innehåll 1 Bildbehandling & Sensorfusion 5 1.1 Tracking och estimering....................... 5 1.2 Specifikation av bildmapp för trackfromjpegs.m.......... 7 1.3 Extra funktionalitet......................... 7 1.4 Parametertrimning.......................... 8 2 Simulering, Reglering & Sensorfusion 8 2.1 Sensorfusionsblocket......................... 8 2.2 Inställningsmöjligheter i initieringsfilen för sensorfusion..... 9 2.3 Inställningsmöjligheter i S-funktionen............... 9 2.4 Featurepunktsextraktionblocket................... 9 2.5 Störparametrar............................ 11 2.5.1 Dynamikmodellen...................... 11 2.5.2 Featurepunktsgenerering - Processbrus........... 11 2.5.3 Featurepunktsgenerering - Mätbrus............. 11 2.5.4 Featurepunktsgenerering - Övriga robusthetsparametrar. 11 2.5.5 Regulatorn.......................... 11 2.6 Simuleringsmiljö........................... 11 2.6.1 Simulera............................ 11 2.6.2 Ändra konstanter i simuleringsmiljö............ 12 2.6.3 Observerade tillstånd direkt ur simuleringsmiljön..... 12 2.7 Regulator............................... 12 2.7.1 Viktiga parametrar i RegulatorInit.m........... 12 2.7.2 Hoist-regulator........................ 12 2.7.3 Trolley-regulator....................... 12 2.7.4 Gantry-regulator....................... 13 2.7.5 Ge styrsignal till kranen................... 13 3
Dokumenthistorik version datum utförda ändringar utförda av granskad av 1.0 09-11-24 Första versionen MÖ MS 0.1 09-11-24 Skapat mall och fört in text OL MÖ 4
1 Bildbehandling & Sensorfusion 1.1 Tracking och estimering Börja med att gå till katalogen Leverans och kör initreal.m. Nu går det att köra två olika matlabfunktioner som estimerar hastighet och position utifrån filmmaterial. Båda visar i realtid featurepunkter och estimering över tiden, samt returnerar två vektorer med resultatet. De skiljer sig dock i hur de importerar bilddata; trackfromvideo.m använder en avi-fil, medan trackfromjpegs.m använder en specificerad mapp med jpegfiler. trackfromvideo.m körs med tre argument: video - en sträng med ett filnamn. maxframes - maximalt antal bildrutor att hantera, 0 för hela filmen. savefolder - en sträng med en sökväg till en mapp där alla grafer sparas, alternativt 0 för att inte spara några bilder. trackfromjpegs.m har följande argument: foldername - en sträng med en sökväg till en mapp, utan avslutande slash. maxframes - maximalt antal bildrutor att hantera, 0 för hela filmen. savefolder - en sträng med en sökväg till en mapp där alla grafer sparas, alternativt 0 för att inte spara några bilder. Båda funktionerna returnerar två vektorer av struct:ar, P_BB & P_SF. Exempel på två körningar: [P_BB P_SF] = trackfromvideo( E:\Euromax_2009_09_12\calGa.avi,100,0) [P_BB P_SF] = trackfromjpegs( E:\jpegs\calGa,100, E:\Figures\calGa ) Vi rekommenderar idag att man använder trackfromjpeg eftersom de filmer vi har fått (okomprimerad video i avi-container) har brister som inte kan hanteras av trackfromvideo. Då estimeringen pågår så kommer två graf-fönster att kontinuerligt uppdateras, vilket ser ut som i figur 1. Den övre grafen visar kranens trajektoria i förhållande till de featurepunkter som har indentifierats. De för tillfället synliga punkterna är markerade med blåa kryss, de som ej syns med röda ringar. Landmärkena är även numrerade i den ordning de anlänt till sensorfusionen. Trajektorian från tidpunkt 0 till den aktuella tidpunkten är visualiserad med en blå linje, medan kamerans aktuella position är en blå punkt. Kamerans aktuella position har även ett 99%:igt konfidensintervall som är visualiserat med en blå ellips. Den undre grafen visar aktuell videobild med intressepunkter markerade. Varje för tillfället synlig featurepunkt är markerad som ett blått kryss, med konfidensintervallet utritat som en ellips. 5
6 Figur 1: Grafer från en iteration av tracking och estimering
Karakteristiska egenskaper för de två metoderna är följande: Estimering från jpeg-bilder Mindre minneskrävande. Bättre på att hantera skadade videofiler (med redundanta bildframes). Jämnare prestanda (inga pauser för att buffra fler videoframes). Estimering från avi-film Teoretiskt sett mindre CPU-krävande. Stödjer bildkalibrering. Kräver färre diskläsningar. Hanterar idag inte fall då samma frame upprepas i avi-strömmen. 1.2 Specifikation av bildmapp för trackfromjpegs.m En mapp med jpeg-filer ska se upp på följande sätt: Den ska innehålla upp till 10000 jpeg-filer av bildframes, med namnen fxxxx.jpg, där XXXX är decimala siffror 0-9. Dessa filer kan lämpligen skapas med ett program såsom virtualdub, motsvarande. Det är inte nödvändigt att alla filnamn existerar, utan det är rekommenderat att alla skadade bildframes från filmfilen raderas. Det bör dessutom finnas en fil FPS.mat, som innehåller en double fps, vilken indikerar den ursprungliga filmens antal bilder per sekund, dvs 1/dT (där dt är tidskillnaden mellan f0001.jpg och f0002.jpg). 1.3 Extra funktionalitet trackfromvideo.m och trackfromjpegs.m har en del inställningar som bara går att ändra från källkoden, men som ändå kan vara intressanta. De behöver troligtvis ej röras. Variabeln crop kan ändras för att bestämma hur stor del av ursprungsbilden ska användas. Observera att bildbehandling av en hel 800x600 bild kommer att göra estimeringen betydligt långsammare. Variabeln ht kan ändras för att ställa om tröskelvärdet för vad som räknas som en feature. Detta kan snabba upp processen att söka de lämpligaste bildpunkterna (färre dåliga kandidater), men leder till större risk att missa otydliga features. Det går att aktivera kamerakalibrering för trackfromvideo. Detta är inte rekommenderat förrän man har lämpliga kalibreringsparametrar. Se mer i dokumentationen. 7
1.4 Parametertrimning Om skattningarna från sensorfusionsblocket blir dåliga kan man vilja ändra i rörelsebruset. Detta finner man i funktionen updatenlobj.m som en multiplikator framför pv. Vidare finns i funktionen sfinit.m följande parametrar som kan vara intressanta: scale - Omvandlar från kamerakoordinater till meterkoordinater. Ts - Samplingstid för kameran. lm_threshold - Bestämmer hur nära en skattning av ett nyfunnet landmärke kan vara ett känt landmärke utan att tolkas som samma. c - Anger variansen på nyfunna landmärken. 2 Simulering, Reglering & Sensorfusion 2.1 Sensorfusionsblocket Kärnan i sensorfusionsdelen är det så kallade S-funktionsblocket, benämnt EKF & landmark handling. Blocket länkar till en Matlab S-function, level 2, vid namn sfr_s_ekf_slam. I denna fil återfinns inställningar som kan göras för den sensorfusion som används mot simuleringen. Insignaler: l_k - Mätvektor bestående av data på formen [x y z typ id]. Typ anger vilken typ av landmärke som hittats, och id är ett nummer som möjliggör tracking av punkten. P_b - Varians för mätvektorn l_k. camvel - En ungefärlig hastighet hos kameran, beräknad enligt hur mycket bilden skiftas. camvelcov - varians för camvel. harrisbool - Boolsk variabel som talar om huruvida en ny omgång mätpukter levererats eller om trackade landmärken skickats. Utsignaler: r_c - Kamerans skattade position. v_c - Kamerans skattade hastighet. r_s - Spreaderns skattade position relativt kameran. v_s - Spreaderns skattade hastighet relativt kameran. 8
2.2 Inställningsmöjligheter i initieringsfilen för sensorfusion Skulle antalet tillåtna landmärken behöva ökas, ändras detta enkelt genom att förändra vektorernas storlekar i initieringsfilen. Även S-funktionens portstorlekar skall då ändras för att motsvara nya krav. Samma sak gäller för mätvektorns storlek. Önskas en förändring av sampeltiden för den i sensorfusionen ingående dynamikmodellen, ändras konstanten sfrsampletime. Önskas initialpositionerna för skattningarna ändras, återfinns detta under initialvärden i filen. 2.3 Inställningsmöjligheter i S-funktionen explandcovconst - kovarianskonstant för nya landmärken. CameraHeight - kamerans höjd över marken. MakeMotModConstCam - rörelsekovarians för konstantrörelsemodellen. Påverkar skattningarna av kameraposition. Ökad varians ger minskad relativ invägning av modellen i skattningen, och därmed litas det mer på mätvärden. MakeMotModConstSpr - rörelsekovarians för konstantrörelsemodellen. Påverkar skattningarna av spreaderposition. Ökad varians ger minskad relativ invägning av modellen i skattningen, och därmed litas det mer på mätvärden. nlmotmodconst: Övergripande varians för alla tillstånd. camvelscale - Skalning för sambandet mellan skattad kamerahastighet i bild respektive världskoordinater. CamVelCovConst - kovarians för skattad kamerahastighet. 2.4 Featurepunktsextraktionblocket Detta block har till uppgift att simulera hur en kamera ser alla föremål som containrar och spreader och andra punkter. Detta resulterar i bilkoordinater i 2D. Vid körning av programmet produceras två plottar. Figur 2 visar hur den simulerade världens punkter ser ut och projiceras genom kameran. Figur 3 visar hörnkoordinaterna på den extraherade kamerabilden rättspeglad. 9
Figur 2: Figuren visar hur den simulerade världen ser ut och hur punkter projiceras genom kameran. Gröna projektionslinjer anger trackade featurepunkter medan röda linjer anger punkter som inte trackas. Figur 3: Figuren visar var punkterna befinner sig på bilden. 10
2.5 Störparametrar I filen sim_noise_param.m finns parametrar för att simulera olika typer av störning på systemet. Följande information med ändringsbara parametrar är hämtat från filen: 2.5.1 Dynamikmodellen Enkel vindstörning, konstant kraft på spreader: constantforcespreaderx = 0; constantforcespreadery = 0; 2.5.2 Featurepunktsgenerering - Processbrus Kamerans vridning [x y z] i grader: cameraangles3d = [0 0 0]; 2.5.3 Featurepunktsgenerering - Mätbrus Störning på bildpositionerna med normalfördelning: stddev = 0.0002; Följande ger variationer på stddev angiven ovan: stddevonstddev = 0.00001; 2.5.4 Featurepunktsgenerering - Övriga robusthetsparametrar Sannolikhet att tappa en punkt som trackas: loosetrackedpointprob = 0.05; Sannolikhet att en punkt i synfältet ej syns vid en harris: looseharrispointprob = 0.20; 2.5.5 Regulatorn Modellfel för regulatormodellen spreadermassdisturbance = 0; 2.6 Simuleringsmiljö 2.6.1 Simulera Alla nödvändiga filer för att simulera kranen initieras automatiskt, förutom createlqregulator som måste köras manuellt före simulering. Då detta är gjort är det bara att trycka på play i simulink. 11
2.6.2 Ändra konstanter i simuleringsmiljö Hela simuleringsmiljön är byggd i Matlab toolboxen SimMechanics och återfinns i blocket Simulated Crane. Det initieras med filen MechModelInit.m som ansätter rätt längder, vikter, fjäderkrafter, dämpningar och moment. 2.6.3 Observerade tillstånd direkt ur simuleringsmiljön För att kunna observera tillstånd i simuleringsmiljön finns en rad sensorer implementerade i blocket Simulated Crane, dessa är sedan kopplade till blocket ScopeTown där relevanta signaler sorteras ut och kan avläsas samt jämföras med positioner och hastigheter estimerade med hjälp av kamera. 2.7 Regulator Regulatorn som används för att styra förflyttning av gantry och trolley är av LQ-typ. Denna ger i sin tur en hastighetsreferens till en P-regulator som styr motorkraften. LQ-regulatorer tillsammans med respektive P-regulator återfinns under varsitt block med namnen Gantry regulator och Trolley regulator. För reglering av hoist används en annan LQ-regulator som styr moment direkt utiifrån position och hastighet från simuleringsmiljön. Alla parametrar som används i regulatorn återfinns i filen RegulatorInit.m som initieras automatiskt. Dock måste även LQ-regulatorn initieras med hjälp av createlqregulator.m, detta görs manuellt och behöver endast göras en gång. 2.7.1 Viktiga parametrar i RegulatorInit.m pgantry - Bestämmer storlek på P-delen i P-regulatorn som styr gantry. Ptrolley - Bestämmer storlek på P-delen i P-regulator som styr trolley. 2.7.2 Hoist-regulator För att justera hoist-regleringen kan dessa parametrar användas: qhp - straffar fel i position, referenssignalen sätts här som en störning. qhv - straffar hastighet på hoist. För att ändra beteendet hos LQ-regulatorn kan man justera straffparametrar på trolley och gantry-regulator. Detta görs i CreateLqRegulator.m. 2.7.3 Trolley-regulator Q1t, Q2t, är straffmatriser för trolley-regulatorn, tillstånden som straffas är enligt följande: Q1t(1) - Straff på förskjutning av gantry, skillnaden mellan toppen och botten av gantry i X-led.(används ej då detta tillstånd ej finns observerat). 12
Q1t(2) - Straff på föskjutningshastighet av gantry, i X-led. (används ej då detta tillstånd ej finns observerat). Q1t(3) - Straff på trallans position, det är här referenssignal läggs på som störning, i X-led. Q1t(4) - Straff på trallans hastighet. X-led. Q1t(5) - Straff på spreaderns vinkel till trallan, i X-led. Q1t(6) - Straff på spreaderns vinkelhastighet till trallan, i X-led. Q2t - Straffar styrsignalen, alltså hastighetsreferensen till P-regulatorn. Det görs även en begränsning i referenssignalen så att ej för stor referens till Trolley-LQ-regulatorn ges. Denna kan väljas med variabeln tsat. 2.7.4 Gantry-regulator Q1g, Q2g, är straffmatriser för gantry-regulatorn, tillstånden som straffas är enligt följande: Q1g(1) - (används ej). Q1g(2) - (används ej). Q1g(3) - Straff på gantry-position, det är här referenssignal läggs på som störning, i Y-led. Q1g(4) - Straff på gantry-hastighet. Y-led. Q1g(5) - Straff på spreaderns vinkel till trallan, i Y-led. Q1g(6) - Straff på spreaderns vinkelhastighet till trallan, i Y-led. Q2g - Straffar styrsignalen, alltså hastighetsreferensen till P-regulatorn. Det görs även en begränsning i referenssignalen så att ej för stor referens till gantry-lq-regulatorn ges. Denna kan väljas med variabeln gsat. 2.7.5 Ge styrsignal till kranen För att förflytta spreader till önskad position ställer man in önskad referenssignaler i blocken GantryRegulatorReference, TrolleyRegulatorReference och HoistRegulatorReference uppe i vänstra hörnet i: GantryRegulatorReference ger positionsreferens I enheten meter till Gantryregulatorn och således trallans position I Y-led, I det globala koordinatsystemet. TrolleyRegulatorReference ger positionsreferens I enheten meter till Trolleyregulatorn, trallans position I X-led, I det globala koordinatsystemet. 13
HoistRegulatorRefernce ger höjdreferens, avståndet från spreader till tralla I meter. Trallans startposition är 0,0 i X och Y-led, steget ställs utifrån denna startposition. Spreader hänger på 10m avstånd från trallan i startposition och steg skall sättas utifrån detta. 14