נחיל של 50+ רחפנים המנוהל באופן מרכזי נתקל במגבלות חישוביות—כל שלב תכנון דורש פעולות O(N²). אנו פותרים זאת עם למידת חיזוק רב-סוכנית מבוזרת (MARL). כל רחפן מקבל החלטות על סמך תצפיות מקומיות ותקשורת עם שכנים, מה שמאפשר קנה מידה ליניארי. בואו נפרק כיצד אנו בונים מערכות אלו—מסימולציה ועד טיסות אמיתיות.
בעיות בקנה מידה
ב-N=10 מתכנן מרכזי עובד. ב-N=100 זה בלתי אפשרי מבחינה חישובית. ב-N=1000, בלתי אפשרי לחלוטין. נחיל מבוזר מתקדם באופן ליניארי: כל רחפן מעבד רק את שכניו הקרובים ביותר (K=5–8).
אמינות תקשורת: האלגוריתם חייב לעבוד עם אובדן מנות של 20–30% וזמן השהיה של 50–200 אלפיות השנייה. אנו משתמשים בפרוטוקול Gossip להפצת מידע וב-RL מודע לתקשורת, שבו כל רחפן מחליט מתי ולמי לשלוח הודעות.
הפער בין סימולציה למציאות הוא הגורם העיקרי לכשלים. אנו מיישמים רנדומיזציה של תחום: רוח אקראית, מסה, ופרמטרי חיכוך בסימולטור כך שהמודל מתכלל לתנאים אמיתיים.
כיצד MARL פותר את בעיית קנה המידה
כללי Reynolds בסיסיים (הפרדה, יישור, לכידות) נותנים התנהגות פרימיטיבית. עליהם אנו מוסיפים למידת חיזוק להתנהגויות ספציפיות למשימה: כיסוי שטח, חיפוש מטרות, או הובלת מטען.
תצפית לכל רחפן:
obs_per_drone = {
'own_state': [x, y, z, vx, vy, vz, battery], # 7 значений
'neighbors': [[rel_pos, rel_vel] for n in K_nearest_neighbors], # K×6
'goal': [dx, dy, dz], # направление к цели
'obstacles': lidar_scan # 16-ray LiDAR
} מדוע גישה מבוזרת יעילה יותר
נחיל MARL מציג עד 40% שיעור כיסוי גבוה יותר בהשוואה לפתרון המשתמש רק ב-Reynolds Flocking. הנדסת תגמול מאפשרת איזון גמיש בין כיסוי, מניעת התנגשויות וצריכת אנרגיה.
אימון מרכזי, ביצוע מבוזר (CTDE):
- אימון: המבקר רואה את המצב הגלובלי של כל הנחיל
- ביצוע: כל רחפן משתמש רק בתצפיות מקומיות
QMIX (פירוק ערך רב-סוכני):
# QMIX: Q_tot = f(Q_1,...,Q_n, state)
# монотоническое смешивание индивидуальных Q-функций
# гарантирует: argmax Q_tot = [argmax Q_i for each i]
class QMIXNet(nn.Module):
def __init__(self, n_agents, state_dim):
super().__init__()
self.hyper_w1 = nn.Linear(state_dim, n_agents * 32)
self.hyper_w2 = nn.Linear(state_dim, 32)
self.hyper_b1 = nn.Linear(state_dim, 32)
self.hyper_b2 = nn.Linear(state_dim, 1)
def forward(self, q_agents, state):
w1 = F.elu(self.hyper_w1(state)).view(-1, q_agents.size(1), 32)
w2 = F.elu(self.hyper_w2(state)).unsqueeze(-1)
return q_total
יישום טכני
משימות נחיל
- כיסוי שטח: N רחפנים מכסים שטח S באופן אחיד בזמן מינימלי. תגמול פרופורציונלי לשטח מכוסה ייחודי.
- חיפוש וגילוי: הנחיל מוצא מטרות (אנשים בהריסות, שריפות יער). מידע מופץ דרך רשת Mesh.
- הובלה: מספר רחפנים נושאים מטען יחד. האתגר הוא לסנכרן דחף ללא מתאם מרכזי.
- הגנה נגד רחפנים: חלק מהנחיל פועל כמגנים, עוקבים ומיירטים רחפנים עוינים.
תקשורת נחיל
כל רחפן מכיר רק את K השכנים הקרובים ביותר (K=5–8). פרוטוקול Gossip: מידע מתפשט בגלים. הפעולה כוללת החלטת תקשורת:
action_space = spaces.Dict({
'motion': spaces.Box(-1, 1, (3,)), # velocity
'message': spaces.Box(-1, 1, (8,)), # broadcast вектор соседям
})
obs = concat([own_state, neighbor_messages, sensor_readings]) מניעת התנגשויות
Velocity Obstacle (VO) / Reciprocal VO (ORCA): אלגוריתם קלאסי המבטיח התנהגות ללא התנגשויות בהינתן מהירויות כל הרחפנים. משמש כשכבת בטיחות על גבי RL.
from rl_swarm.safety import ORCASafetyLayer
safety = ORCASafetyLayer(max_speed=5.0, safety_radius=1.5)
raw_velocity = rl_policy.predict(obs)
safe_velocity = safety.compute_safe_velocity(
raw_velocity,
drone_position,
neighbor_positions,
neighbor_velocities
) סימולציה: Gazebo + PX4
# запуск 10 экземпляров PX4 + один Gazebo
./Tools/simulation/gazebo-classic/sitl_multiple_run.sh -n 10 -m iris
# каждый дрон на отдельном MAVLink порту: 14540+i
import asyncio
from mavsdk import System
async def control_swarm(n_drones):
drones = [System() for _ in range(n_drones)]
await asyncio.gather(*[
drone.connect(f"udp://:1454{i}") for i, drone in enumerate(drones)
])
await asyncio.gather(*[drone.action.takeoff() for drone in drones]) השוואת גישות לשליטה בנחיל
| מאפיין | מרכזי | מבוזר (MARL) | היברידי |
|---|---|---|---|
| קנה מידה | O(N²) ✗ | O(N) ✓ | O(N log N) |
| מניעת התנגשויות | דורש מפה מלאה | ORCA מקומי | שכבת בטיחות + RL |
| סובלנות לתקלות | נקודת כשל יחידה | גבוהה (כשל אחד לא משפיע) | בינונית |
| איכות אימון | גבוהה (מידע מלא) | בינונית (תצפית חלקית) | גבוהה |
השוואת אלגוריתמי MARL
| אלגוריתם | סוג משימה | יתרונות | חסרונות |
|---|---|---|---|
| QMIX | שיתופי | מיזוג מונוטוני, הבטחת עקביות | לא מתאים לתרחישים תחרותיים |
| MADDPG | שיתופי/תחרותי | CTDE, יישום פשוט | שונות גבוהה באימון |
| MAPPO | שיתופי | יעילות גבוהה עם PPO | רגיש להיפרפרמטרים |
מדדי הערכה
- שיעור כיסוי: % משטח היעד המכוסה ב-T דקות
- שגיאת מערך: סטיית RMS מהמערך הרצוי
- שיעור התנגשויות: התנגשויות לכל 100 שעות טיסה
- עומס תקשורת: ממוצע הודעות/שנייה לכל רחפן
- חוסן: % משימות שהושלמו כאשר 20% מהרחפנים נכשלים
Reynolds, C. W. (1987). Flocks, herds, and schools: A distributed behavioral model.
תהליך פיתוח ולוחות זמנים
- ניתוח משימה ובחירת אלגוריתם – הגדרת מטרות (כיסוי, חיפוש, הובלה), בחירת אלגוריתם MARL (QMIX, MADDPG וכו')
- סימולציה ואימון – בניית סביבה בGazebo, הגדרת תגמול, הפעלת אימון מבוזר על אשכול GPU
- שכבת בטיחות ובדיקות – שילוב ORCA, אימות סובלנות לתקלות בסימולציה
- מעבר מסימולציה למציאות – כיול מודל על נתונים אמיתיים, ביצוע ניסויי טיסה במגרש ניסויים
- פריסה ותמיכה – הגדרת מערכת ניהול, תיעוד API, מסירה ללקוח
לוחות הזמנים משוערים: אב טיפוס ל-5–10 רחפנים בסימולציה אורך 12 שבועות. מערכת MARL מלאה עם בטיחות, מעבר מסימולציה למציאות וטיסות אמיתיות על 20+ רחפנים אורכת 28 עד 36 שבועות. העלות מחושבת באופן אישי לפי מורכבות המשימה והסטאק הנדרש.
מה כלול
- ארכיטקטורת MARL (QMIX / MADDPG) עם CTDE
- סימולטור Gazebo + PX4 עם רנדומיזציה של תחום
- שכבת בטיחות מבוססת ORCA
- אינטגרציה עם רחפנים אמיתיים (PX4, MAVLink)
- תיעוד אימון ותפעול
- הכשרת צוות הלקוח
- 3 חודשי תמיכה לאחר פריסה
יש לנו ניסיון של 5+ שנים ב-ML לרובוטיקה ו-15+ פרויקטים שהושלמו בשליטה ברחפנים. כדי להעריך את המשימה שלכם, צרו קשר—נכין הצעה טכנית עם מדדים ולוחות זמנים.
קבלו ייעוץ—ספרו לנו על המשימה שלכם, ונציע את הפתרון האופטימלי.







