• Nie Znaleziono Wyników

Zjawisko respektu

W dokumencie Index of /rozprawy2/11382 (Stron 49-55)

Behawioralne algorytmy koordynacji ruchu robotów

4.2 Zjawisko respektu

Obserwacje świata ludzi i zwierząt stanowiły inspirację do stworzenia algorytmu bazującego na jednej z podstawowych zasad „respekcie”. Podświadome unikanie kon-fliktów z „większym” lub „silniejszym” oraz przekonanie, iż osobniki „mniejsze” będą ustępować pierwszeństwa osobnikom „większym” stanowi jedną z behawioralnych reguł tworzonego algorytmu. Zdefiniowany zestaw reguł pozwala na rozwiązanie złożonego problemu koordynacji ruchu przy wykorzystaniu prostych wzorców zachowań. Reguła ta nie musi być sztywno związana z cechą fizyczną danego osobnika, lecz może również wynikać z liczebności grupy.

Autonomiczny proces podejmowania decyzji przez człowieka, w najbardziej pod-stawowym problemie koordynacji, można sformułować jako: czy zmienić prędkość lub kierunek, gdy inna osoba zostanie zauważona na ścieżce kolizyjnej. W zaistniałej sy-tuacji, proces decyzyjny opiera się na ocenie ryzyka zbliżenia do drugiej osoby. Gdy w wyniku oceny sytuacji może zaistnieć potencjalne niebezpieczeństwo, należy przed-sięwziąć działanie zapobiegawcze w celu uniknięcia kolizji. Z drugiej strony, jeśli wynik analizy jest niejasny, można zaryzykować i nie zmieniać kierunku swojego ruchu licząc na to, że druga strona zmieni przebieg swojej trasy.

Ludzie i zwierzęta często mają tendencję do tworzenia grup tymczasowych w obliczu trudnych sytuacji. Ryby tworzą gęste ławice, aby uniknąć zjedzenia, a ludzie podążają za dużymi osobami, przepychając się przez tłum. Podążając w dużym skupisku, ludzie nie zwracają większej uwagi na osoby, które muszą się zatrzymać lub zmienić kierunek ruchu, by pozwolić im przejść.

Algorytm respektu został zaprezentowany po raz pierwszy w pracy [54].

Wzajemne grupowanie się robotów zainspirowane obserwacjami ludzi oraz zwierząt zostało za-modelowane za pomocą wzorów 4.1 oraz 4.2.

Wprowadzono sztuczną funkcję używaną do określenia, który robot posiada większy stopień respektu. Roboty nie negocjują ani nie wymieniają się żadnymi informacjami potrzebnymi do wyliczenia współczynnika. Żadnemu z robotów nie przypisuje się rów-nież odgórnie konkretnego stopnia respektu. Każdy z robotów autonomicznie, w sposób całkowicie zdecentralizowany wylicza wartość współczynnika respektu, bazując wyłącze-nie na obserwacji innych uczestników ruchu. Współczynnik respektu reprezentowany jest przez pojedynczą liczbę rzeczywistą kj obliczaną według wzoru:

kj =X i∈Z Dmax− dij Dmax · cos(φij) · fi ! (4.1)

kj Współczynnik respektu dla j–tego robota.

dij Odległość pomiędzy robotem i–tym oraz j-tym.

φij Kąt skierowany pomiędzy robotem i–tym oraz j–tym.

fi Bazowy współczynnik respektu dla i-tego robota. Znany wszystkim uczest-nikom ruchu oraz stały w czasie wyznaczania trajektorii ruchu przez wszystkich robotów.

Dmax Zasięg.

Z Zbiór robotów znajdujących się w zasięgu Dmax j-tego robota.

φij = αi− αj jeżeli i− αj| ≤ π 2 π 2 w innym przypadku (4.2)

αi Orientacja i–tego robota (kąt skierowany).

αj Orientacja j–tego robota (kąt skierowany).

W celu wyznaczenia współczynnika respektu do algorytmu należy dostarczyć ze-staw danych pomocniczych niezbędnych do obliczeń. Do właściwego wyliczenia współ-czynnika respektu konieczna jest znajomość pozycji wraz z orientacją poszczególnych uczestników ruchu. Konieczna jest również jednoznaczna identyfikacja każdego z uczest-ników ruchu w celu przydzielenia im bazowego współczynnika respektu (fi). Realizacje takiego zadania można powierzyć niezależnemu centralnemu systemowi lokalizacji. Ro-boty otrzymują od niezależnego systemu lokalizacji unikalny identyfikator wraz z po-zycją oraz orientacją wszystkich uczestników ruchu poruszających się w środowisku. Z tak dostarczonego zbioru metadanych charakteryzujących każdego robota z osobna konstruowany jest podzbiór Z składający się z robotów, które spełniają kryterium za-sięgu Dmax. Znajdujące się w pewnej odległości Dmax od siebie oraz poruszające się z w zbliżonym kierunku φij roboty stają się członkami wspólnej grupy. Wyliczony współczynnik respektu każdego robota jest sumą współczynników respektu wszystkich robotów tworzących grupę.

Wzajemne oddziaływanie członków grupy jest tym silniejsze, im bliżej siebie znaj-dują się poszczególne roboty. Tak zgrupowane roboty podnoszą stopień zwartości grupy, czyniąc ją tym samym mniej podatną na rozgrupowanie. Każdy robot, który znajdzie się w takiej grupie zwiększa swoje szanse na wykonanie powierzonego mu zadania na

przykład osiągnięcia zadanego celu.

Metoda posiada również wbudowany mechanizm rozwiązywania sytuacji konflikto-wych. W sytuacjach jeden na jeden, gdy dwa roboty jadą na siebie należy określić, który z nich powinien ustąpić pierwszeństwa. Aby zapobiegać sytuacjom konfliktowym tego typu wprowadzono bazowy współczynnik respektu (fi). Sumaryczna wartość

współczyn-nika respektu jest pomnożona przez bazowy współczynnik respektu, co w efekcie podnosi

priorytet jednego z robotów w sytuacji jeden na jeden. Parametr ten wpływa w mini-malnym stopniu na sumaryczną wartość obliczanego według wzoru 4.1 współczynnika

respektu (kj) dla grupy robotów.

Obliczony współczynnik respektu stanowi podstawę do podejmowania autonomicz-nych decyzji przez wszystkie roboty w grupie.

Na rysunku 4.1 przestawiono przykładowy labirynt, w którym umieszczono trzy roboty Robot1, Robot2, Robot3. Roboty 1 i 2 poruszają się w zbliżonym kierunku (α1 oraz α2) i odległość między nimi jest mniejsza niż Dmax, zgodnie ze wzorem 4.1 oraz 4.2 roboty te tworzą grupę. Wartość współczynnika respektu dla robotów 1 (k1) i 2 (k2) będzie tym większa, im mniejsza będzie odległość pomiędzy nimi (d12). Taka za-leżność zapewnia tworzenie zwartych grup i zapobiega rozpraszaniu się poszczególnych jednostek tworzących grupę.

d12 X Y α1 f1 k1 X Y α2 f2 k2 Dmax X Y α3 f3 k3 Robot1 Robot2 Robot3

Rysunek 4.1: Przykładowa konfiguracja trzech robotów w otwartej przestrzeni wraz

ozna-czeniami dla algorytmu bazującego na zjawisku respektu.

ro-botów 1 i 2. Wyliczony współczynnik respektu (k3) robota 3 będzie znacznie mniej-szy niż współczynniki zgrupowanych robotów 1 i 2. Zbiór Z składa się z robotów, które znajdują się w odległości mniejszej lub równej Dmax, dzięki czemu w obliczeniach uwzględniane są tylko te roboty, które faktycznie wpływają na poszczególnych uczest-ników ruchu. Każdemu z robotów Robot1, Robot2, Robot3 przydzielono jego bazowy

współczynnik respektu f1; f2; f3.

Bazując na zjawisku respektu stworzono dwie metody, których działania wykorzy-stują jego właściwości.

Pierwszy z algorytmów został nazwany Respect (R). Listing 1 przedstawia imple-mentację w pseudo-kodzie poszczególnych kroków działania algorytmu Respect (R).

Listing 1 Pseudo-kod implementacja algorytmu Respect (R).

1: procedure Respect

2: repeat

3: goali = Υ(posi)

4: Z ← RobotsW ithF ixedDistance(posi, Rob)

5: ki ← k(posi, Z)

6: robotsW ithLowerRespectT ooClose ← GetLowerRespectRobots(ki, Z)

7: robotsW ithHigherRespect ← GetHigherRespectRobots(ki, Z)

8: if robotsW ithLowerRespectT ooClose.Count > 0 then

9: κ(i, robotsW ithLowerRespectT ooClose)

10: else

11: if robotsW ithHigherRespect.Count > 0 then

12: κ(i, robotsW ithHigherRespect)

13: else

14: κ(i, ri)

15: until goali 6= ∅

Algorytm R pobiera lokalizacje uczestników ruchu (linia: 4), wyznacza swój

współ-czynnik respektu zgodnie ze wzorem 4.1 (linia: 5). W kolejnym etapie metoda sprawdza

czy trajektoria robota koliduje z trajektoriami pozostałych uczestników ruchu, czy też nie (linie: 6-7). Jeżeli trasa pokrywa się z trasą innego robota, w celu wyznaczenia pierwszeństwa dokonywane jest porównanie obliczonych współczynników respektu. Gdy

współczynnik respektu jest mniejszy niż współczynnik respektu robota kolidującego,

ro-bot zmuszony jest do ustąpienia mu pierwszeństwa i wyznaczenia nowej trasy (linia: 12). Jeżeli trajektoria robota nie koliduje z robotem o większym współczynniku respektu, robot wyznacza najkrótsza trasę do celu wykorzystując algorytm [98] (linia: 14). Do

wyznaczenia nowej bezkolizyjnej ścieżki w algorytmie R brane są pod uwagę wyłącz-nie te roboty, których obliczone współczynniki respektu są większe od współczynnika

respektu bieżącego robota (linia: 12). Algorytm zakłada, iż roboty o mniejszym współ-czynniku respektu ustąpią pierwszeństwa robotowi o wyższym współwspół-czynniku respektu.

Procedura powtarzana jest dopóty, dopóki wszystkie cele robota nie zostaną osiągnięte (linia: 15).

Listing 2 przedstawia implementację w pseudo-kodzie poszczególnych kroków dzia-łania algorytmu Respect+ (R+).

Listing 2 Pseudo-kod implementacja algorytmu Respect+ (R+).

1: procedure Respect+

2: repeat

3: goali = Υ(posi)

4: Z ← RobotsW ithF ixedDistance(posi, Rob)

5: ki ← k(posi, Z)

6: robotsW ithLowerRespectT ooClose ← GetLowerRespectRobots(ki, Z)

7: robotsW ithHigherRespect ← GetHigherRespectRobots(ki, Z)

8: allCollisionRobots ← GetAllCollisionRobots(ki, Z)

9: if robotsW ithLowerRespectT ooClose.Count > 0 then

10: κ(i, robotsW ithLowerRespectT ooClose)

11: else

12: if robotsW ithHigherRespect.Count > 0 then

13: κ(i, robotsW ithHigherRespect)

14: else

15: κ(i, allCollisionRobots)

16: until goali 6= ∅

Metoda Respect+ (R+), podobnie jak metoda Respect (R), pobiera lokalizacje ro-botów (linia: 4), oblicza współczynnik respektu (linia: 5), lecz wyznaczanie trajektorii ruchu przebiega w nieco odmienny sposób. W algorytmie R+ robot, który nie musi ustąpić pierwszeństwa ruchu przejazdu innym robotom, stara się pokonać trasę do celu bez modyfikowania swojej trajektorii. Jeżeli jednak nie jest możliwy bezkolizyjny ruch, dokonywana jest korekcja trajektorii uwzględniająca bieżącą pozycję innych uczestni-ków ruchu (linia: 15). Robot, którego obliczony współczynnik respektu jest mniejszy od współczynników respektu pozostałych uczestników ruchu, zobligowany jest do zmiany swojej trasy w celu ustąpienia pierwszeństwa (linia: 13).

wyż-szym współczynniku respektu znajdzie się zbyt blisko robota o niżwyż-szym współczynniku

respektu, robot zobowiązany jest do zatrzymania się. W algorytmach tych robot, który

ma większy współczynnik respektu nie czeka na to, aby robot o niższym współczynniku respektu ustąpił mu miejsca, lecz jedzie nie zważając na jego ruch. Taka sytuacja może doprowadzić do zderzenia się, gdy trajektoria którą musi pokonać robot o mniejszym współczynniku respektu jest na tyle skomplikowana, iż robot nie jest w stanie zdążyć przed zbliżającym się robotem o wyższym współczynniku respektu. W celu zapobie-gnięcia takim sytuacjom przyjęto wokół robota niewielką strefę ochronną gwarantującą mu uniknięcie kolizji. Ta niewielka strefa ochronna określa minimalną odległość na jaką mogą zbliżyć się do siebie roboty. W algorytmach przyjęto pewną stałą wartość odległo-ści pomiędzy robotami. Gdy odległość pomiędzy robotem o wyższym współczynniku respektu będzie mniejsza lub równa od przyjętej stałej w celu uniknięcia kolizji ro-bot o wyższym współczynniku respektu chwilowo zatrzyma się, aby roro-bot o niższym współczynniku respektu mógł ustąpić mu pierwszeństwa ruchu (algorytm R linia: 9, algorytm R+ linia: 10).

Listingi 3, 4, 6, 5 prezentują implementację w pseudo-kodzie funkcji pomocniczych wykorzystywanych w algorytmach koordynacji Respect (R) oraz Respect+ (R+).

Listing 3 przedstawiono implementację w pseudo-kodzie funkcji obliczającej współ-czynnik respektu dla j-tego robota.

Listing 3 Pseudo-kod obliczenie współczynnika respektu dla j-tego robota.

1: function k(posj, Z)

2: kjP

i∈Z

Dmax−d(posi,posj)

Dmax · cos(φ(posi, posj)) · fi 3: return kj

Listing 4 przedstawiono implementację w pseudo-kodzie funkcji wyznaczającej zbiór robotów znajdujących się w odległości Dmax od j-tego robota.

Listing 4 Pseudo-kod wyznaczenie zbioru robotów znajdujących się w odległości Dmax

od j-tego robota.

1: function RobotsW ithF ixedDistance(posj, Rob)

2: Z ← empty 3: for i ← 1 to n do 4: dij ← d(posi, posj) 5: if dij ≤ Dmax then 6: Z ← Add(ri) 7: return Z

Listing 5 przedstawiono implementację w pseudo-kodzie funkcji obliczającej dystans pomiędzy i-tym a j-tym robotem.

Listing 5 Pseudo-kod obliczenie dystansu pomiędzy i-tym a j-tym robotem.

1: function d(posi, posj)

2: dijq(xj − xi)2+ (yj− yi)2

3: return dij

Listing 6 przedstawiono implementację w pseudo-kodzie funkcji obliczającej kąt pomiędzy i-tym a j-tym robotem.

Listing 6 Pseudo-kod obliczenie kąta pomiędzy i-tym a j-tym robotem.

1: function φ(posi, posj) 2: if |αi− αj| ≤ π

2 then

3: return αi− αj 4: else

5: return π2

W dokumencie Index of /rozprawy2/11382 (Stron 49-55)

Powiązane dokumenty