Projekt der omhandler agenters optræden i et mulitagentsystem baseret på LegoMindstorms NXT miljø.

Gruppemedlemmer.:

Nicklas Frederiksen – nifre11@student.sdu.dk

Tobias Normann Kettelz – toket12@student.sdu.dk

Bjarke Thøger – bjtho12@student.sdu.dk

Martin René Jakobsen – marja09@student.sdu.dk

Casper Hahn – cahah11@student.sdu.dk


•Introduktion

Den grundlæggende ide for projekt skovrobotten er at opbygge en autonom robot ved hjælp af Lego NXT i programmeringssproget, NXC. Omdrejningspunktet er opbygning og programmering af multiagentsystemer. Casen er at disse agenter skulle være forskellige, og denne gruppe, Projekt Skovrobotten, skal opbygge og programmere en robot kaldet Skovrobotten. Denne skovrobots mål er at afsøge to definerede områder for forsvundne børnerobotter. Ét, et fællesområde for alle autonome robotter i multiagentsystemet. Tó, et privat område kaldet skovområdet, der er markeret med grøn farve på banens overflade. Skovrobottens primære ansvar er afsøgning i skovområdets areal, da dette område ikke skal afsøges af andre robotter. Skovrobotten skal have en grad af autonom intelligens, der gør den i stand til, at undvige tilfældige opstillede træer i skovområdet, aflæse kortets forskellige farvearealer, kommunikere med Børne-robotterne, samt finde tilbage til et defineret start/slut område på kortet.

Motivation

Emnet, opbygning og programmering af multiagentsystemer, er særdeles vigtigt at stifte kendskab til, da man i dag ser flere og flere multiagentsystemer baseret både på software/hardware niveau og software niveau alene. I et multiagentsystems opbygning, som i det overordnede fælles projekt har et fælles mål, er det vigtigt nøje at få beskrevet og afklaret detaljer, således at alle projektets medlemmer arbejder inden for et fælles problemspace og derved undgår flest mulige faldgrupper.

I dette tilfælde, hvor agenterne skal fungere i et miljø, hvor der er forskellige områder med hver deres udfordringer giver det god mening at udvikle et multiagentsystem. I stedet for at udvikle en agent, der skal forsøge at fungere i flere forskellige miljøer, er det hensigtsmæssigt at udvikle flere forskellige agenter, der er målrettet hver deres submiljø. Derved kan de forskellige agenter hjælpe hinanden til at udføre den overordnede opgave mere effektivt ved at distribuere ansvarsområder.

 

Problem formulering

Er det muligt at opbygge en autonom Lego NXT-robot, der kan agere på egen hånd i et defineret område og kommunikere med andre autonome robotter?

Kan det lade sig gøre for robotten at lede efter og finde et afgrænset område, og derefter ændre adfærd, når området er fundet? Kan robotten undgå sammenstød med træer og samtidigt lede efter andre agenter indenfor dette afgrænsede skovområde?

Orientering

Målet for Projekt Skovrobotten er, at opbygge en autonom robot i Lego NXT, der indgår i et større multiagentsystem. Her skal Skovrobotten starte sin afsøgning efter børne-robotter i et defineret start/slut område. Skovrobotten skal kunne finde vej i kortets områder og have et enhedsbestemt ansvar for afsøgning på kortets skovområde.

For at få løst ovenstående problemstilling vil gruppen foretage følgende.:

1) Finde den mest hensigtsmæssige metode til opbygning af robottens fysiske konstruktion i Lego.

2) Få kendskab til og designe robottens software arkitektur i NXT udviklingsmiljøet, således at robotten opfører sig autonomt.

3) Iterativt teste robottens hardwarekomponenter og softwarealgoritmer for at eliminere flest mulige antagelser.

 

Metode og materialer

Konceptuelt design

Det konceptuelle design af projekt Skovrobotten lyder som følgende. At konstruere en autonom robot, der på eget initiativ analyserer miljøet omkring sig, tager beslutninger baseret på det observerede miljø og derefter reagerer mest hensigtsmæssigt i forhold til de definerede mål.

Det overordnede mål for multiagentsystemets helhed er, at finde de såkaldte Børnerobotter, der tilfældigt bevæger sig rundt i systemets miljø. Delmålene for Skovrobotten er, at undersøge om der er objekter i miljøet, der kan give fysiske sammenstød og forsøge at undvige disse, at aflæse miljøets farvekoder for at orienterer sig om private og ikke-private områder, samt finde miljøets start-/slutpunkt og at kunne kommunikerer med andre robotagenter omkring fund af Børnerobotter.

Konstruktion af Skovrobotten

I den indledende fase af projektet blev der blandt gruppens medlemmer igangsat en undersøgelse af robottens mulige opbygning. Projektgruppens tidligere erfaring med opbygning af robotbiler fortalte os at vægtfordelingen og placeringen af bilernes motorer var vigtig for bilens evne til at dreje om sin egen akse, hvilket ville være påkrævet i skovmiljøet. Gruppen studerede andre projekters konstruktion af robotbiler via søgninger på relaterede forums og YouTube.com.

Det lykkedes gruppen at finde en passende guide til opbygning af robotbilen på[http://www.nxtprograms.com/NXT2/multi-bot/vehicle/steps.html]. Med denne opbygning i Lego ville der være plads til robottens påkrævet sensorer og aktuatorer inden for et forholdsvis snævert område, der ville gøre Skovrobotten i stand til at manøvrerer rundt mellem de opstillede træer.

Via den omtalte guide blev den første prototype Skovrobotten opbygget. Prototype ét havde monteret følgende elektriske komponenter. Aktuatorer: 2x Lego NXT motorer. Sensorer: 1x Ultralyds afstandssensor, 1x Bluetooth sensor, 1x Optisk farvesensor. Alle sensorerne tilhører Lego NXT udviklingsmiljøet. Metoden til at styre Skovrobottens aktuatorer og sensorer skulle ske igennem en Lego NXT controller, der blev programmeret via Lego NXT softwareprogram Bricxcc.

Prototypekonstruktioner

Tidligere blev det nævnt, at Skovrobotten’s prototype 1  blev opbygget ved hjælp af en guide. Via tests foretaget at gruppen, blev det klart at flere justeringer i prototypens konstruktion var nødvendige.

Prototype 1 havde en gearing fra de to Lego NXT motorer, der bestod af tandhjul med runde knopper. Denne tandhjuls gearing resulterede i, at der var et uhensigtsmæssigt slæk i mellem tandhjulene, der gjorde Skovrobottens trækkraft ujævn i lav fart. Ligeledes gjorde slækket det besværligt, at lave en præcis ønsket drejningskurve. Dette problem blev løst ved, at udskifte tandhjulene med mere præcise og fler-tandede tandhjul. Samtidig blev der monteret to elastikker der løftede den konstruktion hvor farvemålersensoren var monteret. Dette skyldes, at gruppen havde haft bedre farvemålingsresultater, når sensoren pegede en smule fremad i stedet for at have en 90 graders vinkel på underlaget.

Projekt Skovrobotten elastikker til løft af farvesensor

Den nye prototype 2 var nu i stand til at trække mere jævnt i lav fart, samt gjorde det muligt at lave en forholdsvis præcis drejnings kurve når dette var ønsket. Det blev under udviklingen af prototype 2 også bestemt, at Skovrobotten skulle være udstyret med to NXT Ultralydssensorer i stedet for kun én som i prototype 1. Dermed var der mulighed for, at afsøge et større areal foran robotten og kode robottens undvigemanøvre i forhold til, hvilken én af sensorerne der opfangede et objekt. Undvigemanøvrens software blev kodet således, at hvis et objekt blev opfanget af venstre sides sensor skulle robotten dreje mod højre og hvis højre sides sensor opfangede et objekt skulle robotten dreje til venstre. Hastigheden hvormed den drejer bliver justeret i forhold til hvor tæt på sensoren registrerer objektet. Det sikrer at et objekt der bliver opdaget meget sent stadig undgås. Dette er fremvist i den følgende kode.

if (Dright < 18 && Dright < Dleft) {
	int temp = 35 * 18 / Dright;
	OnRev(OUT_A, temp);
	OnRev(OUT_C, -temp);
	Wait(300);
	OnRev(OUT_AC, FORWARD_SPEED);
} else if (Dright > Dleft && Dleft < 18) {
	int temp = 35 * 18 / Dleft;
	OnRev(OUT_A, -temp);
	OnRev(OUT_C, temp);
	Wait(300);
	OnRev(OUT_AC, FORWARD_SPEED);
}

I en senere prototype 3. blev der på Skovrobotten monteret en LED-diode under robottens bund. Denne LED-diode skulle gøre farvedetekteringen af robottens farvemålerer mere konsistent. Tidligere test havde vist, at farvemålerne var meget let påvirkelige af skygger og lysindfald på multiagentsystemets bane. LED-dioden afhjalp problemerne med skygger og forskellige lysindfald, da robotten nu havde sin egen lyskilde. For at illustrere forskellen på at bruge en LED og ikke bruge en, er her to grafer der viser måledata. Målingerne er taget ved at lade robotten dreje omkring sig selv, så der tages målinger med lysindfald fra omgivelserne fra alle retninger.

Skovrobotten - Måling på grøn uden LED

Skovrobotten - Måling på grøn med LED 100%

Som det kan ses på grafen for måling uden LED, så er værdierne ud over det hele, hvorimod målingerne med LED ligger på en fast værdi.

I selve programmet bruges dette til, at finde ud af hvad værdierne er af de forskellige farver på banen. Kalibreringen af farve værdierne i selve programmet er blevet lavet så der laves et gennemsnit af alle de målte værdier. Se følgende kode.:

sum[3] = { 0, 0, 0 };
OnRev(OUT_A, 60);
OnRev(OUT_C, 10);
for (int i = 1; i <= NrCallibration; i++) {
	ReadSensorHTColor(S1, c, r, g, b);
	sum[0] = sum[0] + r;
	sum[1] = sum[1] + g;
	sum[2] = sum[2] + b;

	Wait(55);
}
Off(OUT_AC);
//De tre RGB værdier beregnes
greenCal[0] = sum[0] / 100; //R
greenCal[1] = sum[1] / 100; //G
greenCal[2] = sum[2] / 100; //B

At lave kalibreringen på denne måde, frem for bare at tage en måling er, at det sikre en mere repræsentativ værdi. Hvis en der kun blev taget en måling, er der er en mulighed for, at den enkelte værdi afviger fra det egentlige miljø.

For at finde ud af hvilken farve der måles på, bruges de beregnede værdier, og hvis de ligger inden for et bestemt grænse, bliver farven vurderet som fundet. Hver farve er unik nok til, at der er ikke er noget overlap. Et eksempel på dette vises i følgende kode.:

if ((greenCal[0] + greenTresh[0] > rMean) &&
	(greenCal[0] - greenTresh[0] < rMean) &&
	(greenCal[1] + greenTresh[1] > gMean) &&
	(greenCal[1] - greenTresh[1] < gMean)) {
	color = "green";
}

Grunden til der ikke bliver tjekket på den blå RGB farve er, at under alle testene lå denne altid på nul.

Resultater

Endelige opbygning af Skovrobottens konstruktion

Den endelige opbygning af Skovrobotten er lavet med afsæt i guiden, der blev fundet på nettet. Robottens hardware er herunder listet i punktform:

  • 1 Lego NXT
  • 2 Lego motorer
  • 4 hjul, hvor kun de forreste to er udstyret med dæk
  • 1 hvid LED
  • 2 afstandssensorer
  • 1 farvesensor
  • 1 IR-sensor

Konstruktionen hvorpå farvesensoren er monteret er blevet stabiliseret ved hjælp af omtalte elastikker. Denne stabilisering medførte mere pålidelige målinger fra sensoren. Gearet på Skovrobotten er ændret i forhold til guiden. De valgte tandhjul har flere tænderSkovrobotten - Flere tandhjul

Dette har gjort robottens bevægelse mere stabil og mere hensigtsmæssig.

For at farvesensoren får pålidelige målinger, er der placeret en hvid LED på undersiden af robotten.

Skovrobotten - LED på undersiden

 

Model of Organization for Multiagent Systems

Skovrobotten har fire missioner, som alle afhænger af hinanden. Vi har her taget udgangspunkt i Model of Organization for Multiagent Systems (MOISE) modellen(Hannoun, 2000). Disse fire missioner kaldet m1, m2, m3 og m4 bliver fuldendt når deres mål er opnået. Den første mission er at sende børnerobotten hjem. Det eneste den gør her er at checke IR sensoren, og sende børnerobotten hjem, hvis den kan se den. m2 kører samtidig med m1. I m2 prøver robotten at finde vej til skovarealet, og hvis den tilfældigvis finder børnerobotten på vejen, så bliver m1 opfyldt. m2 er altså opfyldt når skovrobotten finder skovarealet. Når skovrobotten har fundet skovarealet starter m3. I m3 prøver skovrobotten at undgå træerne i skoven. Den begynder at læse på ultralydssensoren, og korrigerer retningen så snart den ser et træ. m4 kører hele tiden. I m4 læser skovrobotten på RGB sensoren, og vender om hvis den ser en anden farve end grøn.Skovrobotten - Moise Model

Diskussion

Vores endelige resultat er en robot der i virkeligheden kun kan køre rundt på banen. Sensorerne til Mindstorms er ikke altid helt responsive, og bliver hurtigt upræcise. Dette har gjort, at der er blevet brugt for meget tid på at få robotten til at bevæge sig rundt på banen. Bedre sensorer ville muligvis have ledet til mere tid til udviklingen af bluetooth som virkede ordentligt. Derudover er miljøet, hvor robotten skal agere, blevet ændret flere gange undervejs projektet. Iterationerne er naturligvis gjort ud fra det miljø, som robotten har ageret i. Overfladen på den endelige bane er anderledes end den tidligere bane. Denne ændring af miljøet medførte, at robottens farvesensor slet ikke kunne skelne mellem banens farver.

Vi har her listet nogle highlights over vore løsninger.:

Fordele

  • Med to ultralydssensorer kan man bestemme retningen som robotten drejer, når den støder på et træ.
  • LED-dioden under robotten giver rigtig gode resultater med farvegenkendelse.
  • En lavere fart sørger for at robotten når at reagere på forhindringer inden den støder ind i træerne.
  • Random-funktionen, som robotten kører efter, når den befinder sig i det hvide område, gør at robotten kan søge efter Børnerobotter i store dele af det hvide område.
  • Den implementerede software kalibreringsopløsning sørger for, at robottens farvesensor kan indstilles til at opererer i flere forskellige lysniveauer.

Ulemper

  • Dårlige sensorer har resulteret i at gruppen har brugt alt for lang tid på at finde software og hardware løsninger der kun kunne skabe middelmådige resultater.
  • To afstandssensorer er ikke altid nok til at undgå objekter og træer. Når robotten drejer om sin egen akse rammer bagenden til tider objekterne placeret på banen.
  • Random-funktionen kan medføre, at robotten bruger lang tid på at finde skovområdet.

Mangler og overvejelser

Selve kommunikationen mellem barn og skovrobot er der ikke kigget så meget på endnu. Det vil sige at skovrobotten, kun ser ud som om den leder efter barnet uden rigtig at gøre det. Den bevæger sig altså bare rundt, indtil man stopper den.

Vi startede med kun at have en enkelt ultralydssenstor. Med to ultralydssensorer kunne vi styre, hvilken retning robotten skulle dreje, når den nåede et træ. Selvom det stadig ikke er et perfekt resultat, gav det det bedste resultat sætte sensorerne, så de begge peger ligeud. Vi eksperimenterede med at vinkle dem i forskellige retninger, men det kom vi væk fra igen, da objekter lige foran robotten ikke blev detekteret.

En anden idé var at montere larvefødder på robotten, men det var der ikke plads til, så vi besluttede os for at holde os til almindelige hjul.

Konklusion

Dårlige sensorer og ændringer på banen har resulteret i en masse dobbeltarbejde. Når det så er sagt, så kan robotten navigere på egen hånd rundt på banen. Den kan skelne mellem farver og derved undgå at køre ud af det markerede område. Derudover kan den identificere det grønne område, og ændre adfærd, når den finder dette. Den kommer kun en gang imellem til at vælte et træ, og den kan for det meste holde sig inden for det grønne felt. Bluetooth forbindelsen imellem børnerobotten og skovrobotten, virker som sådan, men skovrobotten kan ikke fortælle børnerobotten at den skal vende hjem.

Perspektivering

I et fremtidigt perspektiv ville det være hensigtsmæssigt med en bane, der tidligere i projektet er klar. Meningsfulde iterationer af software og hardware afhænger af et stabilt miljø. Det kan også vise sig nyttigt, at anvende en anden type hardware. Eksempelvis Arduino, hvor der findes mere præcise sensorer. Sensorerne der passer til Legos NXT har vist sig at være upålidelige.

Det næste skridt i udviklingen af multiagentsystemet ville være at sikre kommunikation mellem agenterne.

Kilder

Hannoun, M. Boissier, O. and Sichman S. (2000): MOISE: And Organizational Model for Multi-Agent Systems. São-Paulo: Springer Berlin Heidelberg.

 

Samlede software til Projektskovrobotten.:

Skovrobot_kode

Leave a Reply