人工的な群れの設計と制御のための Python ライブラリ。
このパッケージには、人工群れにおける実験研究を行うことを目的として、 (i)移動、 (ii)センシング、および(iii)通信が可能なロボットの特定のハードウェア部分を制御またはシミュレートするためのツールが含まれています。これらのツールを使用して構築された群れ動作のモデルもいくつか含まれています。詳細については、http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/を参照してください。
このライブラリを使用したロボットの設計は、次の 3 つの主要な部分で構成されます。
marabunta ライブラリはこの構造に従い、次のクラスを提供します。
Body
の最小モデル。 BaseRobot
によって受け入れられるように、ボディ モデルはこのクラスから継承する必要があります。Body
実装。使用するハードウェアは必要ありません。座標のリストを含むファイルをロードして、シミュレーションに障害物を含めることができます。Body
実装。 Bluetooth 接続、eBot、および適切な eBot-API がインストールされている必要があります。Network
の最小モデル。すべてのネットワーク モデルは、BaseRobot によって受け入れられるように、このクラスを継承する必要があります。Network
実装 (異なるロボットが同じコンピューター上にある、または少なくとも同じファイルにアクセスできると想定)。使用するハードウェアは必要ありません。Network
実装。シリアルポート経由で接続されたXBeeが必要です。BaseBody
から継承するボディインスタンスとBaseNetwork
から継承するネットワークインスタンスが必要です。MockBody
で障害物検出をシミュレートするためにマップ データを保存およびアクセスするためのオブジェクト。障害物はファイルからロードされ、ローカルの障害物データに高速にアクセスするために「Verlet リスト」を使用してグリッドに保存されます。 モジュールをインストールするには、次のように入力します。
python setup.py install
(システムによってはsudo
必要な場合があります)。これにより、 marabunta
モジュールとそのmarabunta.models
サブモジュールがインストールされます。
eBotBody
を通じて eBot を制御するには、eBot-API をインストールする必要があります。正式バージョンは https://github.com/EdgeBotix/eBot-API にあります。 eBot ローカリゼーションに依存する代わりに、ホスト CPU を使用してカルマン フィルターを実装してロボットのローカリゼーションを計算する、この API のフォークは、https://github.com/david-mateo/eBot-API にあります。
ロボットの動作を設計するには、 BaseRobot
を継承する新しいクラスを定義する必要があります。 BaseRobot
の初期化には、 BaseBody
から継承するクラスとして実装されるボディと、 BaseNetwork
から継承するクラスとして実装されるネットワークが必要です。
新しいハードウェアのサポートを追加するには、 BaseBody
またはBaseNetwork
から継承するクラスを実装する必要があります。これらのクラスには、本体またはネットワークが実装する必要がある最小限のメソッドのリストが含まれています。
提供されたメソッドを使用して特定の動作 (ヘディングコンセンサスなど) に従ってロボットを動かすには、本体、ネットワーク、ロボットを定義し、電源を入れて、そのupdate
メソッドを繰り返し呼び出す必要があります。最小限のコード例は次のとおりです。
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 ()
BaseRobot
から継承するロボットには__enter__
メソッドと__exit__
メソッドがあり、ロボットを明示的にオンまたはオフにする代わりにwith
ステートメントでロボットを使用できるようになります。このオプションは、潜在的なハードウェア障害に直面してロボットを操作するためのよりクリーンな方法を提供します。このアプローチに従った最小限のコード例は次のとおりです。
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 )
examples/
に含まれるスクリプトでロボットを操作するいくつかの方法を見つけることができます。