Eine Python-Bibliothek für den Entwurf und die Steuerung künstlicher Schwärme.
Dieses Paket enthält Werkzeuge zur Steuerung oder Simulation spezifischer Hardwareteile eines Roboters, der (i) sich fortbewegen, (ii) erfassen und (iii) kommunizieren kann, mit dem Ziel, experimentelle Forschung im Bereich des künstlichen Schwärmens durchzuführen. Es enthält auch einige Modelle des Schwarmverhaltens, die mit diesen Tools erstellt wurden. Weitere Informationen finden Sie unter http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/
Der Entwurf von Robotern, die diese Bibliothek verwenden, besteht aus drei Hauptteilen:
Die Marabunta-Bibliothek folgt dieser Struktur und stellt die folgenden Klassen bereit:
Body
-Modell mit den erforderlichen Methoden zur Verwendung als Roboterkörper. Alle Körpermodelle sollten von dieser Klasse erben, um von BaseRobot
akzeptiert zu werden.Body
zur Simulation eines Roboterkörpers. Für die Verwendung ist keine Hardware erforderlich. Um Hindernisse in die Simulation einzubeziehen, kann eine Datei mit einer Koordinatenliste geladen werden.Body
Implementierung zur Steuerung eines eBots. Erfordert eine Bluetooth-Verbindung, einen eBot und die entsprechende Installation der eBot-API.Network
mit den erforderlichen Methoden zur Verwendung als Netzwerk eines Roboters. Alle Netzwerkmodelle sollten von dieser Klasse erben, damit sie von BaseRobot akzeptiert werden.Network
zur Simulation der Kommunikation mithilfe regulärer Dateien (vorausgesetzt, die verschiedenen Roboter befinden sich auf demselben Computer oder können zumindest auf dieselben Dateien zugreifen). Für die Verwendung ist keine Hardware erforderlich.Network
mit einem XBee der Serie 1. Erfordert einen XBee, der über einen seriellen Port angeschlossen ist.BaseBody
erbt, und eine Netzwerkinstanz , die von BaseNetwork
erbt.MockBody
zu simulieren. Die Hindernisse werden aus einer Datei geladen und mithilfe von „Verlet-Listen“ in einem Raster gespeichert, um einen schnellen Zugriff auf lokale Hindernisdaten zu ermöglichen. Um das Modul zu installieren, geben Sie Folgendes ein:
python setup.py install
(Je nach System ist möglicherweise sudo
erforderlich.) Dadurch werden das marabunta
Modul und sein Untermodul marabunta.models
installiert.
Um eBots über eBotBody
steuern zu können, muss die eBot-API installiert sein. Die offizielle Version finden Sie unter https://github.com/EdgeBotix/eBot-API. Eine Abzweigung dieser API, die die Host-CPU verwendet, um die Lokalisierung des Roboters durch Implementierung eines Kalman-Filters zu berechnen, anstatt sich auf die eBot-Lokalisierung zu verlassen, finden Sie unter https://github.com/david-mateo/eBot-API.
Um ein Roboterverhalten zu entwerfen, sollte man eine neue Klasse definieren, die von BaseRobot
erbt. Die Initialisierung von BaseRobot
erfordert einen Körper, der als eine von BaseBody
erbende Klasse implementiert ist, und ein Netzwerk, eine von BaseNetwork
erbende Klasse.
Um Unterstützung für neue Hardware hinzuzufügen, sollte man Klassen implementieren, die von BaseBody
oder BaseNetwork
erben. Diese Klassen enthalten die minimale Liste von Methoden, die jeder Körper oder jedes Netzwerk implementieren sollte.
Um die bereitgestellten Methoden zu verwenden, um den Roboter dazu zu bringen, sich nach einem bestimmten Verhalten zu bewegen, beispielsweise einem Überschriftenkonsens, muss man den Körper, das Netzwerk, den Roboter definieren, ihn einschalten und seine update
iterativ aufrufen. Ein minimaler Beispielcode ist:
from marabunta import eBotBody , XBeeNetwork
from marabunta . models import HeadingConsensusRobot
total_time = 60
ID = "Walle"
init_pos = [ 0. , 0. ]
init_heading = 0.
communication_slot = 0.1
body = ebotBody ( init_pos , init_heading )
network = XBeeNetwork ( communication_slot , communication_slot + 0.1 , 1 , ID )
robot = HeadingConsensusRobot ( body , network )
robot . turn_on ()
# MAIN LOOP
end_time = time () + total_time
while time () < end_time :
robot . update ( dt , speed )
sleep ( dt )
robot . turn_off ()
Jeder Roboter, der von BaseRobot
erbt, verfügt über die Methoden __enter__
und __exit__
, die es ermöglichen, den Roboter mit der with
-Anweisung zu verwenden, anstatt ihn explizit ein- und auszuschalten. Diese Option bietet eine sauberere Möglichkeit, den Roboter angesichts möglicher Hardwarefehler zu betreiben. Ein minimaler Beispielcode, der diesem Ansatz folgt, ist:
from marabunta import eBotBody , XBeeNetwork
from marabunta . models import HeadingConsensusRobot
total_time = 60
ID = "Walle"
init_pos = [ 0. , 0. ]
init_heading = 0.
communication_slot = 0.1
body = ebotBody ( init_pos , init_heading )
network = XBeeNetwork ( communication_slot , communication_slot + 0.1 , 1 , ID )
with HeadingConsensusRobot ( body , network ) as robot :
# MAIN LOOP
end_time = time () + total_time
while time () < end_time :
robot . update ( dt , speed )
sleep ( dt )
In den in examples/
enthaltenen Skripten finden Sie mehrere Möglichkeiten, die Roboter zu bedienen.