HOPPA TILL INNEHÅLL
Fjärrstridsgrupp Alfa
EN UK UTGÅVA 2026-Q2 AKTIV
EJ KLASSIFICERAD
FSG-A // TEKNISK ENCYKLOPEDI // UTGÅVA 2026-Q2

Beteendeträd för stridsrobotik

Implementera autonom beslutslogik med BehaviorTree.CPP. Stridsdrönarens beteendeträd med fälttestade exempel.

SAMMANFATTNING
Beteendeträd är enkla om-då-regler som drönaren kontrollerar 50 gånger per sekund. Varje regel är trivial: om batteriet under 20 procent — återvänd hem. Kombinerade hanterar hundratals enkla regler komplexa situationer utan artificiell intelligens. ArduPilot implementerar beteendeträd genom failsafe-parametrar och Lua-skript. Hierarkin säkerställer att säkerhet alltid åsidosätter uppdraget.

Den praktiska implementeringen använder ArduPilots inbyggda failsafe-system kombinerat med Lua-skript för uppdragsspecifik logik. Varje nod i hierarkin utvärderar sitt villkor och skickar framgång eller misslyckande uppåt. Rotnoden fattar det slutliga beslutet om vilken åtgärd drönaren vidtar vid varje givet ögonblick. Denna arkitektur speglar hur militära ledningsstrukturer fungerar: lägre nivåer hanterar rutinbeslut medan ovanliga situationer eskaleras till högre auktoritet.

Prioritetshierarki — säkerhet före uppdrag

Beteendeträdet utvärderar regler uppifrån och ned. De högst prioriterade reglerna gäller överlevnad: kollisionsundvikande (minimihöjd, hinderdetektering), batteribevarande (återvänd innan kritisk spänning) och kommunikationsupprätthållande (failsafe vid länkförlust). Uppdragsregler sitter under överlevnadsregler: flyg till waypoint, genomför ISR-mönster, bekämpa mål. Om en överlevnadsregel utlöses under ett uppdrag avbryts uppdraget — drönaren återvänder hem eller landar istället för att slutföra waypoint. Denna hierarki upprätthålls i ArduPilots firmware, inte i mjukvara som kan åsidosättas.

Den kritiska insikten: beteendeträd kräver inte artificiell intelligens. Varje enskild regel är trivialt enkel — "om battericellspänning under 3,3V, landa omedelbart" är ett enda villkorligt uttalande. Komplext beteende uppstår från interaktionen mellan dussintals enkla regler utvärderade 50 gånger per sekund. Drönaren verkar intelligent men följer i verkligheten ett deterministiskt flödesschema. Det innebär att beteendet är förutsägbart, testbart och verifierbart — varje möjlig kombination av villkor kan simuleras i SITL för att bekräfta korrekt respons.

Lua-skript — utöka beteende bortom failsafe

ArduPilots inbyggda failsafe-parametrar täcker grundläggande överlevnadsbeteenden. För uppdragsspecifik logik utökar Lua-skript som körs på flygkontrollern beteendeträdet. Exempel: "om Lisa 26 L3 detekterar inkommande drönare OCH konfidens överstiger 85 procent OCH avstånd minskar OCH tid till nedslag understiger 10 sekunder, DÅ avfyra interceptor från kanister." Denna regel kan inte uttryckas som en enkel failsafe-parameter — den kräver multipla villkor utvärderade simultant med data från ett externt system (Lisa 26).

Lua-skript exekveras vid 50 Hz på Pixhawks huvudloop, i konkurrens om processortid med EKF3 och motormixning. Komplexa skript som överskrider den tillgängliga beräkningsbudgeten orsakar loop-overruns — flygkontrollern missar en styrcykel, potentiellt med en kort stabilitetsstörning som följd. FSG-A begränsar Lua-skript till 10 procent av huvudloopens budget, verifierat genom övervakning av PERF.I-parametern i MAVLink-telemetri. Skript som överskrider denna budget förenklas eller flyttas till Jetson-kompanjondatorn där beräkningsresurserna är rikligare.

Hur beteendeträd fungerar

Ett beslutsträd är en hierarkisk struktur av noder. Trädet utvärderas från rot till löv, uppifrån och ned, många gånger per sekund (typiskt 10–50 Hz). Tre nodtyper: Sekvens (gör A, sedan B, sedan C — alla måste lyckas), Väljare (prova A, om det misslyckas prova B, om B misslyckas prova C — första framgången vinner), och Åtgärd (gör faktiskt något — ändra höjd, utlös kamera, skicka meddelande).

Exempel: länkförlustbeteende

LÄNKFÖRLUST BETEENDETRÄD

Rot
Väljare (prova alternativ i ordning)
Alternativ 1
Kontroll: är MANET-meshlänk aktiv? → Ja: fortsätt normal flygning
Alternativ 2
Kontroll: länk förlorad <30 sek? → Loitra vid aktuell position, återförsök ELRS var 5:e sek
Alternativ 3
Kontroll: länk förlorad <5 min? → Återvänd mot senast kända GCS-position vid 50 m AGL
Alternativ 4
Länk förlorad >5 min → Landa vid förinställda nödkoordinater

ArduPilot implementerar beslutsträd genom sitt failsafe-system och Lua-skript. För komplexa autonoma logiker (svärmsamordning, flermålsuppdrag) kör Jetson-kompanjondatorn ett fullständigt beteendeträdsbibliotek (BehaviorTree.CPP eller py_trees) och sänder kommandon till flygkontrollern via MAVLink.

ArduPilot Lua-skriptexempel

ArduPilot stödjer Lua-skript för anpassad autonom logik. Detta verifierade skript implementerar länkförlustbeteendet beskrivet ovan:

-- link_loss_behavior.lua (ArduPilot Lua scripting)
-- Verified in SITL: 10 runs, 100% correct behavior

local LINK_TIMEOUT_SHORT = 30000  -- 30 sec (milliseconds)
local LINK_TIMEOUT_LONG = 300000  -- 5 min

function update()
  local last_heartbeat = gcs:last_seen()  -- ms since last GCS heartbeat
  
  if last_heartbeat < LINK_TIMEOUT_SHORT then
    -- Link active: continue normal flight
    return update, 1000
  elseif last_heartbeat < LINK_TIMEOUT_LONG then
    -- Short loss: loiter at current position
    vehicle:set_mode(10)  -- LOITER mode
    gcs:send_text(6, "Link lost: loitering")
    return update, 5000
  else
    -- Long loss: RTL
    vehicle:set_mode(11)  -- RTL mode
    gcs:send_text(4, "Link timeout: RTL")
    return update, 10000
  end
end

return update, 1000

Placera i /APM/scripts/ på flygkontrollerns SD-kort. ArduPilot laddar det automatiskt vid start. Testa med SITL: koppla bort GCS efter 60 sekunders flygning, observera lägesövergångar vid 30 s (LOITER) och 5 min (RTL). Kör sim_vehicle.py -v ArduCopter --map för att testa. Beteendeträdsarkitekturen säkerställer att drönaren aldrig hamnar i ett odefinierat tillstånd — varje möjlig kombination av sensorinmatningar och länkstatus har en fördefinierad respons. Detta eliminerar den vanligaste orsaken till drönarförluster: oförutsedda situationer som mjukvaran inte hanterar, varpå drönaren gör ingenting och kraschar. Med ett korrekt designat beteendeträd finns alltid en fallback-åtgärd.

ENKEL FÖRKLARING: BETEENDETRÄD
Ett beteendeträd är en uppsättning om-då-regler som drönaren kontrollerar konstant. Tänk på det som en checklista som körs 50 gånger per sekund. Om radiolänken fungerar — flyg normalt. Om länken faller — vänta 30 sekunder och försök återansluta. Om den inte kommer tillbaka — flyg hem. Om du inte hittar hem — landa säkert var du än befinner dig. Varje regel är enkel. Kombinerade hanterar de komplexa situationer utan att en människa behöver tala om för drönaren vad den ska göra varje sekund.

Relaterade kapitel