/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
fuzzy logic til robotstyring
Fra : Jens Petersen


Dato : 12-09-06 09:37

Jeg sidder og roder med at lave et simpelt system til en selvkørende robot,
så den ikke støder ind i ting.
Jeg har fire afstandssensorer: for,bag,venstre og højre, og skal styre
vinkel- og lineær hastighed.

Det skal sættes om som et fuzzy logic-system, og det er som udgangspunkt
simpelt nok, men...
For de fire sensorretninger definerer jeg bare en "nærheds-klasse", så
eksempelvis en afstand på 0 er ekstremt nær, en afstand på 200 er slet ikke
nær, og nærheden falder lineært mellem de to yderligheder.
Man kan så find ud af hvor meget afstanden i de fire retninger tilhører
"nær", og jeg skal så finde ud af hvordan jeg vil styre.
Nu definerer jeg så at hvis robotten er nær noget til venstre, så skal den
dreje til højre og omvendt. Tilsvarende skal dens lineære hastighed være lav
hvis der er noget nær foran.
I ovenstående forklaring forsimpler jeg lidt tingene, men spørgsmålet er
også mest hvad jeg gør hvis nu jeg er meget nær noget foran, men ikke bare
vil stoppe op, men istedet dreje væk. Man kan sagtens lægge for-sensorens
"nærhed" ind i beregningen af vinkelhastigheden også, men... hvis jeg nu
gerne vil have at robotten drejer til den side hvor afstanden til nærmeste
objekt er størst, og ikke bare altid dreje til eksempelvis venstre nær et
objekt, hvad så?

Jeg har altså fire medlemsskaber af "nær" for de fire retninger. Hvis
vinkelhastigheden er -100 til +100 og jeg tegner det som en 1d-funktion, så
bliver venstres nærheds-medlemsskab til en trekant ude i højre side (nær
noget til venstre giver tilbøjelighed til at dreje til højre) og højres
nærhed giver en trekant til venstre. Når jeg ved i hvor høj grad jeg er nær
noget til venstre og højre, så kan jeg skalere de to trekanter og finde
deres massemidtpunkt og dermed min vinkelhastighed.
Det jeg som sagt er usikker på er hvordan jeg kan få med at hvis jeg er
meget nær noget foran, så skal jeg dreje til den side med "mindst nærhed",
sådan at er jeg nær noget foran og er jeg længst fra noget til venstre, så
drejer jeg til venstre.

Det virker lidt som om jeg ikke kan kombinere de to beslutninger i eet
skridt?
Den mere banale løsning er at lade højre og venstre sensor styre rotation og
lade for og bag sensore styre hastighed. Det betyder bare at hvis robotten
køre direkte mod en mur, så vil den ikke dreje af, men istedet stoppe op. Så
kunne man istedet lade forsensoren definere både hastighed og en tendens til
at dreje til venstre. Robotten vil så altid dreje af mod venstre, hvis da
ikke venstre sensor modarbejder det ved at være nær et objekt. Det virker
bare ikke optimalt.

Er der nogle som har et hint til hvorfor min u-optimale metode er god nok,
eller hvordan jeg kan lave det bedre? Det skal være ren fuzzy logic som
giver hastighed og vinkelhastighed, så jeg kan ikke smide almindelig logik
efter det også.



 
 
Michael Zedeler (12-09-2006)
Kommentar
Fra : Michael Zedeler


Dato : 12-09-06 22:34

Jens Petersen wrote:
> Jeg sidder og roder med at lave et simpelt system til en selvkørende robot,
> så den ikke støder ind i ting.
> Jeg har fire afstandssensorer: for,bag,venstre og højre, og skal styre
> vinkel- og lineær hastighed.
>
> [..]
>
> Jeg har altså fire medlemsskaber af "nær" for de fire retninger. Hvis
> vinkelhastigheden er -100 til +100 og jeg tegner det som en 1d-funktion, så
> bliver venstres nærheds-medlemsskab til en trekant ude i højre side (nær
> noget til venstre giver tilbøjelighed til at dreje til højre) og højres
> nærhed giver en trekant til venstre. Når jeg ved i hvor høj grad jeg er nær
> noget til venstre og højre, så kan jeg skalere de to trekanter og finde
> deres massemidtpunkt og dermed min vinkelhastighed.
> Det jeg som sagt er usikker på er hvordan jeg kan få med at hvis jeg er
> meget nær noget foran, så skal jeg dreje til den side med "mindst nærhed",
> sådan at er jeg nær noget foran og er jeg længst fra noget til venstre, så
> drejer jeg til venstre.
>
> Det virker lidt som om jeg ikke kan kombinere de to beslutninger i eet
> skridt?

Hvis jeg forstår dig ret, er det fordi sensoren forand vil vise at noget
kommer tættere på, når din robot drejer, hvis den er endt i et hjørne?
(Foruden at du kan være så uheldig at robottens sidesensorer viser samme
afstand.) Hvis du har en tilstand hvor robotten styrer ved at bruge
front- og sidesensorerne, virker det umiddelbart som om at du er nødt
til at skifte til en tilstand, der går ud på at dreje væk fra hjørnet,
når robotten ender i det. Først når den er drejet helt væk fra hjørnet,
kan du skifte tilbage til den første tilstand igen.

> Den mere banale løsning er at lade højre og venstre sensor styre rotation og
> lade for og bag sensore styre hastighed. Det betyder bare at hvis robotten
> køre direkte mod en mur, så vil den ikke dreje af, men istedet stoppe op. Så
> kunne man istedet lade forsensoren definere både hastighed og en tendens til
> at dreje til venstre. Robotten vil så altid dreje af mod venstre, hvis da
> ikke venstre sensor modarbejder det ved at være nær et objekt. Det virker
> bare ikke optimalt.

Det kommer lidt an på hvad for muligheder, du har. Hvis det er muligt
kan du jo lave det sådan at kun når frontsensoren indikerer at robotten
er meget tæt på noget, tager dens tendens til at dreje til venstre over.

Jeg så en RUC-studerende fremlægge sit speciale, hvor han havde brugt
genetiske algoritmer til at finde det mest optimale neurale netværk til
styring af en robot. Det kan sikkert overføres til fuzzy kredsløb, men
det kan blive meget omfattende, så hvis du ikke har ressourcer til det,
er vejen frem nok at rode videre med noget som er udviklet i hånden.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste