ไลบรารี Python สำหรับการออกแบบและควบคุมฝูงเทียม
แพ็คเกจนี้ประกอบด้วยเครื่องมือในการควบคุมหรือจำลองชิ้นส่วนฮาร์ดแวร์เฉพาะของหุ่นยนต์ที่มีความสามารถในการ (i) การเคลื่อนที่ (ii) การตรวจจับ และ (iii) การสื่อสารโดยมีจุดประสงค์เพื่อทำการวิจัยเชิงทดลองในการจับกลุ่มเทียม นอกจากนี้ยังมีรูปแบบพฤติกรรมการจับกลุ่มบางรูปแบบที่สร้างขึ้นโดยใช้เครื่องมือเหล่านี้ด้วย สำหรับข้อมูลเพิ่มเติม โปรดดูที่ http://journal.frontiersin.org/article/10.3389/frobt.2017.00012/
การออกแบบหุ่นยนต์โดยใช้ไลบรารีนี้ประกอบด้วยสามส่วนหลัก:
ไลบรารี marabunta เป็นไปตามโครงสร้างนี้และจัดเตรียมคลาสต่อไปนี้:
Body
พร้อมวิธีการที่จำเป็นเพื่อใช้เป็นลำตัวของหุ่นยนต์ โมเดลตัวถังใดๆ ควรสืบทอดจากคลาสนี้เพื่อให้ BaseRobot
ยอมรับBody
เพื่อจำลองตัวหุ่นยนต์ ไม่ต้องใช้ฮาร์ดแวร์ใดๆ ในการใช้งาน สามารถโหลดไฟล์ที่มีรายการพิกัดเพื่อรวมสิ่งกีดขวางในการจำลองได้Body
เพื่อควบคุม eBot ต้องมีการเชื่อมต่อบลูทูธ eBot และติดตั้ง eBot-API ที่เหมาะสมNetwork
พร้อมวิธีการที่จำเป็นเพื่อใช้เป็นเครือข่ายของหุ่นยนต์ โมเดลเครือข่ายใดๆ ควรสืบทอดจากคลาสนี้เพื่อให้ BaseRobot ยอมรับNetwork
เพื่อจำลองการสื่อสารโดยใช้ไฟล์ปกติ (สมมติว่าโรบ็อตต่าง ๆ อยู่ในคอมพิวเตอร์เครื่องเดียวกัน หรืออย่างน้อยก็สามารถเข้าถึงไฟล์เดียวกันได้) ไม่ต้องใช้ฮาร์ดแวร์ใดๆ ในการใช้งานNetwork
โดยใช้ series 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 ทางแยกของ API นี้ที่ใช้ CPU โฮสต์เพื่อคำนวณการแปลตำแหน่งของหุ่นยนต์โดยใช้ตัวกรอง Kalman แทนที่จะอาศัยการแปล 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/