Napęd w prostym symulatorze bywa redukowany do równania thrust = k · command². Taki model może wystarczyć do pierwszego zawisu, ale ukrywa opóźnienie ESC i wirnika, zmianę napięcia baterii, ograniczenie prądowe, moment reakcyjny, napływ osiowy, różnicę między śmigłem statycznym i pracującym w locie oraz asymetrię rozbiegu i hamowania. W konsekwencji regulator działa w SITL lepiej niż na stanowisku, a przewidywany czas lotu i zachowanie po awarii są niewiarygodne.

Model napędu powinien mieć poziom szczegółowości dobrany do pytania. Do testu logiki misji wystarczy ograniczona dynamika pierwszego rzędu i mapa ciągu. Do strojenia rate loop potrzebne są opóźnienia, moment reakcyjny i zależność od napięcia. Do prognozy energii trzeba modelować prąd, sprawność, baterię oraz warunki przepływu. Do diagnostyki ESC lub własnego sterowania BLDC niezbędna jest warstwa elektryczna i komutacja. Nie należy płacić kosztem obliczeń za zjawisko, którego wynik testu nie wykorzystuje.

Spis treści#

Granica modelu#

Na początku trzeba określić wejścia, stany i wyjścia. Przykładowa granica użyteczna dla flight controllera:

Wejścia: znormalizowana komenda aktuatora, napięcie szyny, prędkość powietrza w dysku, gęstość, temperatura i stan uszkodzenia.

Stany: prędkość kątowa wirnika, ewentualnie prąd fazowy/DC, temperatura, stan limitera ESC i stan baterii.

Wyjścia: wektor siły, moment reakcyjny, moment żyroskopowy, prąd zasilania, RPM/eRPM, temperatury i status.

Model nie powinien jednocześnie przyjmować idealnego RPM i próbować wyliczać go z elektryki, chyba że jeden kanał jest pomiarem/sterowaniem, a drugi ground truth. Dwa źródła prawdy prowadzą do niespójności energii.

Łańcuch napędu#

Pełny łańcuch można zapisać następująco:

FC command → protokół/PWM → ESC → napięcie faz → prąd → moment silnika
          → ω wirnika → aerodynamika śmigła → siła i moment na płatowcu
                       ↘ eRPM/telemetria ↗
bateria → napięcie/sag/limit prądu ───────┘

Każdy blok ma własny czas i ograniczenia. Komenda DShot może dotrzeć co kilkaset mikrosekund, regulator ESC pracować wewnętrznie szybciej, prąd zmieniać się zgodnie z indukcyjnością, a RPM wolniej ze względu na bezwładność i moment aerodynamiczny. Ciąg jest wynikiem RPM oraz przepływu, nie bezpośrednim skutkiem wartości protokołu.

Poziomy wierności#

Poziom Stany Typowe równania Zastosowanie
mapa statyczna brak T=f(u) logika misji, szybki Monte Carlo
lag RPM ω pierwszy rząd + T=kω² regulatory, SITL
mapa hamowni ω lub u interpolacja T/Q/I dobór napędu, energia w zawisie
bezwymiarowy prop ω C_T(J), C_Q(J) lot postępowy fixed-wing/VTOL
elektromechaniczny i,ω R/L/K_e/K_t/J baterie, ograniczenia, transient
komutacyjny prądy faz i pozycja falownik + back-EMF firmware ESC, desync

Można łączyć poziomy, na przykład model elektryczny silnika z tabelami C_T(J) śmigła. Nie powinno się jednak identyfikować kilkunastu parametrów z jednego statycznego sweepu. Najpierw wybiera się obserwowalne parametry i plan pomiaru.

Konwencje i jednostki#

W modelu łatwo pomylić:

  • RPM z rad/s;
  • obroty na sekundę n z prędkością kątową ω = 2πn;
  • średnicę D z promieniem R;
  • moment Q w N·m z bezwymiarowym C_Q;
  • moc elektryczną z mechaniczną na wale;
  • thrust axis linku z osią body;
  • dodatni kierunek obrotu widziany z góry i od strony wału.

Każde pole konfiguracyjne powinno zawierać jednostkę w nazwie lub schemacie. W logach przechowuje się zarówno komendę, RPM, napięcie, prąd, ciąg, moment, prędkość napływu i gęstość. Sam motor_output=0.6 nie pozwala odtworzyć stanu napędu.

Od komendy do prędkości wirnika#

Najprostsza mapa ma postać:

ω_cmd = ω_idle + g(u)(ω_max - ω_idle)

u jest komendą znormalizowaną po uwzględnieniu deadband i zakresu protokołu. Funkcja g(u) może być liniowa, potęgowa albo tabelaryczna. Dla systemu z closed-loop RPM mapa może być bliższa liniowej. Dla open-loop voltage duty zależność od RPM zmienia się z napięciem, obciążeniem i przepływem.

Nie należy dopasowywać jednocześnie krzywej ω(u) i osobnej T(u) z różnych warunków. Jeżeli model liczy ciąg z RPM, to T(u) jest wynikiem i służy do walidacji. Jeśli używa bezpośredniej mapy T(u), RPM może być jedynie diagnostyczną estymatą.

Minimalne nieliniowości to:

  • próg startu;
  • idle;
  • saturacja maksymalnego RPM;
  • limit zależny od napięcia;
  • deadband i rozdzielczość komendy;
  • stan armed/disarmed.

Dynamika pierwszego rzędu#

Popularny model RPM:

dω/dt = (ω_cmd - ω) / τ

Dyskretna aktualizacja odporna na zmianę kroku:

ω[k+1] = ω[k] + (1 - exp(-Δt/τ))(ω_cmd - ω[k])

Ta forma jest lepsza od ω += Δt/τ · error przy dużym Δt, bo dokładnie dyskretyzuje stałe wejście modelu pierwszego rzędu. Nadal pozostaje przybliżeniem: realna stała czasowa zależy od RPM, obciążenia, napięcia, limera prądu i aktywnego hamowania.

τ należy identyfikować z odpowiedzi RPM, nie ciągu, jeśli model później używa T∝ω². Odpowiedź ciągu ma inną krzywiznę. Czas osiągnięcia 63,2% zmiany RPM odpowiada jednej stałej czasowej tylko dla czystego pierwszego rzędu bez dead time.

Asymetria spin-up i spin-down#

Rozbieg i hamowanie zwykle nie są symetryczne. ESC może ograniczać prąd przy przyspieszaniu, a przy zmniejszeniu komendy wirnik wytracać energię przez opór aerodynamiczny albo aktywne hamowanie. Prosty model:

τ = τ_up   gdy ω_cmd > ω
τ = τ_down gdy ω_cmd ≤ ω

Gazebo w oficjalnym przykładzie multicoptera udostępnia osobne timeConstantUp oraz timeConstantDown, obok maxRotVelocity, motorConstant i momentConstant.[1] To dobre minimum dla symulacji regulatora, ale wartości przykładowego modelu X3 nie są automatycznie parametrami innego napędu.

Przy zmianie znaku w napędzie odwracalnym potrzebna jest sekwencja hamowanie → zero → rozbieg w przeciwną stronę. Przeskok znaku ω w jednym kroku tworzy nieograniczony moment i niefizyczne yaw.

Model elektryczny BLDC#

W uproszczeniu równoważnym silnik może być opisany jak DC:

V = R i + L di/dt + K_e ω
τ_m = K_t i

K_e jest stałą back-EMF, K_t stałą momentu. W spójnych jednostkach SI są liczbowo powiązane, ale parametry katalogowe KV w RPM/V wymagają konwersji i uwzględnienia definicji producenta. Idealne KV nie oznacza RPM pod obciążeniem równego KV·V.

Równanie mechaniczne:

J dω/dt = τ_m - Q_prop - τ_friction - τ_other

Ten model pozwala odtworzyć wpływ napięcia, rezystancji, prądu i bezwładności bez symulacji każdej komutacji. NASA w modelowaniu elektrycznego powertrain małego UAV łączy model baterii, uproszczony ESC, silnik i śmigło; najprostszy model propellera przyjmuje ciąg i moment proporcjonalne do kwadratu prędkości obrotowej.[2]

Przy dużym kroku równanie prądu z małą stałą L/R może być numerycznie sztywne. Opcje to mniejszy substep, rozwiązanie analityczne na kroku albo quasi-statyczne i=(V_eff-K_eω)/R z jawnym opisem utraconej dynamiki.

Moment bezwładności#

J obejmuje wirnik silnika, adapter i śmigło przeliczone do tej samej osi. Jest kluczowy dla transientu i energii:

E_rot = 1/2 J ω²

Śmigło o większej średnicy może znacząco zwiększyć bezwładność nawet przy podobnej masie, ponieważ masa znajduje się dalej od osi. J można:

  • uzyskać z CAD z poprawnym materiałem i osią;
  • zmierzyć metodą wahadła/torsji;
  • zidentyfikować z transientu przy znanym momencie;
  • traktować jako parametr dopasowania, jeśli pozostałe składniki są ustalone.

Dopasowanie τ modelu pierwszego rzędu może pochłonąć bezwładność, limiter prądu i aerodynamikę. Taki τ jest parametrem empirycznym konkretnego punktu pracy, nie uniwersalną własnością silnika.

ESC i ograniczenia#

Model ESC może obejmować:

  • dekodowanie PWM/DShot/CAN i timeout komendy;
  • arm/disarm, rampę startową i idle;
  • duty albo target RPM;
  • ograniczenie prądu i mocy;
  • napięcie minimalne/maksymalne;
  • timing/komutację na poziomie abstrakcyjnym;
  • aktywne hamowanie;
  • derating termiczny;
  • dropout/desync jako stan usterki;
  • telemetrię eRPM, voltage, current, temperature i flags.

Limiter nie powinien jedynie przycinać końcowego thrust. Limit prądu zmniejsza dostępny moment, co wydłuża spin-up i zmienia RPM. Limit napięcia ogranicza V_eff; limit temperatury może obniżać dopuszczalny duty albo prąd w czasie.

Desync nie jest po prostu thrust=0 na zawsze. Możliwe skutki to utrata momentu, błędna komutacja, ponowny start, pulsacje i telemetria błędu. Dla testu flight controllera wystarczy nazwana maszyna stanów; do badania przyczyn potrzebny jest model komutacji opisany w diagnostyce ESC desync.

Bateria i przewody#

Utrzymywanie stałego napięcia przez cały lot daje zbyt optymistyczny napęd. Minimalny model Thevenina:

V_bus = V_oc(SOC,T) - I_total R_internal(SOC,T) - V_dynamic

Do tego dochodzi rezystancja przewodów, złączy, PDB i pomiaru. Każdy silnik dzieli tę samą szynę, więc gwałtowny wzrost prądu jednego napędu obniża napięcie pozostałych — to common-cause coupling.

Kolejność obliczeń w kroku tworzy pętlę algebraiczną:

V_bus → prądy silników → I_total → V_bus

Można rozwiązać ją iteracyjnie, analitycznie dla uproszczonego modelu albo użyć wartości z poprzedniego substepu przy dostatecznie małym kroku. Należy monitorować błąd energii i stabilność numeryczną.

Model akumulatora powinien rozdzielać SOC, napięcie open-circuit, sag, temperaturę i limity BMS. Sama pojemność Ah nie wystarcza.

Współczynniki śmigła#

Dla śmigła o średnicy D, pracującego z n obrotami na sekundę w gęstości ρ, używa się bezwymiarowych współczynników:

C_T = T / (ρ n² D⁴)
C_Q = Q / (ρ n² D⁵)
C_P = P / (ρ n³ D⁵)

Ponieważ P = 2πnQ, zachodzi C_P = 2π C_Q, jeśli definicje są spójne. Źródła mogą używać innych oznaczeń lub średnicy/promienia, dlatego nie wolno kopiować liczby bez równania definicyjnego.

Bezwymiarowa forma ułatwia skalowanie względem gęstości, obrotów i średnicy, lecz współczynniki zależą od geometrii, advance ratio, Reynolds number, Mach number, kąta łopaty i warunków instalacji. Nie są stałą wszystkich śmigieł o tym samym rozmiarze.

Ciąg, moment i moc#

Po przekształceniu:

T = C_T ρ n² D⁴
Q = C_Q ρ n² D⁵
P_shaft = 2π n Q = C_P ρ n³ D⁵

Model T=k_Tω² i Q=k_Qω² jest równoważny stałym współczynnikom w konkretnych jednostkach oraz warunkach. Dla zawisu multirotora może być użyteczny w ograniczonym zakresie, lecz nie uwzględnia lotu postępowego.

Spójność energetyczna wymaga, aby moment obciążenia użyty w równaniu silnika odpowiadał mocy aerodynamicznej. Nie można niezależnie dopasować małego Q i dużego T, jeśli prowadzi to do sprawności przekraczającej fizyczne granice.

NASA opisuje zależności współczynników i skalowania propellera w raporcie technicznym, a NASA Glenn przedstawia prostą teorię ciągu i zmianę pędu strugi.[3][4] Teoria momentum daje kontrolę porządku wielkości, ale nie zastępuje charakterystyki konkretnej łopaty.

Advance ratio i lot postępowy#

Advance ratio:

J = V_a / (n D)

gdzie V_a jest składową prędkości napływu wzdłuż osi śmigła. W lotniczych bazach danych C_T, C_Q lub C_P są funkcjami J i RPM/Reynolds. Dla J=0 mamy warunek statyczny. Wraz ze wzrostem J ciąg przy stałym RPM zwykle się zmienia; przy bardzo dużym J śmigło może przejść w windmilling albo generować ujemny thrust.

Interpolacja powinna:

  • działać w obrębie zmierzonych punktów;
  • jawnie ograniczać lub odrzucać ekstrapolację;
  • zachować ciągłość pochodnych, jeśli używa jej regulator/optimizer;
  • rozróżniać serie RPM, jeśli wpływ Reynolds jest widoczny;
  • logować wyjście poza tabelę.

Użycie tylko statycznego punktu J=0 dla fixed-wing daje błędny ciąg w przelocie. Użycie mapy z tunelu dla swobodnego śmigła może nie odpowiadać instalacji przed kadłubem, za skrzydłem albo w duct.

Napływ i praca w osi#

Prędkość napływu w dysku nie zawsze równa się prędkości środka masy względem powietrza. Wpływają na nią indukowana prędkość wirnika, ruch obrotowy płatowca, sąsiednie rotory, skrzydło i lokalna geometria.

W prostym modelu bierze się prędkość lokalnego punktu wirnika:

v_local = v_body + ω_body × r_rotor - v_wind
V_a = dot(v_local, axis_rotor)

Składowa prostopadła może generować rotor drag i momenty boczne. Dla szybkiego lotu multirotora dysk pracuje w skośnym przepływie; samo osiowe J nie opisuje pełnej aerodynamiki. Wtedy potrzebny jest empiryczny model obciążeń dysku albo blade-element/momentum.

W obszarach vortex ring state, turbulent wake state i windmill brake state proste równania momentum mogą mieć wiele rozwiązań albo tracić ważność. Model należy oznaczyć zakresem, zamiast płynnie ekstrapolować go przez wszystkie reżimy.

Moment reakcyjny i yaw#

Śmigło wymaga momentu Q, więc na płatowiec działa przeciwny moment reakcyjny. Znak zależy od kierunku obrotu. Dla quadrocoptera suma momentów CW i CCW steruje yaw.

Proporcja Q = k_m T jest popularnym uproszczeniem. Jest poprawna tylko w zakresie, w którym stosunek współczynników pozostaje wystarczająco stały. Do testów agresywnego yaw lub zmiennego pitch lepiej liczyć Q niezależnie z C_Q.

Dynamiczna zmiana RPM tworzy dodatkowy moment związany z przyspieszaniem wirnika:

Q_inertia = J dω/dt

Moment przekazywany na ramę w transient może więc różnić się od aerodynamicznego torque w stanie ustalonym. Pominięcie go daje zbyt łagodną odpowiedź yaw przy szybkich zmianach throttle.

Położenie wirnika i moment siły#

Siłę przykłada się w rzeczywistym punkcie hubu i w osi wirnika. Moment względem środka masy:

M_arm = r_rotor × F_thrust

Do tego dodaje się moment reakcyjny wzdłuż osi. Dla pochylonych rotorów, VTOL i niesymetrycznych ram oś nie jest równoległa do body Z. Mixer i model fizyki muszą używać tej samej geometrii.

Zmiana środka masy po dodaniu payloadu modyfikuje ramiona. Jeśli model pozostawia siły względem starego CG, może fałszywie wskazywać poprawny hover throttle i zerowy moment. Geometria jest częścią konfiguracji wariantu statku, nie stałą pluginu.

Opór wirnika i ruch boczny#

Wirujący dysk w ruchu poprzecznym generuje siły oporu zależne od RPM i składowej prędkości prostopadłej do osi. Uproszczony model może mieć postać:

F_drag = -k_drag |ω| v_perp

Kod modelu multicoptera Gazebo uwzględnia rotorDragCoefficient oraz rollingMomentCoefficient, poza ciągiem i momentem.[5] Ich wartości są modelowe i wymagają identyfikacji lub przynajmniej analizy wrażliwości.

Pominięcie rotor drag może zaniżać tłumienie prędkości bocznej. Przesadny współczynnik może natomiast ukryć błędny regulator velocity. Waliduje się go manewrem o znanej prędkości i tilt, nie zawisem.

Ground effect i otoczenie#

Blisko podłoża pole przepływu zmienia induced velocity i wymagany ciąg/moc. Efekt zależy od wysokości nad powierzchnią odniesionej do promienia wirnika, nachylenia, geometrii podłoża, wielu rotorów i ruchu poziomego. Prosty mnożnik thrust zależny tylko od wysokości może być użyteczny, ale powinien mieć ograniczony zakres i płynne przejście.

Nie należy stroić kontrolera wysokości na modelu ground effect, który nagle zmienia współczynnik na arbitralnej granicy. Warto porównać lot na różnych wysokościach, nad powierzchnią płaską i poza ground effect. NASA/US Army prowadziły pomiary outwash rotorcraft in ground effect; publikacje tego typu nadają się do sprawdzenia trendu, ale nie dają gotowego współczynnika konkretnego quadcoptera.[6]

Gęstość powietrza powinna pochodzić ze wspólnego modelu atmosfery. Zmiana wysokości i temperatury wpływa na thrust, torque, chłodzenie i moc. Nie można zmienić ρ tylko w ciągu, zostawiając stały moment aerodynamiczny.

Interferencja rotorów#

W multirotorze strugi nakładają się z ramionami, kadłubem i innymi dyskami. W układzie coaxial dolny rotor pracuje w strudze górnego; suma ciągów i mocy nie jest prostym podwojeniem pojedynczego pomiaru. W tiltrotor/VTOL wake może oddziaływać ze skrzydłem i sterami.

Poziomy modeli:

  1. niezależne rotory — szybki baseline;
  2. empiryczne mnożniki zależne od konfiguracji i throttle;
  3. model induced flow/wake;
  4. blade-element/momentum;
  5. CFD lub surrogate z CFD.

Empiryczny model powinien zachować energię i symetrię tam, gdzie fizyka jej wymaga. Współczynnik „-10% dla dolnego rotora” bez zależności od spacing i punktu pracy jest tylko założeniem scenariusza.

Śmigło fixed-wing#

Dla samolotu UAV główne znaczenie mają C_T(J) oraz C_P(J). Model powinien otrzymywać airspeed w osi, RPM, density i pitch śmigła. Wynikiem jest thrust oraz shaft torque, które obciążają silnik.

Sprawność propulsyjna:

η_p = T V_a / P_shaft

W statyce V_a=0, więc ta definicja daje zero, mimo że śmigło generuje użyteczny ciąg; nie służy do oceny hover. W przelocie sprawność nie może przekraczać jeden w modelu pasywnym. Wynik powyżej jedności sygnalizuje niespójne jednostki, interpolację albo definicje współczynników.

Przy stałym pitch punkt pracy wynika z równowagi momentu silnika i śmigła. Zakładanie RPM niezależnego od airspeed omija tę zależność. Closed-loop governor może utrzymywać RPM, ale wymaga rosnącego/malejącego prądu w granicach napięcia.

Odwracalny napęd i hamowanie#

Napęd reversible wymaga danych dla ujemnego RPM albo osobnego modelu. Typowe śmigło zoptymalizowane do jednego kierunku nie ma symetrycznej charakterystyki. T(-ω)=-T(ω) jest wygodnym założeniem, nie faktem.

Przy windmilling przepływ może napędzać wał. Silnik/ESC może wtedy:

  • swobodnie się obracać;
  • hamować i rozpraszać energię;
  • regenerować do baterii, jeśli architektura to dopuszcza;
  • ograniczać napięcie szyny.

Nie należy automatycznie dodawać odzysku energii do modelu konsumenckiego ESC. Regeneracja jest właściwością całego toru zasilania i wymaga możliwości przyjęcia mocy przez baterię/BMS.

Energia i termika#

Moc wejściowa:

P_e = V_bus I_bus

Moc mechaniczna:

P_m = τ_m ω

Różnica obejmuje straty przewodzenia, przełączania, miedzi, żelaza i mechaniczne. Sprawność zależy od RPM, torque, napięcia, timingu i temperatury. Jedna stała sprawność może wystarczyć do szacunku misji, ale powinna być oparta na mapie i analizie wrażliwości.

Minimalny model termiczny typu RC:

C_th dT/dt = P_loss - (T - T_ambient)/R_th

Silnik i ESC mają różne węzły, stałe czasowe i chłodzenie zależne od przepływu. Artykuł o temperaturze silników i ESC opisuje pomiar i derating. W symulacji termika powinna wpływać na rezystancję uzwojeń, limity i stan awarii, jeżeli celem jest kwalifikacja misji.

Bilans energii jest silnym testem: całka mocy baterii powinna pokrywać zmianę energii baterii, pracę mechaniczną i straty w granicach błędu numerycznego/modelowego.

Awarie i degradacja#

Przydatne fault modes:

  • całkowite wyłączenie jednego napędu;
  • częściowa utrata mocy lub limit RPM;
  • wzrost stałej czasowej;
  • błędna mapa komendy;
  • desync z recovery;
  • uszkodzone łożysko: wzrost friction, prądu i drgań;
  • uszkodzone śmigło: spadek C_T, zmiana C_Q, niewyważenie;
  • wzrost rezystancji złącza;
  • zablokowany wirnik i limit prądowy;
  • błędna telemetria eRPM przy prawidłowym thrust;
  • wspólny spadek napięcia szyny.

Utrata 30% ciągu nie musi oznaczać 30% RPM. Przy T∝ω² odpowiada to innemu stosunkowi prędkości. Fault powinien działać na fizycznej warstwie zgodnej z wymaganiem: uszkodzenie łopaty zmienia aerodynamikę, limiter ESC moment, a dropout komendy target.

Model awarii powinien logować ground-truth fault state oddzielnie od telemetrii dostępnej FC. Wtedy można ocenić wykrycie, false positives i latency detekcji.

Identyfikacja na hamowni#

Bezpieczna hamownia napędu mierzy co najmniej thrust, torque albo moc mechaniczną pośrednio, RPM, napięcie i prąd. Dodatkowo temperaturę, pressure/density i komendę. Hamownia napędu UAV powinna mieć osłonę, zdalne sterowanie i procedurę awaryjnego odłączenia energii.

Statyczny plan pomiaru:

  1. identyfikacja silnika, ESC, firmware, śmigła i baterii/zasilacza;
  2. kalibracja load cells, current i voltage;
  3. pomiar temperatury i ciśnienia;
  4. rozgrzanie według stałej procedury;
  5. sweep komendy w górę i w dół;
  6. czas na stan ustalony w każdym punkcie;
  7. co najmniej kilka powtórzeń;
  8. rejestracja RPM/T/Q/V/I/temperatury;
  9. kontrola driftu zera po próbie.

Sweep w dół ujawnia histerezę i nagrzanie. Zasilacz laboratoryjny o stałym napięciu nie odwzorowuje sag baterii, ale ułatwia identyfikację mapy. Osobna próba baterii dodaje warstwę źródła energii.

Tyto Robotics publikuje dane stanowisk i informacje o kalibracji; niezależnie od producenta trzeba zweryfikować zakres, rozdzielczość, częstotliwość i niepewność dla badanego napędu.[7]

Próba dynamiczna#

Do identyfikacji τ, dead time i limitera potrzebny jest zapis transientu o rate wyższym od pasma odpowiedzi. Możliwe pobudzenia:

  • małe kroki wokół kilku punktów pracy;
  • duży krok idle→wysoki throttle;
  • zejście wysokie→idle;
  • PRBS/chirp w bezpiecznym zakresie;
  • zmiana napięcia przy stałym target;
  • napływ z tunelu albo stanowiska ruchomego.

Analizuje się osobno komendę, RPM, thrust, current i voltage. Jeśli RPM zaczyna rosnąć po 2 ms, a thrust po 4 ms, jedna stała thrust lag traci informację. Identyfikacja powinna uwzględniać filtr i latency aparatury; wolna load cell może wyglądać jak bezwładność napędu.

Parametry dopasowuje się na zbiorze treningowym, a waliduje na innych sekwencjach i punktach pracy. Dopasowanie oraz ocena na tym samym stepie zawyżają jakość.

Dane UIUC i źródła producenta#

UIUC Propeller Database zawiera wyniki pomiarów wielu śmigieł modelarskich, w tym dane statyczne i w funkcji advance ratio.[8] Plik trzeba czytać razem z opisem kolumn, jednostek, serii RPM i warunków. Nazwa handlowa śmigła nie gwarantuje identyczności z późniejszą rewizją produktu.

Dokumentacja producenta silnika może podawać KV, resistance, no-load current, limity prądu i mapy sprawności. maxon opisuje wykorzystanie stałych silnika w obliczeniach i symulacji.[9] Dla silników modelarskich dane bywają typowe lub marketingowe; należy je potwierdzić pomiarem.

Wszystkie dane powinny mieć provenance:

  • dokładny model/MPN i wariant;
  • śmigło, kierunek i wyważenie;
  • ESC oraz ustawienia;
  • liczba cel i napięcie pod obciążeniem;
  • data, temperatura i gęstość;
  • aparatura i kalibracja;
  • źródło/licencja.

Implementacja dyskretna#

Pseudokod modelu średniej wierności:

for each physics substep dt:
    u = decode_and_limit(command, esc_state)
    Vbus = battery.voltage(total_current_previous, dt)

    for each motor:
        Va = local_axial_airspeed(vehicle_state, wind, rotor_pose)
        Jadv = safe_advance_ratio(Va, rotor_rps, diameter)
        CT, CQ = prop_table.interpolate(Jadv, rotor_rps)

        Qprop = CQ * rho * n*n * D^5
        current = motor.current(Vbus, duty(u), omega, dt)
        torque = Kt * current - friction(omega)
        omega += dt * (torque - signed(Qprop)) / inertia

        thrust = CT * rho * n*n * D^4
        apply_force_at_hub(thrust * rotor_axis)
        apply_reaction_torque(-signed(Qprop) * rotor_axis)

    total_current = sum(motor.current_dc)

Przy n≈0 advance ratio jest osobliwy. Należy przełączyć się na dane statyczne albo model startu, nie dzielić przez arbitralne epsilon i ekstrapolować tabelę do ogromnego J.

Kolejność obliczeń i substep muszą być udokumentowane. Jeżeli model silnika działa 1 kHz, a fizyka 250 Hz, siłę można uśredniać po substepach. Podanie tylko końcowego thrust może zniekształcić transient.

Model Gazebo#

Oficjalny przykład quadcopter.sdf Gazebo używa systemu MulticopterMotorModel osobno dla każdego rotora. Konfiguracja obejmuje między innymi joint/link, kierunek, stałe czasu w górę i w dół, maksymalną prędkość, motor/moment constant, rotor drag, rolling moment i współczynnik spowolnienia wizualnej prędkości.[1]

rotorVelocitySlowdownSim jest rozwiązaniem numeryczno-wizualnym: geometria wirnika obraca się wolniej w silniku fizyki, podczas gdy obliczenia używają przeskalowanej realnej prędkości. Nie jest przekładnią fizycznego napędu. Pomylenie go ze scale RPM psuje moment i animację.

Przykładowe wartości z modelu nie są biblioteką danych komponentów. Dla własnego UAV należy:

  1. ustalić równania używane przez dokładną wersję pluginu;
  2. sprawdzić jednostki w kodzie źródłowym;
  3. dopasować motorConstant z thrust/RPM;
  4. dopasować momentConstant z torque/thrust albo danych yaw;
  5. wyznaczyć time constants z transientu;
  6. zweryfikować rotor drag w locie poziomym;
  7. przypiąć commit modelu i Gazebo.

Model Gazebo jest użytecznym baseline dla laboratorium PX4. Do prognozy energii trzeba dołożyć prąd, napięcie i baterię, których prosty plugin siły nie musi modelować.

Walidacja#

Walidację prowadzi się warstwowo.

Stan ustalony#

Porównaj RPM, thrust, torque i current w punktach komendy/napięcia. Raportuj błąd bezwzględny i względny, ale nie dziel przez wartość bliską zero. Sprawdź sweep w górę i w dół.

Transient#

Porównaj dead time, czas 10–90%, overshoot, τ lokalne, peak current i różnice up/down. Oceń kilka amplitud oraz punktów pracy.

Lot postępowy#

Porównaj thrust/power w funkcji J albo prędkości. Statyczna zgodność nie wystarcza dla fixed-wing.

Płatowiec#

W zawisie porównaj hover throttle, RPM, prąd, attitude response i yaw authority. W manewrach porównaj acceleration oraz energy. Nie dopasowuj wszystkich współczynników do jednego hover point.

Energia#

Porównaj zużyte Wh/Ah, napięcie minimalne i temperaturę w profilu misji. Błąd końcowego SOC może kompensować błędny thrust oraz błędną sprawność, dlatego sprawdza się przebiegi pośrednie.

Model jest zwalidowany tylko w obwiedni testu: zakres RPM, napięcia, J, density i temperatury. Ekstrapolacja powinna generować flagę w logu.

Minimalny zestaw testów#

Test 1 — jednostki i znaki#

Przy znanym RPM policz ręcznie T i Q. Sprawdź CW/CCW, oś thrust oraz moment ramienia. Suma czterech równych rotorów symetrycznej ramy powinna dać zerowy roll/pitch/yaw i niezerowy thrust.

Test 2 — skalowanie#

Podwój n: dla stałych współczynników thrust i torque powinny wzrosnąć czterokrotnie, a moc ośmiokrotnie. Zmień density i sprawdź liniową zależność.

Test 3 — stałe czasu#

Wykonaj step up/down z małą i dużą amplitudą. Porównaj analityczną odpowiedź pierwszego rzędu albo referencyjny log modelu elektromechanicznego.

Test 4 — bilans momentu#

W stanie ustalonym moment silnika powinien równoważyć prop torque i straty. dω/dt ma dążyć do zera.

Test 5 — bilans energii#

Całka V·I nie może być mniejsza od dostarczonej energii mechanicznej w pasywnym modelu. Uwzględnij energię kinetyczną wirnika podczas transientu.

Test 6 — advance ratio#

Przejdź przez zakres tabeli J, granice i przypadek n→0. Sprawdź brak NaN, jawne flagi ekstrapolacji oraz ciągłość.

Test 7 — fault#

Ogranicz moment, usuń część C_T, zwiększ friction i odłącz komendę. Każdy fault powinien dać inny ślad RPM/current/thrust, który może wykorzystać diagnostyka.

Test 8 — coupling baterii#

Zadaj step jednego i wszystkich silników. Zweryfikuj wspólny sag, limity, peak current i brak zależności od kolejności iteracji rotorów.

Typowe błędy#

  • Użycie RPM w równaniu wymagającym rad/s albo odwrotnie.
  • Użycie promienia w miejscu średnicy w potęgach D⁴/D⁵.
  • Stały thrust coefficient przeniesiony między różnymi śmigłami.
  • Model statyczny użyty do fixed-wing w przelocie.
  • Natychmiastowa zmiana thrust wraz z komendą.
  • Jedna stała czasu dla wszystkich napięć i obciążeń bez walidacji.
  • Stałe napięcie baterii i niezależne źródło dla każdego silnika.
  • Przyciskanie końcowego thrust limitem prądu zamiast ograniczenia momentu.
  • Pomylenie torque aerodynamicznego z całkowitym momentem na ramie w transient.
  • Siła przyłożona w środku masy zamiast w hubie.
  • Brak momentu reakcyjnego lub zły znak CW/CCW.
  • Interpolacja C_T(J) daleko poza danymi bez flagi.
  • Dopasowanie modelu i ocena na tym samym sweepie.
  • Kopiowanie parametrów przykładowego modelu Gazebo do innego napędu.
  • Brak wersji śmigła, ESC, firmware, napięcia i warunków pomiaru.

Dobry model napędu zachowuje jednocześnie siłę, moment, czas i energię. Jeśli zgadza się tylko hover thrust, ale nie RPM, current, transient ani yaw torque, jest dopasowaną tabelą, nie zwalidowanym modelem powertrain. Warstwowa budowa pozwala zacząć od szybkiego kω², a następnie dodawać elektrykę, napływ, termikę i interferencję dopiero wtedy, gdy test ma dane zdolne te zjawiska rozróżnić.

Powiązane tematy#

Przypisy#

  1. Open Robotics, Gazebo Sim multicopter motor model example, quadcopter.sdf — konfiguracja stałych czasu, prędkości, ciągu/momentu, rotor drag i kierunku obrotu.
  2. NASA, Hybrid Modeling of Unmanned Aerial Vehicle Electric Powertrain — połączony model baterii, ESC, silnika i śmigła oraz identyfikacja napędu małego UAV.
  3. NASA/TM–20210014010, Propeller aerodynamic coefficients and scaling — definicje bezwymiarowych współczynników i skalowanie.
  4. NASA Glenn Research Center, Propeller Thrust — bilans pędu i podstawowe zależności ciągu śmigła.
  5. Open Robotics, kod źródłowy MulticopterMotorModel — równania sił oraz parametry pluginu; zachowanie należy sprawdzać dla przypiętego commitu.
  6. NASA/US Army, Experimental Investigation of Rotorcraft Outwash in Ground Effect — pomiary pola przepływu w ground effect.
  7. Tyto Robotics, Flight Stand 50 specifications and calibration overview — przykład aparatury do pomiaru napędu; zakres i niepewność dobiera się do badanego zestawu.
  8. UIUC Applied Aerodynamics Group, Propeller Database, Volumes 1–4 — pomiary śmigieł modelarskich w statyce i locie postępowym.
  9. maxon, Motor data and simulation — interpretacja parametrów silnika i użycie w modelu elektromechanicznym.
  10. Microchip Technology, Motor Control Algorithms — Brushless DC Motors — podstawy sterowania i komutacji BLDC.

Źródła z centralnego rejestru

  1. UIUC Applied Aerodynamics Group: Propeller Database, Volumes 1–4 [baza pomiarów uczelni]
  2. NASA/TM–20210014010: Propeller aerodynamic coefficients and scaling [publikacja techniczna]
  3. NASA Glenn: Propeller Thrust and Simple Momentum Theory [materiał edukacyjny instytucji badawczej]
  4. NASA: Hybrid Modeling of Unmanned Aerial Vehicle Electric Powertrain [publikacja badawcza NASA]
  5. Gazebo Sim: multicopter motor model example (quadcopter.sdf) [oficjalny przykład i kod projektu open source]
  6. Gazebo Sim: MulticopterMotorModel source [kod źródłowy projektu open source]
  7. maxon: Motor data and simulation [dokumentacja producenta]
  8. Tyto Robotics Flight Stand 50 — specifications and calibration overview [dokumentacja producenta stanowiska]
  9. Microchip: Motor Control Algorithms — Brushless DC Motors [dokumentacja producenta]
  10. Sumit Sharma, „Drone Development from Concept to Flight” [książka]