인공 떼의 설계 및 제어를 위한 Python 라이브러리입니다.
이 패키지에는 인공 군집에 대한 실험적 연구를 수행할 목적으로 (i) 운동, (ii) 감지 및 (iii) 통신이 가능한 로봇의 특정 하드웨어 부분을 제어하거나 시뮬레이션하는 도구가 포함되어 있습니다. 또한 이러한 도구를 사용하여 구축된 군집 행동의 일부 모델도 포함됩니다. 자세한 내용은 http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/를 참조하세요.
이 라이브러리를 사용한 로봇 설계는 세 가지 주요 부분으로 구성됩니다.
marabunta 라이브러리는 이 구조를 따르며 다음 클래스를 제공합니다.
Body
모델입니다. BaseRobot
에서 허용하려면 모든 신체 모델이 이 클래스에서 상속되어야 합니다.Body
구현입니다. 사용하는 데 하드웨어가 필요하지 않습니다. 시뮬레이션에 장애물을 포함하기 위해 좌표 목록이 있는 파일을 로드할 수 있습니다.Body
구현입니다. 블루투스 연결, 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 현지화에 의존하는 대신 Kalman 필터를 구현하여 호스트 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
에서 상속받은 모든 로봇에는 로봇을 명시적으로 켜고 끄는 대신 with
문과 함께 로봇을 사용할 수 있는 __enter__
및 __exit__
메서드가 있습니다. 이 옵션은 잠재적인 하드웨어 오류가 발생할 경우 로봇을 보다 깔끔하게 작동할 수 있는 방법을 제공합니다. 이 접근 방식을 따르는 최소 예제 코드는 다음과 같습니다.
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/
에 포함된 스크립트에서 로봇을 작동하는 여러 가지 방법을 찾을 수 있습니다.