Pustaka Python untuk desain dan pengendalian kawanan buatan.
Paket ini mencakup alat untuk mengontrol atau mensimulasikan bagian perangkat keras tertentu dari robot yang mampu (i) bergerak, (ii) penginderaan, dan (iii) komunikasi dengan tujuan melakukan penelitian eksperimental dalam pengerumunan buatan. Ini juga mencakup beberapa model perilaku mengerumuni yang dibangun menggunakan alat-alat ini. Untuk informasi lebih lanjut lihat http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/
Perancangan robot menggunakan perpustakaan ini terdiri dari tiga bagian utama:
Perpustakaan marabunta mengikuti struktur ini dan menyediakan kelas-kelas berikut:
Body
minimal dengan metode yang diperlukan untuk digunakan sebagai tubuh robot. Model bodi apa pun harus mewarisi kelas ini agar dapat diterima oleh BaseRobot
.Body
untuk mensimulasikan tubuh robot. Tidak memerlukan perangkat keras apa pun untuk digunakan. File dengan daftar koordinat dapat dimuat untuk memasukkan hambatan dalam simulasi.Body
untuk mengontrol eBot. Membutuhkan koneksi bluetooth, eBot, dan eBot-API yang sesuai terpasang.Network
minimal dengan metode yang diperlukan untuk digunakan sebagai jaringan robot. Model jaringan apa pun harus mewarisi kelas ini agar dapat diterima oleh BaseRobot.Network
untuk mensimulasikan komunikasi menggunakan file biasa (dengan asumsi robot yang berbeda berada di komputer yang sama, atau setidaknya dapat mengakses file yang sama). Tidak memerlukan perangkat keras apa pun untuk digunakan.Network
menggunakan XBee seri 1. Memerlukan XBee yang terhubung melalui port serial.BaseBody
dan instance jaringan yang mewarisi dari BaseNetwork
.MockBody
. Hambatan dimuat dari file dan disimpan dalam grid menggunakan "Daftar Verlet" untuk akses cepat ke data hambatan lokal. Untuk menginstal modul, ketik:
python setup.py install
(mungkin memerlukan sudo
tergantung pada sistem Anda). Ini akan menginstal modul marabunta
dan submodul marabunta.models
-nya.
Untuk mengontrol eBots melalui eBotBody
kita perlu menginstal eBot-API. Versi resminya dapat ditemukan di https://github.com/EdgeBotix/eBot-API. Garpu API ini yang menggunakan CPU host untuk menghitung lokalisasi robot dengan menerapkan filter Kalman alih-alih mengandalkan lokalisasi eBot dapat ditemukan di https://github.com/david-mateo/eBot-API.
Untuk merancang perilaku robot, seseorang harus mendefinisikan kelas baru yang mewarisi BaseRobot
. Inisialisasi BaseRobot
memerlukan sebuah badan, diimplementasikan sebagai kelas yang mewarisi BaseBody
, dan jaringan, kelas yang mewarisi BaseNetwork
.
Untuk menambahkan dukungan pada perangkat keras baru, seseorang harus mengimplementasikan kelas yang diwarisi dari BaseBody
atau BaseNetwork
. Kelas-kelas ini berisi daftar metode minimal yang harus diterapkan oleh badan atau jaringan mana pun.
Untuk menggunakan metode yang disediakan untuk membuat robot bergerak mengikuti perilaku tertentu, katakanlah menuju konsensus, kita harus mendefinisikan tubuh, jaringan, robot, menyalakannya, dan memanggil metode update
secara berulang. Contoh kode minimalnya adalah:
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 ()
Robot apa pun yang diturunkan dari BaseRobot
memiliki metode __enter__
dan __exit__
yang memungkinkan penggunaan robot dengan pernyataan with
alih-alih menyalakan dan mematikannya secara eksplisit. Opsi ini memberikan cara yang lebih bersih untuk mengoperasikan robot dalam menghadapi potensi kegagalan perangkat keras. Contoh kode minimal yang mengikuti pendekatan ini adalah:
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 )
Beberapa cara untuk mengoperasikan robot dapat ditemukan dalam skrip yang terdapat dalam examples/
.