KATEGORIE:

Ta strona wykorzystuje pliki cookies (ciasteczka) tylko w celu budowy statystyki odwiedzin. Możesz zablokować tę funkcję w swojej przeglądarce.




Sztuczna inteligencja w Blenderze (017; 27.08.2009; blender)

 

 

Wśród praktykujących elektroników bardzo popularne jest tworzenie mechatronicznych robotów. Zadaniem części z nich jest branie udziału w zawodach walk robotów. Chociaż uważam, że projektowanie takich robotów oparte głównie na wyobraźni (gdy nie mamy jeszcze sprawnego prototypu) jest bardzo rozwijające, to jednak chciałbym przedstawić pewną alternatywę, która może pomóc przede wszystkim w projektowaniu algorytmów sterowania robotami.

 

Przedstawię zatem prosty model dwóch walczących robotów o odmiennych parametrach zachowania i oczywiście plik źródłowy do uruchomienia w Blenderze (BlenderBots.blend). Prostota tworzenia reguł rządzących obiektami w środowisku gry Blendera pozwoliła stworzyć tą symulacje nie korzystając zupełnie ze skryptów Python. Na początek najlepiej będzie zaprezentować działanie gry (symulacji):

 

 

Blender robots from MyInventions on Vimeo.

 

 

 

Budowa robota.

 


 

Bottom - korpus robota; obiekt typu Dynamic. Poprzez aktuator Motion/ServoControl nadaną ma prędkość liniową wzdłuż lokalnej osi X. Dwa sensory Message odbierają informacje z radarów i odpowiednio nadają prędkość obrotową.

 

Rradar/Lradar - obiekty podlegające pod obiekt Bottom. Sensory typu Radar ustalone są dla wyszukiwania obiektów z parametrem Env w obszarach, które dodatkowo reprezentują półprzezroczyste zielone stożki. Radary w przypadku zadziałania wysyłają informacje do obiektu Bottom stosując aktuator Message.

 

Top - wieża robota; obiekt typu Dynamic z zastosowanym wiązaniem Hinge pozwalającym na jej obrót względem korpusu. Sensor typu Radar ustalony został do wyszukiwania obiektów z parametrem Enemy w obszarze, który dodatkowo reprezentuje półprzezroczysty czerwony stożek. Radary wysyła informację o koniecznym wystrzale do obiektu Cannon stosując aktuator Message.

Cannon - obiekty typu Empty podlegający pod obiekt Top. W przypadku otrzymania od niego informacji o wystrzale, uruchamia aktuator EditObject/AddObject. Wygenerowany zostaje wtedy obiekt Bullet (znajduje się na warstwie drugiej; obiekt typu Rigid Body) z zadaną prędkością początkową.

 

Dodatkowo ustalone jest dość duże tłumienie dla uzyskania płynności ruchu. Robot czerwony przemieszcza się wolniej od robota niebieskiego, ale ma większy zasięg dla radaru wieży i częściej może oddawać strzały.

 

 

 

I co dalej?

 

Zachęcam do eksperymentowania z podaną sceną zarówno znawców tematu silnika gry Blendera, jak i nowicjuszy w tej tematyce. Przede wszystkim warto zwrócić uwagę na wpływ wartości różnych parametrów na zachowanie obiektu (prędkość ruchu, tłumienie obrotowe, kąt stożka radaru, przerwy między wywoływaniami sensorów...). Oczywiście warto rozwijać inteligencję robota stosując nie tylko Logic Editor, ale również skrypty Python, które to nie mają prawie żadnych ograniczeń możliwości ingerencji w grę.

 

 

Pobierz ten artykuł w formacie pdf: PDF

 

© Copyright Sebastian Korczak 2009 - 2017