Библиотека Python для проектирования и управления искусственными роями.
Этот пакет включает в себя инструменты для управления или моделирования определенных аппаратных частей робота, способных (i) передвигаться, (ii) воспринимать и (iii) общаться с целью проведения экспериментальных исследований в области искусственного роения. Он также включает в себя некоторые модели поведения роения, построенные с использованием этих инструментов. Для получения дополнительной информации см. http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/.
Проектирование роботов с использованием этой библиотеки состоит из трех основных частей:
Библиотека marabunta следует этой структуре и предоставляет следующие классы:
Body
с необходимыми методами для использования в качестве тела робота. Любые модели тела должны наследовать от этого класса, чтобы их мог принять BaseRobot
.Body
для имитации тела робота. Не требует какого-либо оборудования для использования. Можно загрузить файл со списком координат, чтобы включить препятствия в моделирование.Body
для управления eBot. Требуется подключение Bluetooth, eBot и соответствующий eBot-API.Network
с необходимыми методами для использования в качестве сети робота. Любые сетевые модели должны наследовать этот класс, чтобы их мог принять BaseRobot.Network
реализация для имитации связи с использованием обычных файлов (предполагается, что разные роботы находятся на одном компьютере или, по крайней мере, имеют доступ к одним и тем же файлам). Не требует какого-либо оборудования для использования.Network
с использованием XBee серии 1. Требуется XBee, подключенный через последовательный порт.BaseBody
, и экземпляр сети , наследуемый от BaseNetwork
.MockBody
. Препятствия загружаются из файла и сохраняются в сетке с использованием «списков Верле» для быстрого доступа к локальным данным о препятствиях. Чтобы установить модуль, введите:
python setup.py install
(может потребоваться sudo
в зависимости от вашей системы). При этом будет установлен модуль marabunta
и его подмодуль marabunta.models
.
Для управления eBot через eBotBody
необходимо установить eBot-API. Официальную версию можно найти по адресу https://github.com/EdgeBotix/eBot-API. Ответвление этого 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/
, можно найти несколько способов управления роботами.