Nowe technologie,  Sztuczna inteligencja (AI)

Robocie, co ty wyprawiasz?! Czyli kilka słów o określonym problemie z działaniem urządzeń autonomicznych

Roboty w naszych domach potrafią być bardzo pomocne, ale czasami ich działanie wprawia w konsternację. W tym artykule chciałabym zwrócić uwagę na problem potencjalnego utknięcia robota pomiędzy przeszkodami, a także kwestię bezpiecznej randomizacji akcji w dynamicznym lub półdynamicznym środowisku.

Prześledźmy problem utknięcia robota pomiędzy przeszkodami na podstawie znanych nam robotów sprzątających, a w praktyce odkurzających lub mopujących. To urządzenia, które samodzielnie przemieszczają się po pomieszczeniach. Powinny optymalizować trasę przejazdu, aby nie sprzątać wielokrotnie już oczyszczonych miejsc oraz przede wszystkim – wykonać swoją pracę. Chociaż ich działanie mieści się w zakresie definicji agenta, a nawet wykracza poza prostego agenta odruchowego, to nadal ich możliwości są dość ograniczone. Urządzenia te posiadają czujniki, a jednym z istotniejszych systemów w większości z nich jest LiDAR wykorzystujący światło lasera i pomiar jego odbicia w celu weryfikacji otoczenia. Niektóre posiadają także kamery, a całe systemy zakładają częściowe przetwarzanie danych na chmurach, czyli na zewnętrznych serwerach, co umożliwia tworzenie swoistego stanu wewnętrznego (informacji, których agent w danym momencie nie odczytuje, ale pozyskał je wcześniej, np. mapy pomieszczeń)1. Znaczna część pracy wykonywana jest również lokalnie przez samo urządzenie. Co jednak, jeżeli robot utknie bezradnie w jakimś miejscu?

Specyfika środowiska pracy robota bywa przepisem na problemy

Może zdarzyć się tak, że robot zostanie nieco uwięziony pomiędzy przeszkodami podczas wykonywania zadań. Dotyczy to szczególnie takich środowisk, które są dynamiczne lub półdynamiczne (przemieszczające się elementy otoczenia, ludzie, zwierzęta). W istocie zmiany następują w sposób ciągły i możemy powiedzieć, że środowisko jest w pewnym zakresie stochastyczne, gdyż z określonym prawdopodobieństwem można założyć pewne znane sytuacje, które przytrafią się odkurzaczowi autonomicznemu2. Zawsze jednak mogą pojawić się niespodzianki. Urządzenie może w efekcie utknąć pomiędzy meblami lub zostać zablokowane przez człowieka i otoczenie ścian czy szaf.

Obroty na małych przestrzeniach a kształt robota

Na pewno wielu zaobserwowało, że roboty sprzątające, które natrafią na przeszkody, wykonują obroty, czasami pełne, innym razem o pewien kąt. I właśnie dlatego tak ważny jest ich kształt. Zwróciliście uwagę na fakt, że producenci bardzo często oferują odkurzacze automatyczne o okrągłym kształcie? Moglibyśmy założyć, że to preferencja firm w zakresie design, ale być może kryje się w tym coś więcej. Uprośćmy sobie analizę, sprowadzając robota do dwóch wymiarów, a więc figur: koło i kwadrat. Okrągły kształt oznacza, że robot może swobodnie obrócić się o dowolny kąt bez zmiany miejsca położenia tak, że nie zajmuje innej przestrzeni niż ta, na której już się znajduje. Może zabrzmiało to zbyt skomplikowanie, ale w istocie chodzi o to, że obracając się wokół środka, centralnego punktu, robot nadal jest dokładnie w tym samym miejscu, zajmuje cały czas tę samą przestrzeń. Kształt kwadratowy jest trochę gorszy pod tym względem, jednak całkiem optymalny, gdyż długość wszystkich boków jest identyczna. Okrągły robot ma jednak pewną przewagę, gdyż w przypadku obrotów wokół własnej osi w bezpiecznym położeniu zajmuje wyłącznie przestrzeń obejmującą jego kształt i ani trochę więcej, co w nieznanym środowisku oznacza zerowe ryzyko uderzenia w przeszkodę. Kwadratowy robot musiałby zachować większy odstęp od potencjalnej przeszkody, inaczej krawędzią mógłby uderzyć w jakiś element otoczenia. To oczywiście dotyczy urządzeń, takich jak odkurzacze automatyczne, w których zwrotność na małych przestrzeniach jest istotna, a ruch może odbywać się w różnych kierunkach.

Możemy to opisać w inny sposób, ale jeżeli powyższy schemat wystarczająco dobrze obrazuje ten problem, to proponuję przejść do kolejnego śródtytułu poprzez kliknięcie tutaj. Całość sprowadza się do powierzchni koła wpisanego w kwadrat i opisanego na tym samym kwadracie. Jeżeli mamy koło o określonym promieniu oraz kwadrat o boku długości średnicy, podwójnego promienia tego koła, to mogą one nam się wydawać zbliżone wielkością na szerokość oraz długość w najszerszych miejscach, chociaż mają inne pola ([2r]dla kwadratu i πrdla koła, gdzie r to promień koła). Jednakże kwadrat, obracając się o 360 stopni wokół punktu centralnego, zajmuje przestrzeń koła o powierzchni wykraczającej poza powierzchnię samego kwadratu. Bazując na naszym przykładzie, będzie to π[((2r)x21/2)/2]2. Natomiast koło będzie zajmować dokładnie przestrzeń własnej powierzchni, czyli może bezpiecznie obracać się, stojąc nieco bliżej przeszkody. Nadal jednak kwadrat wraz z kołami umożliwiającymi obrót o 360 stopni to całkiem dobry kształt dla robota. Można jednak powiedzieć, że minimalna przestrzeń bezpieczna dla kwadratu wykracza poza samą powierzchnię kwadratu, więc koło wypada w takim zestawieniu nieco lepiej, co obrazuje powyższy schemat.

Gorzej sprawa wygląda w przypadku prostokątnego kształtu podczas obrotu względem punktu centralnego. W tym wypadku przy takich ruchach robot zmienia swoje położenie na tyle, że mógłby uderzyć w przeszkodę. To oznacza pewne ograniczenie w możliwości wykonywania obrotów, gdy robot zostanie uwięziony po stronie dłuższych boków, a lepszym rozwiązaniem byłaby jazda w przód lub tył na osi równoległej do najdłuższych boków, ewentualnie obrót o pewien kąt względem tej osi, a także opcja dystansowania się od przeszkody poprzez zmianę ustawienia kół i ruch wzdłuż krótszych boków. Należy jednak pamiętać, że zwrotność samego urządzenia zdeterminowana byłaby również jego proporcjami. Ma to znaczenie w przypadku małych przestrzeni, w których zwrotność jest dość istotna, a kierunek jazdy może być potencjalnie dowolny, jak to ma miejsce w przypadku robotów sprzątających. Można sobie bowiem wyobrazić sytuacje, w których to właśnie plan prostokąta byłby najbardziej naturalny dla danego urządzenia autonomicznego.

Randomizacja jako pewien sposób na rozwiązanie problemu

Na pewno wnikliwy Czytelnik zastanawia się teraz, jakie znaczenie mają te obroty, oprócz zwykłego pozyskania informacji o przestrzeni. W końcu roboty sprzątające czasami obracają się o inny kąt niż 360 stopni, jakby wcale nie próbowały odczytać danych. Co gorsza, obracają się o jakiś kąt i jadą prosto, napotykają przeszkodę, by na nowo zacząć się obracać. Wtedy właśnie pojawia się pytanie: „robocie, co ty wyprawiasz?!”, ponieważ działanie robota zaczyna przypominać losowe wybieranie trasy. I w części przypadków to może być prawda. Robot, który utknie pomiędzy przeszkodami, może być zaprojektowany tak, aby wykonać w pewnych określonych sytuacjach bezpieczne losowe ruchy, żeby znaleźć jakąś drogę. Mówiąc bardziej poprawnie – robot może mieć zaimplementowaną randomizację3. Wykonanie losowego ruchu o określony kąt, a następnie próba podjechania do przodu przez robota, to dobry sposób wyjścia z trudnego położenia. Kształt okrągły i obrót o różne kąty dają potencjalnie dużą zwrotność, w końcu robot może obrócić się bezpiecznie o dowolny kąt i podjechać, ale jednocześnie – mniejszą przewidywalność toru ruchu. Robot sprzątający może w każdej chwili wykonać ruch po linii prostej, skręcić o 90 stopni, ale też o inny kąt, zawrócić, jeździć w poprzek pokoju. Tak zaprojektowane urządzenie musi być bezpieczne. Możemy teraz zacząć analizować, co oznacza „bezpieczne rozwiązanie” w tym wypadku. Czasami będzie to skomplikowany system unikania jakiejkolwiek kolizji, innym razem przygotowanie urządzenia na bezpieczną kolizję z otoczeniem. W istocie pod pojęciem „bezpiecznego ruchu losowego” kryje się skomplikowany system sprzętowy i związany z oprogramowaniem. W końcu nikt nie chciałby, aby jego odkurzacz uszkodził wszystko dookoła ze ścianami włącznie i jeszcze skrzywdził domowników.

Obok czujników wyprzedzających zderzenie z przeszkodą, ważna jest też detekcja kolizji. To powoduje, że odkurzacz autonomiczny nie będzie uparcie jechać w napotkaną część ciała domownika, czyli do ustąpienia drogi przez użytkownika lub do wyładowania się baterii. Takie urządzenie jest lekkie i niegroźne, gorzej sprawa wyglądałaby z cięższym „przeciwnikiem”. Ważne jest też to, żeby robot mógł eksplorować otoczenie i pozyskać dodatkowe informacje do wykorzystania w przyszłości bez narażania się na zdenerwowanie użytkowników. Działanie takich czujników kolizji najłatwiej sobie wyobrazić na przykładzie automatycznych drzwi garażowych lub bram, chociaż w tym wypadku stanowią one jedynie aspekt zabezpieczenia, nie pozwalają na pozyskanie informacji i uczenie się. Bez takich detektorów lub z uszkodzonymi czujnikami tego typu drzwi zamykają się do skutku, pomimo tego, że natrafiły na przeszkodę, co może być groźne dla zdrowia lub życia.

Wracając jednak do losowości ruchu. Dlaczego losowy ruch jest sensowny, skoro jest losowy? W końcu można z czujników odczytać, gdzie jest ściana. Owszem, często można. A co, jeżeli robot zostanie uwięziony przez ruchome przeszkody, np. inne roboty? 

Dynamiczne przeszkody jako trudne problemy

Na nagraniu widzimy dwa roboty, które wykonują serię tych samych lustrzanych ruchów. W zasadzie obie maszyny świetnie unikają kolizji, jednocześnie – nie są w stanie wykonać zadania. Ta sytuacja nie jest do końca nam znana, stąd nie możemy wnosić o tym, co się tutaj w istocie wydarzyło. Potraktujmy jednak ten film jako inspirację. Załóżmy hipotetycznie, że mamy dwa roboty w pełni autonomiczne, poruszające się w przód i w tył, obracające się o jedno- oraz wielokrotność 90 stopni, które niefortunnie uwięziły się pomiędzy statycznymi przeszkodami oraz blokują się wzajemnie. Randomizacja działania agenta mogłaby w pewnym zakresie okazać się pomocna. Tym bardziej, jeżeli oba urządzenia, a w zasadzie specyfika sztucznej inteligencji, powoduje dążenie do optymalizacji w procesie wykonywania ruchów, w uproszczeniu – ruchy niezbliżające do celu to pewnego rodzaju strata.

Taki losowy ruch to nie tylko przemieszczenie się na osi przód-tył, ale też zaprzestanie ruchu, zmiana prędkości, niestety każde z takich działań mogłoby też pogorszyć sytuację. Jednocześnie mało możliwe byłoby, że dwie maszyny w sposób ciągły losowałyby dokładnie taką samą serię ruchów, np. raz do przodu i raz do tyłu. Zapewne w końcu któreś urządzenie podjechałoby o 1,5 bazowego odcinka do przodu, a drugie o jakiś inny ułamek bazowego odcinka do tyłu lub o odmienne odległości określone w standardowych miarach (np. metrach). Podjeżdżanie wyłącznie o bazową długość lub jej wielokrotność, np. odcinek równy długości najdłuższego boku, również byłoby obarczone problemami. Należy też zaplanować odczyt z czujników, gdyż zbyt duże odcinki przerw w odczycie mogą zakończyć się kolizją z przeszkodą, a długość takiego odcinka będzie zależała od parametrów urządzenia.

Inne sposoby wyciągania robota z opresji niż losowość ruchu

Zapewne teraz znajdą się osoby, które zawiodły się na myśl, że losowość ma być sposobem na problem, który w końcu należałoby rozwiązać „bardziej inteligentnie”. A poza tym: „co to za inteligentne maszyny, skoro mają losować ruch!”. I najważniejsze: „czy nie da się tego zrobić tak, żeby to było bardziej inteligentne niż losowanie?”. W zasadzie można spróbować, ale wymaga to kolejnych rozwiązań. 

Spójrzmy na zachowanie pieszych. Jako ludzie wymijamy się na chodnikach, nie korzystając przy tym ze wzorów. Tak po prawdzie, mało kto z nas chciałby w drodze do pracy zostać przepytany z matematyki lub fizyki, z pewnymi wyjątkami, gdy ktoś bardzo ucieszyłby się, że może w końcu wykazać się swoją wiedzą przy okazji prozaicznej trasy z domu do pracy. Większość ludzi wymija się, korzystając z pewnej wiedzy zdroworozsądkowej, konwenansów, zasad i norm kulturowych, a także analizując intencje drugiej osoby, czyli – komunikując się. Jednocześnie w przypadku sztucznej inteligencji i maszyn takie zdroworozsądkowe działania wraz z prawami fizyki na pewnym poziomie systemu przekładane są właśnie na działania matematyczne.

Ludzie wysyłają sobie pewne komunikaty, dzięki którym odczytują i interpretują zachowanie drugiej osoby, a następnie starają się zareagować adekwatnie do sytuacji. Do tego korzystamy także z pewnych konwenansów czy norm kulturowych, które wskazują, że przykładowo wchodzący przepuszczają wychodzących lub osoba otwierająca drzwi poprzez bilet, kartę magnetyczną przechodzi, ponieważ ukończyła pomyślnie weryfikację. Nie ma też co ukrywać, że w przypadku różnic kulturowych łatwo o nieporozumienia w takich sytuacjach. Czasami jednak przytrafia się dość prozaiczna niezręczna wymijanka. Zdarzyło Wam się trafić na kogoś, przy kim stwierdziliście w końcu „zostaję po tej stronie, bo nigdy się nie wyminiemy!”? W praktyce byliście zmuszeni wylosować, że pozostajecie po jednej ze stron lub wybraliście taką, którą uważacie za „właściwą”, np. dla ruchu prawostronnego lub lewostronnego. Przy okazji zapewne zwolniliście kroku, by dać czas drugiej stronie na reakcję, być może nawet przystanęliście na moment albo wymieniliście kilka słów. Obiektywnie, nie udało Wam się z tym człowiekiem ustalić intencji ruchu, gdyż obie osoby chciały ominąć tę drugą i korygowały swoje działanie w tym samym czasie.

Robot nie analizuje intencji drugiego robota, bo ten intencji nie ma. Mógłby jednak wykryć prawidłowość, skomunikować się lub stosować pewne ograniczenia, reguły (np. robot, który powinien zadokować się do ładowania, przepuszcza robota wyjeżdżającego, chociaż to też może powodować pewne problemy). Gdyby jednak robot sam miał decydować o swoim ruchu na podstawie wykrywania prawidłowości działania innego robota, to znowu może pojawić się znany nam problem. Co stanie się, jeżeli oba urządzenia w tym samym momencie wykryją taką prawidłowość i wykonają najbardziej efektywny lustrzany ruch, czyli tylko o jeden ruch bazowy więcej na osi przód-tył w kierunku wolnej przestrzeni, gdyż o dwa ruchy więcej to strata zasobów? Znowu utkną… Chociaż właściwie zaplanowane algorytmy mogą sprawić, że po pewnej serii ruchów mają szansę wyminąć się, zanim wyczerpie im się bateria. 

Roboty oczywiście mogą się różnić dostępnymi zasobami (czujniki i inny hardware), oprogramowaniem, celem i sposobem weryfikacji osiągnięcia tego celu, a przy wystarczająco skomplikowanych systemach – stanem, nawet gdy posiadają identyczne oprogramowanie i znajdują się w zbliżonej sytuacji. Pewne różnice mogłyby spowodować, że losowość nie byłaby potrzebna w momencie chwilowego uwięzienia robotów. Skoro jednak nie ma reguł ograniczających czy warunkujących ruch, ani różnic warunkujących odmienność decyzji czy opcji skomunikowania się robotów, a maszyny nie mogą „uzgodnić” lub „ustalić” „intencji” jak ludzie, to losowość ruchu w bezpiecznym kierunku wydaje się sensowna, nawet jeżeli nie jest w pełni optymalna. Dopóki nie jest to pojazd autonomiczny na drodze lub robot-pieszy przechodzący przez jezdnię.

Robot musi sprostać wymaganiom społeczeństwa stworzonego dla ludzi

Pojazdy i inne urządzenia autonomiczne na drodze muszą działać w zgodzie z zasadami ruchu, co stanowi obiektywne ograniczenie losowości akcji. Kierowcy ze specyfiki pojazdów, przepisów ruchu drogowego poruszają się do pewnego stopnia przewidywalnie, a jednak to już skomplikowany problem do rozwiązania podczas projektowania samochodów autonomicznych. Nieco gorzej byłoby z tłumem pieszych na przejściu, którzy nie omijaliby uprzejmie robota, a ich ruch może być bardzo trudny do przewidzenia. Ktoś się śpieszy, ktoś niesie wielkie paczki, jakieś dziecko zagapi się lub schyli po zabawkę, która mu wypadła, kolejna osoba idzie z psem merdającym do każdego przechodnia i razem z nim za pomocą smyczy tworzy potencjalną pułapkę dla innych osób. No i do tego należy dodać wszystkie przypadki, gdy autonomiczna maszyna jest zaskakiwana zachowaniem niezgodnym z przepisami ruchu drogowego, które wymusza działanie niemieszczące się w standardowych regułach. Słowem dynamiczne środowisko, o bardzo niskiej przewidywalności.

Na ten moment ludzie przeciętnie radzą sobie lepiej niż sztuczna inteligencja w środowisku społecznym, które jest dynamiczne, trudne do przewidzenia, niedeterministyczne, z potencjalnie nieskończoną liczbą stanów. W końcu jest to środowisko, które w naturalny sposób tworzą ludzie i zostali w nim wychowani, więc mają dobrze zinternalizowane pewne informacje na jego temat, a także posiadają niezbędne umiejętności. W tym samym czasie sztuczna inteligencja może wykonać określone zadania dla ludzi, których ci wykonać samodzielnie nie potrafią, nawet jeżeli z punktu widzenia człowieka są one dość skomplikowane. Pewnym paradoksem dzisiejszych czasów jest to, że pomimo rosnących możliwości sztucznej inteligencji, a nawet imponujących wyników dla określonych zadań, nadal część prostych czynności dla człowieka pozostaje bardzo trudna do rozwiązania dla AI. Jeżeli jednak myślimy o przyszłości, w której roboty, pojazdy autonomiczne będą wymijać się na chodnikach, w naszych domach oraz na ulicach, to coś co ludzie robią zdroworozsądkowo, musi zostać odpowiednio zaprojektowane, by zachować bezpieczeństwo i uniknąć niezręcznych lub niebezpiecznych sytuacji. 

A co z trójkątem? Czyli adnotacja poza głównym wątkiem rozważań

Jeżeli jesteś jednym z tych Czytelników, którzy dobrnęli do końca tego długiego tekstu, to na pewno zastanawiasz się nad jednym brakiem niezwiązanym z głównym wątkiem rozważań. Mianowicie – co z kształtem robota na bazie trójkąta? No i muszę odpowiedzieć szczerze – to bardziej skomplikowany temat, gdyż taka konstrukcja daje zupełnie inne możliwości, ale też wiąże się z pewnymi trudnościami. W uproszczeniu na potrzeby analizy obrotu o 360 stopni względem punktu centralnego figury, możemy wpisać trójkąt w prostokąt, gdzie długość podstawy i wysokości to długości boków prostokąta. Cała analiza obrotu o 360 stopni w pobliżu przeszkody będzie zatem zbliżona do budowy na planie prostokąta, a efekt końcowy będzie zależny od proporcji boków tak utworzonej figury. Do tego dochodzą także inne aspekty konstrukcyjne. W każdym razie, jest to temat poboczny, na nowy wpis.

  1. Stuart Russell, Peter Norvig, Sztuczna inteligencja. Nowe spojrzenie, wyd. IV, tom 1, Gliwice 2023, s. 69-80. ↩︎
  2. Ibidem, s. 63-67. ↩︎
  3. Ibidem, s. 71. ↩︎