مكتبة بايثون لتصميم ومراقبة الأسراب الاصطناعية.
تتضمن هذه الحزمة أدوات إما للتحكم أو محاكاة أجزاء أجهزة محددة للروبوت القادر على (1) الحركة، (2) الاستشعار، و (3) التواصل بهدف إجراء بحث تجريبي في الاحتشاد الاصطناعي. ويتضمن أيضًا بعض نماذج سلوك الاحتشاد المبنية باستخدام هذه الأدوات. لمزيد من المعلومات راجع http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/
يتكون تصميم الروبوتات باستخدام هذه المكتبة من ثلاث قطع رئيسية:
تتبع مكتبة marabunta هذا الهيكل وتوفر الفئات التالية:
Body
مع الطرق المطلوبة لاستخدامه كجسم للروبوت. يجب أن ترث أي نماذج جسم من هذه الفئة حتى يتم قبولها بواسطة BaseRobot
.Body
لمحاكاة جسم الروبوت. لا يتطلب أي أجهزة للاستخدام. يمكن تحميل ملف يحتوي على قائمة الإحداثيات لتضمين العوائق في المحاكاة.Body
للتحكم في eBot. يتطلب اتصال بلوتوث وeBot وتثبيت eBot-API المناسب.Network
مع الأساليب المطلوبة لاستخدامها كشبكة للروبوت. يجب أن ترث أي نماذج شبكية من هذه الفئة حتى يتم قبولها بواسطة BaseRobot.Network
لمحاكاة الاتصال باستخدام الملفات العادية (بافتراض وجود الروبوتات المختلفة في نفس الكمبيوتر، أو على الأقل يمكنها الوصول إلى نفس الملفات). لا يتطلب أي أجهزة للاستخدام.Network
باستخدام سلسلة 1 XBee. يتطلب XBee متصلاً عبر منفذ تسلسلي.BaseBody
ومثيل شبكة يرث من BaseNetwork
.MockBody
. يتم تحميل العوائق من ملف وتخزينها في شبكة باستخدام "قوائم Verlet" للوصول السريع إلى بيانات العوائق المحلية. لتثبيت الوحدة اكتب:
python setup.py install
(قد يتطلب sudo
اعتمادًا على نظامك). سيؤدي هذا إلى تثبيت وحدة marabunta
ووحدة marabunta.models
الفرعية الخاصة بها.
للتحكم في eBots من خلال eBotBody
يحتاج المرء إلى تثبيت eBot-API. يمكن العثور على النسخة الرسمية على https://github.com/EdgeBotix/eBot-API. يمكن العثور على شوكة من واجهة برمجة التطبيقات هذه التي تستخدم وحدة المعالجة المركزية المضيفة لحساب توطين الروبوت من خلال تنفيذ مرشح كالمان بدلاً من الاعتماد على توطين eBot على 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/
.