← Systemy i automatyzacje

System rozproszony / ESP32

Civilization Zero.

Trzy urządzenia. Trzy niezależne światy.

Schemat procesu

Decyzje mieszkańców

Autorski system cywilizacji agentowych dla trzech urządzeń ESP32-S3. Każde prowadzi własny świat, przechowuje jego historię i wymienia informacje z pozostałymi. Budowałem wspólny silnik, komunikację, trwałość danych oraz obserwatorium pozwalające śledzić rozwój tych światów.

Historia i zakres pracy

Trzy światy bez jednego centralnego silnika

Każde urządzenie uruchamia własny silnik cywilizacji i zachowuje własny stan. Jeden z węzłów udostępnia dodatkowo lokalną stronę z publicznymi informacjami, ale nie staje się przez to sterującym centrum. Wiedza o sąsiadach pochodzi z odebranych wiadomości. Zbudowałem wspólne źródła oprogramowania dla wszystkich węzłów oraz oddzieliłem tożsamość świata od profilu, którym kompiluje się jego firmware.

Mieszkańcy, rodziny i społeczeństwo

Model obejmuje indywidualnych mieszkańców, gospodarstwa domowe, pracę, własność, pamięć i przekonania. Relacje społeczne i instytucje wynikają z działań oraz potrzeb tych agentów. Rozwijałem reguły lokalnych decyzji i ich konsekwencje dla całego świata. Nazwanie przez obserwatora większego zjawiska nie powinno sterować mieszkańcami. To pozwala badać przebieg symulacji bez wpisywania z góry oczekiwanego scenariusza.

Komunikacja, która uwzględnia zgubioną wiadomość

Przygotowałem komunikację przez ESP-NOW, z kontrolą poprawności pakietów, potwierdzeniami, ponawianiem i rozpoznawaniem duplikatów. Wymiana wymagająca uzgodnienia przechodzi przez osobne etapy przygotowania, akceptacji, zatwierdzenia i potwierdzenia wyniku. Sprawdzałem scenariusze utraty wiadomości, zmiany ich kolejności i restartu uczestnika. Ważne było, aby spóźniony albo powtórzony pakiet nie oznaczał wykonania tej samej operacji po raz kolejny.

Historia, która przeżywa restart

Rozwijałem zapis stanu i dziennika na urządzeniu oraz odzyskiwanie tożsamości po ponownym uruchomieniu. Zatrzymanie jednego węzła dotyczy jego własnego czasu; pozostałe nie muszą rozpoczynać świata od nowa. Praca obejmowała także odzyskiwanie po wcześniejszych problemach i zachowanie istniejących historii. Zmiana oprogramowania, odtworzenie zapisu i utworzenie nowej cywilizacji pozostają odrębnymi czynnościami.

Jeden silnik: komputer i urządzenia

Oddzieliłem logikę C++ od warstwy sprzętowej, dzięki czemu ten sam model można badać na komputerze i przygotować dla ESP32. Symulator pozwala zmieniać warunki sieci, odłączać węzły i odtwarzać ten sam przebieg. Praca obejmowała również uruchomienia na fizycznych płytkach oraz sprawdzanie ograniczeń pamięci. Wynik symulatora i obserwacja sprzętu odpowiadają na różne pytania, dlatego zachowuję obie ścieżki.

Rzeczywisty problem: pamięć przestrzenna mieszkańców

Podczas badania upadku dwóch światów znalazłem błąd w ograniczonej pamięci przestrzennej: kolejność przeglądania otoczenia wypierała użyteczne informacje o zasobach. Poprawka wybierała najlepszą zaobserwowaną żywność, materiał i najważniejsze zagrożenie. Nie dopasowywałem przy tym śmiertelności ani rozrodczości do oczekiwanego zakończenia. Porównanie wielu przebiegów pozwoliło sprawdzić przyczynę błędu przy zachowaniu różnych możliwych losów cywilizacji.

Obserwatorium i gazeta świata

Zbudowałem warstwę zbierającą publiczne informacje i pokazującą historię trzech światów obok siebie. Obejmuje ona lokalną stronę, zewnętrzny zapis obserwacji oraz rozwój gazety świata. Podgląd zachowuje informację o świeżości danych i nie dopowiada prywatnego stanu sąsiedniego węzła. Obserwator pozostaje poza silnikiem decyzji, dzięki czemu można analizować wydarzenia bez wpływania na ich wynik samym oglądaniem.

Co daje ta praca

Projekt połączył programowanie urządzeń, system rozproszony, model agentowy i narzędzia obserwacji. Pokazuje także mój sposób badania błędów: od historii zdarzeń do poprawki ich rzeczywistej przyczyny.

Portfolio przedstawia zbudowane elementy i historię badań. Nie jest podglądem bieżącego stanu urządzeń.