Madam Skrald I



Madam Skrald er bygget til at deltage i DTU's Robocup -konkurrence, der drejer sig om at gennemkører en bane med visse valgfri opgaver så hurtigt som muligt.
Vi var to anden-semesters elektronikingeniørstuderende (puh!), der satte os for at prøve at bygge et lille køretøj, der bare kunne klare noget af opgaven. Resultatet af det arbejde ses herunder.

En udførlig beskrivelse af fartøjets teknik følger her - derefter et oprids af vores problemer og genvordigheder under arbejdet med at få Madammen til at køre og til sidst et kort oprids af hvad vi opnåede.

Billede af Madam Skrald

Billede af Madam Skrald's elektronik

Billede af Madam Skrald's motorer og sensorer

Diagrammer, printlayout & software

Diagrammet til controllerprintet (PIC)

Printlayoutet til controllerprintet (PIC)

Diagrammet til liniesensoren (øjne)

Printlayoutet til linesensoren (øjne)

Diagrammet til H-broen

Printlayoutet til H-broen

C-koden til PIC'en

Nedenstående links er til en manual til PIC16F84, skrevet af Niels Holmgaard Andersen. Det bilag et basalt kredsløb der omtales i rapporten (284Kb pdf-fil), er realiseret ved de ovenstående links til controllerprintet.

Hvis man vil eksperimentere med PIC'en er det nødvendigt at have databladet til PIC16F84, C2C-kompileren, og et brænde program PIP-02/com84 eller ICPROG (WIN'95).
P.S. Det skal bemærkes at C2C-kompileren er blevet et kommercielt produkt. Det anbefales at anvende den frie (1KW begrænset) version af cc5x. Den ovenstående kode er skrevet til C2C :-( Der er også en udvikling igang af en ny åben compiler.

Opgave

Banen i Robocup-konkurrencen er markeret med hvid tape, som køretøjerne, der skal være autonome, dvs. selvstyrende, kan følge. Der opnås points ved at køre gennem porte, der er opstillet med jævne mellemrum undervejs, så de køretøjer, der vælger at prøve kræfter med banens mere komplekse udfordringer, bliver belønnet for det.

Den opgave vi satte os selv på var altså at bygge et køretøj der kunne køre selvstændigt hen ad en hvid tapestribe. Vi valgte på forhånd de mere avancerede opgaver fra og koncentrerede os om bare at få skidtet til at køre og det gjorde vi så.

Opbygning

Madam Skrald er som navnet fortæller opbygget af genbrugskomponenter og bygget så billigt som muligt. Hendes motorer og gearsystem er genbrugt fra en 30 år gammel kampvognsmodel. Hjulene har tidligere tjent som låg på syltetøjsglas fra Den gamle Fabrik™, grundpladen er låget fra en kasse der har indeholdt cognacglas, batterimodulet og hele strømforsyningen stammer fra et defekt videokamera. Navnet er genbrugt fra den vise skraldebunke fra Fraglerne, som Niels var vildt bange for som lille. Alle de komponenter i designet der ellers ville have været dyre er altså kommet gratis.

Elektronikken har vi designet og bygget af komponenter, hvoraf nogle få af har været i brug før, men de fleste er dog købt til lejligheden. Designfilosofien har dog også her været så simpelt og så billigt som muligt, men dog med den begrænsning at det skulle være muligt at teste de enkelte moduler for sig. Vi valgte derfor at bygge de enkelte moduler over Universal Bus, der er en meget simpel bus designet af Niels netop til formål som dette.

Processoren er en 4 MHz PIC16F84 (MicroChip), der sidder på et kort der udover PIC'en selv har et simpelt interface til Universal Bus. Det kan adressere 7 andre kort, der kun behøver en enkelt transistor til adressedekodningen. (Vi har dog valgt at bruge fulde adressedekodere i de andre moduler med en HC688 af sikkerheds- og kompatibilitetsgrunde). Det er forberedt til seriel kommunikation via en MAX232 (Maxim), der dog ikke har været i brug endnu. Kortets helt store fordel er at chippen kan programmeres mens den sidder på kortet via LudiPipo-systemet man slukker for strømmen, kobler et ganske almindeligt serielkabel til det dertil indrettede stik, tænder igen og kan så lægge et nyt program ind i PIC'en. Kortet "picoController" er designet af Niels.

Sensorsystemet er også bygget så simpelt og billigt som muligt. Selve sensorerne består af 8 almindelige røde lysdioder, der bliver brugt som solceller. De får deres lys fra 2 3,6V pærer, der oplyser banen. Ved at måle hvor stor en fotostrøm den enkelte diode giver fra sig kan vi måle underlagets refleksion, der er højere jo lysere gulvet er. De lysdioder der befinder sig over en hvid tapestribe vil altså give en større fotostrøm end dem der kun ser gulvet. Strømmen forvandles til en spænding med en række transresistansforstærkere opbygget med LM324 4-dobbelte operationsforstærkere, og denne spænding sammenlignes med en enkelt reference af endnu 2 324'ere. Udgangssignalet går til et Universal Bus talkermodul samt til et display opbygget af en 74HCT541 8-dobbelt buffer og 8 lysdioder, så man kan se hvad sensorerne ser. Sensorsystemet er designet af Henrik.

Motordriverne er bygget omkring H-bro-kredsen L293D og kan styre 4 motorer bidirektionelt. Kredsene er stakket to og to for at øge deres belastbarhed. Også disse har fået lysdiodeindikation af aktivitet. De drives af et Universal Bus listenermodul. Kredsløbet er designet af Niels.

Batteriet er som fortalt fra et kasseret videokamera. De er ideelle til dette formål! De er relativt små og lette NiCd-celler der giver 6V med en kapacitet på 1 eller 2 Ah. De kommer med en oplader der også kan bruges som forsyning via et kabel til et attrapbatteri, der passer i samme holder som de almindelige batterier, og holderen er det bedste af det hele. Den holder batteriet på plads og giver en stabil elektrisk forbindelse på en særdeles nem måde. Vi vil anbefale kasserede videokameraer eller mobiltelefoner til alle der leger med mobil hjemmebygget elektronik. Batteriforsyningen går til en regulator, en 7805, der sørger for en relativt velreguleret 5V-forsyningsspænding til elektronikken. Desuden går den rå polspænding til pærerne, der oplyser banen, samt til motorerne.

Programmet er det sidste der lægges ind, men en meget vigtig faktor i hvor godt køretøjet vil klare sig. Det program der kørte på Madam Skrald var meget simpelt: Kør som udgangspunkt fremad og en ganske lille smule til højre. Mål på sensorerne og træk en værdi svarende til sensorernes output fra motorhastigheden i samme side. Pulsmoduler motorerne med fast frekvens, men styr pulsbredden med motorhastighedsvariablen (PWM). Gentag. Hvis Madam Skrald befinder sig lidt til højre for stregen vil de venstre sensorer modtage mere lys end dem til højre, venstre motor vil blive bremset lidt og fartøjet vil trække mod venstre og dermed nærme sig stregen. Grunden til at køre lidt til højre for ligeud er at vi i Robocuppen skulle holde til højre i alle skiftesporene for at undgå de svære opgaver som vores robot ikke kunne klare, hvilket vores program var sat alt for hurtigt sammen til at kunne tage højde for. Derfor valgte vi at lægge Madam Skrald i højre side og håbe at hun blev der, og det virkede fint det meste af tiden.

Lidelseshistorie

Madam Skrald blev bygget i en gevaldig fart, hvilket gav en del stress. Vi havde talt om at stille op med et eller andet i Robocup, der bare nogenlunde kunne køre på stregen, men det var blevet ved snakken og forhåndstilmeldingen samt nogle småforsøg med sensorer, hvorunder vi opdagede at almindelige lysdioder sagtens skulle kunne klare jobbet. Men først 1½ uge før konkurrencedagen kom vi ud af starthullerne. Heldigvis lå de fleste af stumperne i skuffen, men det tog da trods alt nogle dage at designe og bygge fartøjet, så først søndag aften den 25. april var vi færdige med at montere mekanikken og elektronikken på en plade.

Mandag løb kvalifikationsrunden af stablen, men da vi ikke engang havde fået testet vores robot og langt mindre fået lavet et styreprogram til den, var vi kun med som tilskuere. Vi brugte mandag eftermiddag og aften på at forsøge at programmere PIC'en, men det var den godt nok ikke meget for. Nogle gange lykkedes det, andre gange ville den bare ikke. Det var faktisk først tirsdag at vi fandt ud af hvad der egentlig gik galt. PIC'en skal have en høj spænding på sit reset-ben for at ville programmeres. Når vi gav den 5V fra en 7805-forsyning skulle denne høje spænding være højere end hvad serielporten på en almindelig computer gav (se LudiPipo-princippet), så vi kunne kun programmere den når vores batterier var næsten flade. Vi udnævnte altså et batteri til kørebatteri og et til programmeringsbatteri og skiftede mellem dem, hvilket vi efterhånden blev ret skrappe til. Ellers var der mange løse forbindelser og lignende at rette om mandagen og det var bare om at få dem udryddet inden vi gik i gang med at programmere den for alvor.

Tirsdag indrettede vi os et hjørne i PRG til programmerings- og byggehjørne. Det gik ikke uden forhindringer. Først prøvede vi med en medbragt lille bærbar, men det viste sig at den ikke kunne køre den c-compiler vi havde fundet, da det kræver en 386-maskine. Så lånte vi en af de pc'er der står i PRG, men den gav konsekvent protection mode-fejl når vi forsøgte at køre noget som helst. Til sidst måtte vi låne en nøgle og låse en pc ud af et skab, sætte den op og få den til at trække programmeringen. Det lykkedes altså til sidst, men først efter at vi havde spildt næsten 2 timer af den kostbare tid.

Derefter gik vi i gang med programmering og fejlfinding, hvilket er et stort stykke arbejde med moduler der er designet og bygget fra bunden. Ligger fejlen i en forbindelse, i en komponent, i printlayoutet, i mangelfuld programmering af PIC'en eller i programmet? Det er et meget stort stykke arbejde at få afluset et så mangefacetteret design, men det lykkedes til sidst at få den til at køre, og vi kunne flytte hele udstyret op til selve banen på Landingsbane A (den ene af de to store gange i DTU's hovedbygning) og begynde på rigtigt programdesign. Stor var glæden da Madam Skrald ved omkring kl. 19 tøffede hen ad linien på egen hånd for første gang! Herefter begyndte vi at optimere programmet, men vi løb hurtigt ind i et problem. Vi havde ikke tænkt på selv at kunne se hvad sensorerne så, så igen: Løb køretøjet af stregen fordi referencen var forkert indstillet, på grund af en tilfældig refleks i underlaget eller på grund af en programfejl?

Vi flyttede ned i PRG igen og lavede et lille print der kunne vise status på sensorerne. Det fungerede stort set med det samme, men under testen kom vi til at placere en af printene på en pæres uisolerede forbindelse til batteriets positive pol, hvilket medførte en kortslutning, et utal af brændte baner og den meget karakteristiske og ret ubehagelige lugt af brændt elektronik. Det tog os en hel time at få fundet og lappet de baner der havde haft det for lunt og det er virkelig et arbejde der kræver en engels tålmodighed, især med det ¤%"#¤ elendige print vi havde, men det lykkedes og vi kunne slutte strømmen igen, kun for at kunne se til mens en pære brændte af fordi dens partner i strømdelingen ikke mere var tilsluttet. Nu var gode dyr rådne, men vi løste problemet ved at slå de bagerste og midterste pærer fra og lade de to i siderne tage sig af resten. Det viste sig heldigvis at virke, men med den nye indikator kunne vi se grunden til at Madammen havde set lidt beruset ud når hun kørte. Dels havde en af operationsforstærkerne åbenbart lavere offsetspænding end den anden, for venstre side var meget mere allergisk overfor lys end den højre. Dette problem klarede vi ved at bytte om på forstærkerne indtil det nogenlunde passede. Mere alvorligt var det at udgangssignalet flakkede en del, hvilket kunne tyde på et selvsvings- eller ustabilitetsproblem. Vi besluttede os for at montere nogle 10uF kondenstorer direkte over operationsforstærkernes spændingsforsyninger, og se om det ikke hjalp.

Klokken 2 var vi tilbage på landingsbanen for at programmere videre. De nye indikatorer hjalp virkelig meget, men glæden og fremskridtene blev relativt kortlivede, for selv om køretøjet var lige på stregen drejede det hårdt til venstre. Vi ledte et godt stykke tid efter en forklaring i programmet, for vi havde før haft vore kvaler med C og PIC-processoren sammen og hver for sig, men til sidst lavede vi et lille program der simpelthen kørte begge motorer fremad, og da vi stadig fik en robotversion af en kædedans måtte vi se i øjnene at noget var helt galt. Kort efter strejkede venstre motor helt, og da var vi meget tæt på helt at give op. En ting er at klare sig med lidt færre pærer og nogle sammenlappede printplader, men uden motorer no way! Vi var ret langt nede da vi gik ned i PRG for at undersøge gear og motorer nærmere. Vi fik pillet motorerne ud af gearkassen og målte modstand på dem, og den viste sig at variere kaotisk mellem uendelig og nogle få ohm. Nå, vi havde jo intet at tabe, så vi bøjede deres metallåse og skilte dem ad. Hundevagten er ikke lige det bedste tidspunkt at forsøge sig i et nyt erhverv, men vi rensede kommutatorerne og forstærkede forbindelsen til dem med monteringstråd, og utroligt nok fungerede de efter den behandling! Til gengæld fungerede vi knapt nok mere. Vi smed batterierne til opladning (altså bilens) og drog ud i verden for at søge efter noget morgenbrød. Ved halv syv-tiden havde vi fået noget at spise men var stadig noget groggy efter en temmelig horribel nat. Vi ændrede lidt i programmet og forsøgte at lægge det ned i PIC'en, men det ville den simpelthen ikke. Vores opladning af batteriet havde hævet forsyningsspændingen så meget at serielporten ikke mere kunne overbevise processoren om at den skulle have sig et nyt program, så vi kunne simpelthen ikke programmere den indtil vi havde fået kørt batteriet lidt fladere. Altså tændte vi for bilen og lod den stå og køre på bordet indtil dens sidste pærer brændte af.

Nu var vi efterhånden ret ufølsomme overfor umulige problemer, så vi begyndte at sætte himmel og jord i bevægelse for at få fat i lommelampepærer, 2,5V, 0,3A. Vi startede en indsamling på vores elektronikhold da de ankom, men uden held. Vi besøgte Torben Ljunggren fra Institut for Automation, men igen uden held han var på ferie og vi kunne ikke finde nogle eksemplarer af den uddøende race glødelamperne nogensteds. Da butikkerne åbnede tog vi af sted og fandt heldigvis 4 3,6V 0,4A på hylden i SuperBrugsen. Vi satte tilbage mod DTU med pærer og cola og ramte guddødemig et af de talrige huller i cykelstien mod DTU, så colaer og pærer hoppede af bagagebæreren og spredtes ud over asfalten. Da vi havde besigtiget skaderne blev vi enige om at 2 pærer måtte være nok, og at hvis de også valgte at brænde måtte det være skæbnen der ikke ville have os med i RoboCup. Lidt over 10 var de nye pærer monteret og forbundne, så nu skulle der godt nok programmeres! Konkurrencen blev afholdt klokken 11. Vores fingre glødede indtil 10.45, hvor Madam Skrald version 4.1 viste sig i stand til at køre ca. halvdelen af banen igennem. Så stoppede vi, pustede tungt og ventede på vores tur, der desværre forløb noget mindre godt end ventet (og, mener vi, fortjent).

Resultater

Madam Skrald opnåede ikke et eneste point i konkurrencen, men det kunne (burde) hun have gjort. I 1. forsøg fik vi startet nedtællingen til guillotineporten før vi fik startet robotten, hvilket betød at vi ikke nåede forbi og ud på selve banen. I 2. forsøg røg vi simpelthen af stregen lige efter at vi var begyndt. Det var lidt ærgerligt at hun ikke opførte sig pænt til konkurrencen, men umiddelbart efter lavede vi en kørsel, der ville have givet 4 points, så hun kan godt, og det er det vigtigste. Det lykkedes os, to 2. semester E'ere, på 1½ uge at lave et autonomt (til tider lige lovlig autonomt) køretøj, der på en god dag kunne have placeret sig på en 5. plads ud af 16 tilmeldte, og det synes vi egentlig er tilfredsstillende i sig selv selvom selve konkurrencekørslen var ret dårlig.

Evner

Madam Skrald kan for det meste finde ud af at følge en tapestreg. Hun er ikke så stabil som man måske kunne ønske sig og har en tendens til at falde af hvis hun bliver udfordret, men som hovedregel løser hun sin opgave.

Begrænsninger

Systemet er ikke så stabilt som det kunne være. Både sensorerne og motorerne er ikke helt til at stole på, hvilket sætter den lille PIC på en alt for hård opgave. Sensorsystemet lider under en dårlig konfiguration; vi burde have sat sensorerne på linie i stedet for at dele dem op. Desuden er det meget følsomt over for både lysvariationer i omgivelserne og elektrisk støj, så de informationer der kommer fra det kan man ikke helt stole på. Motorer og gear har forskellige nok karakteristika til at gøre det temmelig besværligt at kontrollere deres hastighedsforhold. På trods af at venstre motor får mest strøm i "tomgang" er det ikke altid lige nemt at få hende til at dreje til højre, så styringen er alt andet end præcis. Endelig er softwaren temmelig primitiv. Den pulsmodulerer ret langsomt og bremser motorerne meget, hvilket da også gjorde hastigheden temmelig lav. Den virker ved hjælp af en look-up tabel for værdier af den byte som sensorerne giver og tænker altså ikke på den nuværende vinkel i forhold til stregen og lignende finurligheder, hvilket gør den til en ren kombinatorisk styring. Det medfører at fartøjet kan gå i selvsving og til sidst ryste sig helt af stregen. Desuden er muligheden for udvidelser ret lille. Det nuværende program er rigelig hurtigt, læser sensorerne med en 4-5 kHz, men det fylder omkring halvdelen af PIC'ens 1 kb hukommelse hvilket ikke giver meget plads til forbedring og videreudvikling. Alt i alt er begrænsningerne i den nuværende struktur så store at der reelt er brug for en helt nydesignet robot for at forbedre resultatet væsentligt, men erfaringerne fra denne skal nok komme Madam Skrald II til gode. Især vil det hjælpe hvis vi får startet i god nok tid til rent faktisk at planlægge hvad vi vil lave og hvordan :-)
Held og lykke
Vi håber at denne beskrivelse af vores problemer ikke har taget lysten fra nogen til at prøve selv. Det er utrolig udfordrende og sjovt at bygge små robotter - og det er ualmindelig tilfredsstillende at se dem fuldglade udføre deres lille gerning når det fungerer.
Nogle af de forbedringer af Madam Skrald vi har tænkt på kan ses her

Sidst opdateret den 11. december 2001

Valid HTML 4.01! Valid CSS!