Algoritmhjälp sökes: GPS-positionering inom ett visst område

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Illuwatar
Inlägg: 2256
Blev medlem: 10 november 2003, 14:44:27
Skype: illuwatar70
Ort: Haninge
Kontakt:

Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av Illuwatar »

Jag har ett praktiskt problem jag skulle vilja ha hjälp med då robotnavigering inte är min stora grej. Vad jag behöver göra är att avgöra om ett mobilt objekt, försett med en GPS-mottagare, befinner sig inom ett visst område. En bild hjälper mig att förklara:

Bild

Tanken är följande: Man definierar upp området med hjälp av ett antal kända hörnpunkter som anges med sina respektive positionskoordinater (long/lat). Mellan dessa punkter anses gränserna vara helt raka (behöver inte krångla till det för mycket). Antalet punkter är godtyckligt, likaså deras position. I bilden motsvaras det av punkterna 1 - 6.

Den mobila enheten (den gula rektangeln) kan nu antingen vara innanför det angivna området (A) eller utanför (B). Ombord finns en GPS som kontinuerligt ger ifrån sig koordinater i samma format som hörnpunkterna har. Här kommer mitt dilemma - hur avgör man om objektet är innanför området eller inte? Mina kunskaper inom matematik och robotteknik är inte tillräckliga här, jag vet inte ens vad jag skall googla efter...

Målet är att trycka in algoritmen (tillsammans med en del annat) i en ARM-processor, närmare bestämt en AT91SAM7S256.

Hoppas på lite hjälp från någon robotfantast här på detta forum...
Användarvisningsbild
callelj
Inlägg: 351
Blev medlem: 9 april 2008, 18:03:25
Ort: Linköping

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av callelj »

Hmm, kul problem. Känns lite som datorgrafik, det borde finnas en smart lösning på problemet.
Jag har en lösning som kanske inte är helt optimal dock:

1. Skapa trianglar av din yta (ex 1-2-6, 6-5-2, 5-3-2, 4-5-3)
2. Kolla om bilens mittenpunkt ligger i någon av trianglarna.
Det går att lösa genom lite linjär algebra, hittade ett exempel:
(V1, V2 är vektorer från en punkt i triangeln till de andra två punkterna)

Kod: Markera allt

For each side of triangle
   V1 = T1 - P
   V2 = T2 - P
   N1 = V2 x V1
   Normalize N1
   d1 = -P0 • N1
   if ((P • N1 + d1 ) < 0)
      return FALSE;
end
Användarvisningsbild
JonasJ
Inlägg: 653
Blev medlem: 11 september 2007, 16:02:26
Ort: Kinna
Kontakt:

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av JonasJ »

Från comp.graphics.algoritmh FAQ:
Subject 2.03: How do I find if a point lies within a polygon?

The definitive reference is "Point in Polygon Strategies" by
Eric Haines [Gems IV] pp. 24-46. Now also at
http://www.erichaines.com/ptinpoly.
The code in the Sedgewick book Algorithms (2nd Edition, p.354) fails
under certain circumstances. See
http://condor.informatik.Uni-Oldenburg. ... index.html
for a discussion.

The essence of the ray-crossing method is as follows.
Think of standing inside a field with a fence representing the polygon.
Then walk north. If you have to jump the fence you know you are now
outside the poly. If you have to cross again you know you are now
inside again; i.e., if you were inside the field to start with, the total
number of fence jumps you would make will be odd, whereas if you were
ouside the jumps will be even.

The code below is from Wm. Randolph Franklin <wrf@ecse.rpi.edu>
(see URL below) with some minor modifications for speed. It returns
1 for strictly interior points, 0 for strictly exterior, and 0 or 1
for points on the boundary. The boundary behavior is complex but
determined; in particular, for a partition of a region into polygons,
each point is "in" exactly one polygon.
(See p.243 of [O'Rourke (C)] for a discussion of boundary behavior.)

int pnpoly(int npol, float *xp, float *yp, float x, float y)
{
int i, j, c = 0;
for (i = 0, j = npol-1; i < npol; j = i++) {
if ((((yp<=y) && (y<yp[j])) ||
((yp[j]<=y) && (y<yp))) &&
(x < (xp[j] - xp) * (y - yp) / (yp[j] - yp) + xp))

c = !c;
}
return c;
}

The code may be further accelerated, at some loss in clarity, by
avoiding the central computation when the inequality can be deduced,
and by replacing the division by a multiplication for those processors
with slow divides. For code that distinguishes strictly interior
points from those on the boundary, see [O'Rourke (C)] pp. 239-245.
For a method based on winding number, see Dan Sunday,
"Fast Winding Number Test for Point Inclusion in a Polygon,"
http://softsurfer.com/algorithms.htm, March 2001.

References:
Franklin's code:
http://www.ecse.rpi.edu/Homepages/wrf/r ... npoly.html
[Gems IV] pp. 24-46
[O'Rourke (C)] Sec. 7.4.
[Glassner:RayTracing]


Read more: http://www.faqs.org/faqs/graphics/algor ... z0bxFxaaJA
Användarvisningsbild
callelj
Inlägg: 351
Blev medlem: 9 april 2008, 18:03:25
Ort: Linköping

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av callelj »

JonasJ: Ok, lite bättre kanske... :-) Visste att nån borde ha filurat på samma problem. :-)
Användarvisningsbild
4kTRB
Inlägg: 20838
Blev medlem: 16 augusti 2009, 19:04:48

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av 4kTRB »

Om det inte räknas att du är utanför området förrens den
gula lådan släppt kontakten med gräslinjen så kan du
alltid ha tex grön färg på allt utanför området och låta
den gula lådan ta reda på vilken färg den omges av
på samtliga dess sidor.

Alltså är den gula lådan helt omringad av grönt så vet
den att den är utanför.
Användarvisningsbild
Illuwatar
Inlägg: 2256
Blev medlem: 10 november 2003, 14:44:27
Skype: illuwatar70
Ort: Haninge
Kontakt:

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av Illuwatar »

Många bra tips så pass snabbt - man tackar. Det sistnämnda fungerar dock inte då miljön kan vara godtycklig. Utomhus med andra ord och med hyfsade avstånd mellan punkterna. Nä, matematik är vägen att gå och jag skall kolla närmare på alla dessa formler när jag är klarare i huvudet...
Användarvisningsbild
4kTRB
Inlägg: 20838
Blev medlem: 16 augusti 2009, 19:04:48

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av 4kTRB »

Du har ju punkterna och kan rita en karta i datorn och färglägga där.
Sedan ritas lådan in i kartan och programmet analyserar karta och
lådans omgivningsfärg.
Användarvisningsbild
Illuwatar
Inlägg: 2256
Blev medlem: 10 november 2003, 14:44:27
Skype: illuwatar70
Ort: Haninge
Kontakt:

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av Illuwatar »

Koden skall köras i en liten ARM, inte en PC. Den har mer hästkrafter än minne (64k RAM)...
limpan4all
Inlägg: 8458
Blev medlem: 15 april 2006, 18:57:29
Ort: Typ Nyköping

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av limpan4all »

Du kan ju göra det hela lite enklare om du byter kartformat till RT90 då får du ut X och Y direkt i meter och det är ett helt ortogonalt system inom ditt område.
Användarvisningsbild
dechaine
Inlägg: 521
Blev medlem: 7 september 2006, 21:29:51
Ort: Skene

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av dechaine »

I min handburna Garmin har jag en inställning där gpsen "varnar" när jag kommer tillräckligt nära en angiven koordinat... Om man tar reda på hur den algoritmen fungerar, kan man ju istället fixa en algoritm som delar upp din angivna yta i ett rutnät med hjälp av koordinatgeometri. I detta rutnät, där varje ruta är... låt oss säga 10x10m placeras den första algoritmen ut i ett rutmönster som täcker hela ytan.. Om gpsen "varnar" är du/den/det i det angivna området...
Användarvisningsbild
4kTRB
Inlägg: 20838
Blev medlem: 16 augusti 2009, 19:04:48

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av 4kTRB »

Klarar ARM inte mitt förslag så lär den inte klara så väldigt mycket.
Tvivlar på att den är så pass processor svag.
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av Johanb »

Tänk också på att du inte alltid har full upplösning på GPSen, den kan mycket väl visa 20-30m fel eller mer beroende på olika faktorer. Dock borde den någorlunda känna till felmarginalen.
Användarvisningsbild
JonasJ
Inlägg: 653
Blev medlem: 11 september 2007, 16:02:26
Ort: Kinna
Kontakt:

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av JonasJ »

Callej: Ledsen :)

4kTRB: Vad skulle fördelen vara att lösa det enligt en sådan algoritm jämfört med att lösa det rent matematiskt? Jag kan inte se någon själv så jag är lite nyfiken på vilka fördelar du ser.
Användarvisningsbild
Meduza
EF Sponsor
Inlägg: 10718
Blev medlem: 30 april 2005, 22:48:05
Ort: Ekerö, Stockholm
Kontakt:

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av Meduza »

Johanb skrev:Tänk också på att du inte alltid har full upplösning på GPSen, den kan mycket väl visa 20-30m fel eller mer beroende på olika faktorer. Dock borde den någorlunda känna till felmarginalen.
Felmarginalen kan man relativt enkelt kompensera bort en del av genom att ha en fast likadan gps-mottagare på en punkt du "vet" koordinaterna på och sedan hela tiden
räkna den kända koordinaten mot vad gpsen säger och därmed få en offset mot verklig position, skicka sedan denna korrektionsdata och applicera denna offset även på ditt rörliga objekt konternuerligt,
detta minskar felmarginalen betydligt då dom en stor bit av felmarginalen kommer från atmosfäriska störningar och därmed är rätt lika inom några kilometers radie.

Samma princip som kommersiella DGPS-system.

http://blog.makezine.com/archive/2009/1 ... c_gps.html
Användarvisningsbild
4kTRB
Inlägg: 20838
Blev medlem: 16 augusti 2009, 19:04:48

Re: Algoritmhjälp sökes: GPS-positionering inom ett visst område

Inlägg av 4kTRB »

JonasJ skrev:Callej: Ledsen :)

4kTRB: Vad skulle fördelen vara att lösa det enligt en sådan algoritm jämfört med att lösa det rent matematiskt? Jag kan inte se någon själv så jag är lite nyfiken på vilka fördelar du ser.
Jag bara reflekterade över kommentaren att det skulle bli för tungt för processorn
att räkna ut att objektet har alla sidor mot fel yta.
Skriv svar