Simulácia pohybu postáv počítačových hier. Hodina informatiky "modelovanie pohybu" Verletova integračná metóda

Tento tutoriál obsahuje 3D scénu.

Stručný úvod

V skutočnosti už v predchádzajúcich lekciách boli určité aspekty fyziky v Cinema 4D spomenuté: napríklad hneď v prvej lekcii na tejto stránke sme pustili loptu na rovný povrch, neskôr sa fyzikálny model Cinema 4D považoval za jeden zo spôsobov ako simulovať generátor nekonečného pohybu . Ale doteraz to boli len čiastkové, extrémne povrchné a najprimitívnejšie aspekty fyziky.

V tejto lekcii prejdeme k tomu najzaujímavejšiemu: hĺbkovému štúdiu fyziky v Cinema 4D na konkrétnom príklade - pokúsime sa vytvoriť a nakonfigurovať (aspoň v najprimitívnejšej verzii) plne funkčný fyzikálny model pohybu auta v nerovnom teréne, simulujúc vo všeobecnosti rovnaké princípy, podľa ktorých sa auto pohybuje v reálnom svete.

Potreba použiť fyzický model pohybu vozidla spočíva v slovách „na nerovnom teréne“. Vo väčšine prípadov pri modelovaní automobilovej dopravy nie je potrebné používať fyzikálny model: autá sa pohybujú rovnomerne po trajektórii (presne takýto dopravný tok sme sa naučili vytvárať z jedného modelu auta, pamätáte?), pričom prakticky vizuálne interagujú v žiadnom prípade s prostredím, a to je ľahké a jednoduché na zobrazenie pomocou jednoduchých prostriedkov, bez použitia fyziky. Akonáhle sa však bavíme o zložitom teréne, po ktorom auto jazdí, alebo o mimoriadnom správaní sa samotného auta (driftovanie, šmyk či kolízie) – tu prichádza na rad fyzika, pokiaľ ty a ja nechceme manuálne umiestnite veľké množstvo kľúčov a upravte krivky správania trojrozmerného modelu pre každú sekundu jeho správania (a to bez zaručenia vizuálnej vierohodnosti konečného vykreslenia).

Ciele a ciele

Najprv si definujme naše ciele a ciele. V tejto lekcii je naším cieľom znázorniť viac či menej pravdepodobné správanie auta pri jazde na nerovnom povrchu. Presnejšie: auto by malo pri nárazoch na nerovnosti poskakovať a kotúľať sa a tiež by malo visieť kolesá cez výmoly. A samozrejme by mal spomaliť pri prekonávaní nervozity a zrýchliť na rovinatých plochách.

Ak by nešlo o zrýchľovanie a spomaľovanie auta v závislosti od terénu, možno by sme si našu úlohu zjednodušili „zavesením“ auta na neviditeľného „vodcu“ pohybujúceho sa po danej trajektórii – v tomto prípade by auto bolo ako detské sane, ktorých rýchlosť nezávisí od výšky snehových závejov pod bežcami a od rýchlosti kroku otca, ktorý vlečie syna na saniach. V našom prípade toto riešenie problému nie je pre vás a mňa vhodné, to znamená, že budeme musieť vybaviť model auta najviac fungujúcim motorom. Pre maximálny efekt urobíme z nášho auta SUV so zadným náhonom.

Začnime?

Začnime modelovaním vzhľadu auta (konkrétne vzhľadu, nie fyzického modelu – to nie je to isté!). Naše auto bude pozostávať iba z piatich trojrozmerných prvkov: karosérie a štyroch kolies. Dúfam, že chápete, že každé koleso by malo byť samostatným prvkom modelu. Okrem toho je vhodné, aby každé z kolies bolo pevné (monolitické), to znamená, že pozostávalo z jedného jediného prvku a nie zo súboru prvkov, inak sa neskôr stretnete s mnohými ťažkosťami - budete sa musieť spojiť. všetky prvky každého z kolies pomocou fyzikálnych modifikátorov , čo by bola podľa mňa úplne zbytočná strata času. Základným princípom, na základe ktorého sme rozdelili prvky modelu, je možnosť následného vizuálneho posunutia prvkov voči sebe počas pohybu SUV.

Upozorňujeme, že v spodnej časti karosérie SUV sú výrezy pre kolesá - hneď si dám výhradu, aby ich absencia neprekážala pri práci nášho budúceho fyzikálneho modelu (neskôr uvidíte sami), ale pri sledovaní pri animácii by ste videli, ako kolesá prechádzajú priamo dnu, čo by bola, samozrejme, hrubá vizuálna chyba.

Teraz prejdime k najdôležitejšej veci: vytvorenie skutočného fyzického modelu SUV. Okamžite by ste mohli predpokladať, že je čas pripevniť kolesá ku karosérii. V žiadnom prípade! Nie teraz, nie neskôr. A preto. Faktom je, že ak by ste kolesá pripevnili priamo na telo, mali by ste opäť veľa ťažkostí: fyzikálny model Cinema 4D by kolesá vnímal ako vnútri tela(t. j. akoby v ňom uviazli) a za každú cenu by sa ich snažil vyslobodiť, v dôsledku čoho by ste namiesto viac-menej hodnoverného správania kolies videli najmä ich malé, nepretržité vibrácie a minimálna reakcia na fyzickú interakciu s inými objektmi obklopujúcimi SUV. Samozrejme, tento problém sa dá úplne vyriešiť dolaďovaním a časovo náročným nastavovaním hodnôt dynamiky scény a modelov, ako sú intervaly, po ktorých dosiahnutí začína interakcia trojrozmerných prvkov, pôjde jednoduchšou cestou.

Pôjdeme jednoduchšou cestou – a tentoraz vytvoríme nie vizuálny, ale fyzický model karosérie auta. Ako navrhol autor, ide o najobyčajnejšiu polygonálnu kocku. V tom vašom to môže byť akýkoľvek iný polygonálny objekt – hlavné je, že ho nie je vidieť pod karosériou SUV a že ide o polygonálny model, ktorého okraje sú dostatočne vzdialené od kolies. Tento prvok budeme konvenčne nazývať centrum hmotnosti.

Prečo je to tak, pýtate sa? Prečo to nemôže byť NULL objekt alebo splajn?

Pretože hmotnostné centrum, ktoré sme vytvorili, má podľa definície a na základe svojho názvu aktívne participovať na fyzickom modeli SUV. Ani splajny, ani objekty NULL, ktoré majú fyzikálne vlastnosti, ich nepoužívajú, pretože nemajú fyzický povrch.

Bolo teda vytvorené ťažisko SUV. Prejdime k uchyteniu kolies. Pri absencii fyzikálneho modelu by sme ich jednoducho podriadili kocke (alebo aj telu) v správcovi objektov, a to by úplne stačilo. V našom prípade by kolesá nemali byť pripevnené pevne, ale berúc do úvahy určitú fyzickú slobodu, to znamená schopnosť mierne sa posunúť vzhľadom na stred hmotnosti, keď dôjde k fyzickej interakcii s inými objektmi na scéne (napríklad s nerovnomerným povrchy ciest).

Práve pre tento typ upevnenia poskytuje Cinema 4D objekty typu „Connector“ (z anglického „connect“ - „prepojiť“). Prejdite do hornej ponuky, vyhľadajte položku „Simulácia“, v položke rozbaľovacej ponuky vyberte podpoložku „Dynamika“ a v rozbaľovacej ponuke kliknite na „Konektor“.

Vidíme, že v pracovnom okne sa objavil nový objekt a jeho názov sa objavil v správcovi objektov. Začnime s pravým predným kolesom. Konektor umiestnime na miesto, kde sa nachádza geometrický stred kolesa, ktorý sa pomocou konektora pripevní na telo - pričom samotný geometrický stred kolesa by sa mal nachádzať v mieste, kde je stred náboja kolesa. umiestnený pri volante.

Teraz musíte nakonfigurovať konektor. Vyberte jeho názov v správcovi objektov a pozrite si okno vlastností, ktoré sa otvorí nižšie.

Prvým parametrom, ktorého hodnotu by sme mali zmeniť, je typ spojenia (parameter „Type“), ktorý určuje, ako sa koleso bude pohybovať voči karosérii. Je zrejmé, že najvhodnejším typom pripojenia v našom prípade bude „Odpruženie kolies“. V poli oproti slovám „Object A“ presuňte názov centra hmotnosti zo správcu objektov; na obrázku nižšie je označený ako „Základňa“ - to je predmet ku ktorému Pripevňujeme koleso. Do poľa oproti slovám „Object B“ presuňte názov kolesa (na obrázku označený ako „Wheel_FR“ zo skratky „Wheel Front Right“) – toto je namietať, že prikladáme vám ho. Parametre „Príloha A“ a „Príloha B“ sa nedotkneme – označujú, kde sú ťažiská objektov a predvolené hodnoty nám v tomto prípade celkom vyhovujú.

Prejdime k jemnému doladeniu konektora.

Nastavenie "Ignorovať kolízie" je vhodné, keď sa chcete vyhnúť fyzickej interakcii medzi kolesom a stredom hmotnosti - napríklad ak nastavenia konektora umožňujú kolesu vychýliť sa až o 45 stupňov, ale koleso stále spočíva na predmete, na ktorom sa nachádza. a nemôže sa odchýliť od maximálneho povoleného uhla, potom môže toto nastavenie pomôcť. Parameter „Steering Angle“ je maximálny povolený uhol odchýlky kolesa od jeho pôvodnej polohy. Parameter „Suspension Rest Position“ určuje vertikálny posun kolesa v pokoji (to znamená v tých momentoch, keď koleso s ničím neinteraguje). V našom prípade je hodnota -15 cm. - ak ju zmeníte na -25, karoséria SUV sa zdvihne v porovnaní s kolesami ešte vyššie ako v súčasnosti a svetlá výška sa zvýši, ale pri zároveň sa zníži stabilita SUV, keďže ťažisko bude vyššie - však, toto už pripomína vyváženie stability áut v reálnom svete? Mäkkosť odpruženia závisí od hodnoty parametra „Tuhosť odpruženia“. Čím nižšia hodnota, tým mäkšie bude odpruženie. Parameter „Suspension Dumping“ určuje „odskok“ zavesenia. A nakoniec, ak chcete, môžete aktivovať parametre „Dolný limit Y“ a „Horný limit Y“ a určiť pre ne hodnoty vzdialenosti, za ktoré sa koleso nemôže odchýliť.

Po dokončení nastavenia konektora zopakujeme rovnakú operáciu - počnúc vytvorením nového konektora - pre druhé predné koleso, tentoraz ľavé. Namiesto cestovania cez horné menu, ako ste už pravdepodobne zistili, môžete jednoducho nájsť konektor pravého predného kolesa, ktorý sme vytvorili predtým, a stlačením a podržaním klávesu „Ctrl“ na klávesnici celou silou potiahnite názov konektora na prázdne miesto v správcovi objektov - Po dokončení tejto operácie dostanete vy aj ja novú kópiu konektora, ktorá tiež zdedí všetky nastavenia z originálu. Hlavná vec je nezabudnúť zmeniť názov pravého kolesa na názov ľavého v poli „Objekt B“ vlastností nového konektora.

Predné kolesá sú hotové. Presuňme sa dozadu.

A hneď stojíme pred otázkou, ktorá je na prvý pohľad akosi nezrozumiteľná: koľko motorov by malo mať naše SUV? Aká zvláštna otázka, poviete si – jedna, samozrejme.

Dovoľte mi vysvetliť, s čím táto otázka súvisí. V skutočnom mechanizme automobilu sa krútiaci moment prenáša na obe hnacie kolesá súčasne prostredníctvom pomerne zložitého systému mechanických pohonov. Modelovať tento systém pohonu pre vás a mňa nemá zmysel, keďže nemáme za úlohu vizualizovať vnútornú štruktúru SUV, čo znamená, že namiesto plného chodu motora si môžeme dovoliť akúkoľvek zjednodušenú fyzickú imitáciu to, pokiaľ sa hnacie kolesá otáčajú a tlačia auto dopredu.

Takže vy a ja máme dve alternatívne riešenia: ak zúfalo potrebujeme vykresliť oddelená trakcia dvoch hnacích kolies, môžeme do virtuálneho dizajnu pridať dva samostatné motory, z ktorých každý bude točiť svoje koleso. Ak nepotrebujeme modelovať samostatnú trakciu, potom najefektívnejším a najjednoduchším spôsobom, ako uviesť auto do pohybu, je vytvoriť takzvaný „kolesový pár“ – dve kolesá tesne spojené dohromady, ktoré poháňa jeden motor.

V tejto lekcii si zvolíme druhý, jednoduchší spôsob – vytvorenie dvojkolesia a jeho otáčanie jedným motorom. S výhradou, že v zásade, ak chcete, môžete túto metódu skomplikovať - ​​napríklad neotáčajte dvojkolesím, ale nápravou s hnacími kolesami pripojenými pomocou konektorov tak, aby sa voľne kývali dopredu a dozadu, ako napr. sme už nakonfigurovali pre predné kolesá V tejto lekcii si však nebudeme našu úlohu zbytočne komplikovať, ak máte chuť, experimentujte sami na základe scénky priloženej k tejto lekcii, odkaz na ňu nájdete na začiatku lekcie.

Takže je rozhodnuté - vytvoríme dvojkolesie: vyberte dve zadné kolesá - môžete v pracovnom okne, môžete prejsť do správcu objektov, kde je to pre vás pohodlnejšie - potom v správcovi objektov klikneme pravým tlačidlom myši na ľubovoľné z nich a v rozbaľovacej kontextovej ponuke hľadáme položku „Pripojiť“ + Odstrániť“ („Pripojiť a odstrániť“). O riadok vyššie v tej istej kontextovej ponuke je položka „Pripojiť“ - pri kombinovaní prvkov vytvorí nový objekt, pričom originály zlúčených modelov ponechajú nedotknuté, nebudeme potrebovať originály samostatných zadných kolies.

Vidíme, že zadné kolesá SUV sa stali jedným trojrozmerným prvkom – čo sme potrebovali.

Vytvárame ďalší konektor - tentoraz pre zadné dvojkolesie a vzhľadom na jeho monolitickú povahu je len jeden a potom ho nakonfigurujeme. Umiestňujeme ho, prirodzene, do stredu dvojkolesia.

Teraz vytvoríme motor: horné menu, opäť položka „Simulácia“, rozbaľovacia ponuka, podpoložka „Dynamika“, podpoložka „Motor“ v rozbaľovacej ponuke.

Vytvorený motor umiestnime na to isté miesto ako konektor pre dvojkolesie - do stredu medzi zadné kolesá (alebo vedecky povedané do geometrického stredu zadného dvojkolesia), potom v správcovi objektov vyberieme jeho názov, plynulo prejdeme náš pohľad na okno vlastností motora, ktoré sa otvára nižšie, a pokračujeme na stavenisko.

V poli vedľa slov „Object A“ potiahnite názov zadného dvojkolesia zo správcu objektov (na obrázku je označený ako „Back Wheels“). Do poľa vedľa slov „Objekt B“ nič nepreťahujeme. Pre parameter „Typ“ vyberte hodnotu „Uhlový“ - všetko je správne, pretože aby sa SUV mohol pohybovať, motor, ktorý sme vytvorili, musí neustále otáčať hnacie dvojkolesie do určitého uhla. Nastavte parameter „Mode“ na „Regulate Speed“. A nakoniec uvádzame číselné hodnoty parametrov „Uhlová cieľová rýchlosť“ a „Krútiaci moment“.

Pravdepodobne ste pripravení spustiť animáciu a skontrolovať výsledky. Ak áno, potom je ešte priskoro: napokon, vy a ja sme dokončili iba jednu časť práce – nastavili sme fyzický vplyv na objekty, zatiaľ čo samotné fyzické objekty ešte nemáme. A kolesá, hovoríte, a telo a kocka hmotnosti? Je pravda, že boli vytvorené polygonálne modely, ale fyzikálne pre sily vplyvu ešte neexistujú kolesá, ani karoséria, ani kocka závažia - kým sa nepriradí ku kolesám, karosérii a kocke závažia dynamická značka. Pretože je to dynamická značka priradená k polygonálnemu prvku trojrozmernej scény, ktorá naznačuje, že tento prvok sa zúčastňuje interakcie s inými prvkami, ktoré majú dynamické vlastnosti.

Začnime nastavovať fyzikálne vlastnosti SUV. A zároveň budujeme hierarchickú štruktúru prvkov, z ktorých sa skladá. Najprv vytvoríme skupinu, v ktorej sa budú zhromažďovať všetky prvky auta (ak to ešte nebolo urobené) - to sa dá urobiť kombináciou niekoľkých prvých prvkov, ktoré sa vám dostanú pod ruku pomocou kombinácie kláves Alt + G (Pripomínam, že na rozdiel od všeobecne akceptovanej metódy v Cinema 4D sekvenčných samostatných stláčaní kláves, táto kombinácia sa stláča súčasne!), alebo vytvorením NULL objektu.

Následne vytvorenú skupinu nazveme nejakým jedinečným, nenapodobiteľným a nezabudnuteľným slovom (napr. autor to nazval „CAR“) a napcháme do nej všetky prvky súvisiace s SUV: karosériu, kolesá, konektory, závažie a motor.

Teraz označíme prvky skupiny ako účastníkov fyzickej interakcie s okolitým fyzickým modelom: vyberte názov skupiny, kliknite naň pravým tlačidlom myši, v rozbaľovacej ponuke presuňte kurzor myši na položku „Dynamics Tags“ a v rozbaľovacej ponuke z poslednej podponuky vyberte jedinú položku - „Dynamické telo“.

Ak ste doteraz pozorne čítali túto lekciu, možno sa pýtate: ako môže skupina „CAR“, keďže je objektom NULL, fyzicky interagovať vo fyzickom modeli? Správne, samotný objekt NULL nefunguje. Vlastnosti dynamiky však môžu zdediť všetky jemu podriadené prvky a nie je potrebné priraďovať dynamickú značku každému prvku jednotlivo. Hlavná vec je správne nastaviť značku dynamiky skupiny. Konfigurovať: vyberte značku a v okne vlastností, ktoré sa otvorí nižšie, vyberte kartu „Dynamika“, v ktorej aktivujeme parameter „Povolené“ (čím zahŕňa fyziku interakcie) a pre parameter „Dynamický“ vyberte hodnotu „Zapnuté“ ( čím sa naznačuje účasť skupiny na všetkých bežných pre scénu fyzikálnych pravidiel, ako je gravitácia atď.)...

Potom prejdite na kartu „Kolízia“ v tom istom okne vlastností a zadajte hodnoty, ktoré prinútia prvky skupiny zdediť pravidlá dynamiky: „Použiť značku na deti“ pre parameter „Zdediť značku“ „ („Dedičnosť“), "Všetky" pre "Jednotlivé prvky", začiarknutie pre "Vlastné kolízie" a "Automaticky (MoDynamics)" pre "Tvar" ("Obvod"). Zostávajúce parametre nakonfigurujeme podľa vášho vkusu.

Tu by sa patrilo konečne pripomenúť karosériu SUV. Podľa našej predstavy by tiež mala interagovať s okolitým fyzikálnym modelom trojrozmernej scény – napríklad hádzať nosom stenu z kartónových škatúľ – ale zároveň by nemala interagovať s inými prvkami vlastnej skupiny. - so záťažovou kockou a kolieskami. Aby sme dosiahli tento výsledok, podriadime ho váhovej kocke a karosérii priradíme individuálny tag dynamiky - rovnako ako skupine prvkov auta - ale v tagu dynamika karosérie vypneme parameter “Dynamický” (nastavíme hodnotu „Vypnuté“ na karte „Dynamika“ (všimnite si, že parameter „Povolené“ zostane aktivovaný, inak sa telo úplne prestane podieľať na fyzickom modeli scény a akákoľvek prekážka, ktorá sa dostane do cesty SUV, bude voľne prechádzať telom!). Na karte „Kolízia“ dynamického tagu priradeného k telu môžete zadať „Žiadne“ a „Vypnuté“ pre parametre „Zdediť značku“ a „Jednotlivé prvky“ - telo nemá podriadené prvky, ktorým dynamické vlastnosti tela by sa mali prenášať.

Do trojrozmernej scény ostáva už len pridať vyššie opakovane spomínaný okolitý fyzikálny model – nejaký nerovný reliéf, ktorý by vo finálnej animácii odhalil fyzikálne hodnovernú reakciu auta na interakciu s výmoľmi. V scéne pripojenej k lekcii je to hrubé zdanie akejsi arény s jadrom posiatym mohylami.

Konečne

V tejto lekcii sme študovali vytvorenie najjednoduchšieho fyzického modelu pohybu auta – bez akýchkoľvek ďalších pluginov a modulov, pomocou štandardných nástrojov Cinema 4D. V lekcii, ako ste si všimli, sa nehovorí o modelovaní zákrut, model, ktorý sme vytvorili, sa môže pohybovať iba v priamom smere - samozrejme, pokiaľ nerovný terén pod kolesami nezmení trajektóriu pohybu (čo sa stane vo videu nižšie). Mimochodom, autor zámerne upravil parametre fyzického modelu trojrozmernej scény tak, aby pohyb SUV bol akoby prehnaný, aby bolo možné jasne demonštrovať interakciu kolies a karosérie auta s nezrovnalosti. Okrem toho scéna pripojená k lekcii obsahuje ďalšie prvky, ktoré nie sú uvedené v lekcii a sú určené na streľbu a osvetlenie. Následne sa možno na stránke budú uvažovať o zložitejších fyzických modeloch.

Konečný výsledok je vo forme animácie.


Skrátený preklad-prerozprávanie článku: .

Úvod

Článok popisuje základy prístupu k modelovaniu pohybu objektov, ktorý je vhodné použiť v počítačových hrách. Tento prístup je jednoduchý, programy, ktoré ho implementujú, fungujú rýchlo a sú dosť stabilné. Navyše na pochopenie jeho základov nie sú potrebné žiadne špeciálne matematické znalosti (hoci samotný prístup má pevné matematické základy). S jeho pomocou môžete simulovať pohyb tkanív, mäkkých a tvrdých telies, ako aj tiel s prihliadnutím na spojenia.

Fyzikálne modelovanie, teda modelovanie pohybu postáv na základe zákonov fyziky (alebo skôr mechaniky), sa skúma pomerne dlho. V literatúre sú navrhnuté rôzne prístupy (pozri atď.) a veľa úsilia sa investovalo do vytvorenia presných a spoľahlivých algoritmov. Presné metódy na modelovanie pohybu sú vo fyzike známe už dlho. Pre hry a systémy virtuálnej reality však presnosť nie je najdôležitejšou výhodou (aj keď je dobrá, keď je). Oveľa dôležitejšia je vierohodnosť (programátor môže skresľovať model reality koľko chce, pokiaľ dokáže hráča zaujať) a rýchlosť vykonávania (na vykonanie je pridelená iba časť času, ktorý trvá animačný rámec). výpočty pre modelovanie pohybu). V prípade fyzikálneho modelovania pojem „pravdepodobnosť“ zahŕňa aj stabilitu: modelovacia metóda, pri ktorej telesá prenikajú cez prekážky alebo sa odrážajú, keď by mali nehybne ležať, nemožno považovať za úspešnú. Metódy opísané v tejto práci boli vyvinuté predovšetkým na dosiahnutie vierohodnosti a rýchlosti výpočtu. Majú vysoký výkon a sú pomerne jednoduché na implementáciu (aspoň v porovnaní s inými metódami, ktoré riešia rovnaké problémy).

Uvažovaná metóda je iteratívna, takže od určitého kroku ju možno kedykoľvek zastaviť. To umožňuje kompromis medzi presnosťou výpočtu a vynaloženým časom: ak sa určité množstvo chýb považuje za prijateľné, kód môže bežať rýchlejšie; Okrem toho je možné počas vykonávania adaptívne zvoliť veľkosť chyby. Metóda si poradí aj s kolíziami a kľudovými kontaktmi a poradí si s modelovaním stohu telies naukladaných na seba, čo je problém mnohých fyzikálnych motorov.

Úspech metódy závisí od správnej kombinácie a využitia výhod niekoľkých techník:

  • Verletova metóda numerickej integrácie;
  • zvládanie kolízií a prieniku do tela pomocou projekcie;
  • jednoduchý riešič obmedzení využívajúci relaxáciu;
  • aproximácia druhej odmocniny, ktorá zvyšuje rýchlosť výpočtov;
  • modelovanie pevných látok ako častíc spojených väzbami.

Uvedieme krátke vysvetlenie každej z týchto techník. Pri písaní tohto dokumentu sa autor snažil sprístupniť ho čo najširšiemu publiku bez straty podstatných informácií potrebných na implementáciu. To znamená, že matematické vysvetlenia a zdôvodnenia sú obmedzené na minimum, pokiaľ nie sú rozhodujúce pre pochopenie predmetu. Cieľom práce je demonštrovať možnosť implementácie pomerne pokročilej a robustnej metódy fyzikálneho modelovania bez utápania sa v matematických jemnostiach.

Obsah je usporiadaný nasledovne. Časť 2 popisuje znázornenie časticového systému bez použitia rýchlosti. Táto reprezentácia má množstvo výhod, z ktorých najvýznamnejšie sú stabilita a jednoduchosť implementácie spojení a iných obmedzení. Časť 3 popisuje, ako prebieha riešenie kolízie. Potom v časti 4 je časticový systém rozšírený o spojenia, ktoré umožňujú simuláciu pohybu tkaniny. Časť 5 vysvetľuje, ako zostaviť systém vzájomne prepojených častíc na modelovanie tuhého telesa. Ďalej v časti 6 ukážeme, ako realizovať spojenia medzi telesami (najmä pánty). Časť 7 obsahuje rôzne krátke poznámky a určité skúsenosti s implementáciou trenia.

V nasledujúcom texte sú vektory označené písmenami so šípkami a ich zložky dolnými indexmi: \(\vec(x)=(x_1,x_2,x_3)\) .

Metóda integrácie Verlet

Srdcom simulácie (t. j. simulácie fyzikálneho procesu pomocou počítačového systému) je časticový systém. Pri implementácii takéhoto systému sa zvyčajne predpokladá, že každá častica má dve hlavné charakteristiky: súradnicu (polohu) \(\vec(x)\) a rýchlosť \(\vec(v)\) . Potom sa pomocou vzorcov vypočítajú nové hodnoty súradníc \(\vec(x)^\prime\) a rýchlosti \(\vec(v)^\prime\).

$$ \začiatok(zarovnané) \vec(x)^\prvé &= \vec(x) + \vec(v) \Delta t, \\ \vec(v)^\prvočíslo &= \vec(v) + \vec(a) \Delta t, \end(zarovnané) $$

kde \(\Delta t\) je časový krok, \(\vec(a)\) je zrýchlenie vypočítané v súlade s 2. Newtonovým zákonom \(\vec(f)=m \vec(a)\) (kde \(\vec(f)\) je celková sila pôsobiaca na časticu). Uvedené vzorce implementujú najjednoduchšiu metódu numerickej integrácie - Eulerovu metódu.

Budeme uvažovať o ďalšom popise častice, v ktorej sa rýchlosť nepoužíva: namiesto uloženia polohy a rýchlosti každej častice uložíme aktuálnu polohu častice \(\vec(x)\) a jej polohu na predchádzajúcej časti. integračný krok \(\vec(x)^ (*)\) . Za predpokladu, že integračný krok je konštantný, získame nasledujúce vzorce na výpočet nových hodnôt:

$$ \začiatok(zarovnané) \vec(x)^\prvočíslo &= 2\vec(x) - \vec(x)^(*) + \vec(a) \Delta t^2, \\ \vec( x)^(*) &= \vec(x). \end(zarovnané) $$

Táto metóda numerickej integrácie sa nazýva Verletova metóda (pozri) a aktívne sa používa v molekulárnej dynamike.

Verletova metóda je založená na približnom vzorci na výpočet druhej derivácie

$$ \frac(\Delta^2 \vec(x))(\Delta t^2) = \frac( \frac(\vec(x)^\prime - \vec(x))(\Delta t) - \frac(\vec(x) - \vec(x)^(*))(\Delta t) )(\Delta t) = \frac(\vec(x)^\prime - 2\vec(x) + \vec(x)^(*))(\Delta t^2) = \vec(a) $$

Táto aproximácia nie je najpresnejšia (existujú pokročilejšie metódy numerickej integrácie), ale je stabilná a funguje rýchlo. Znížením faktora 2 na, povedzme, 1,99, tým zavedieme odporovú silu, ktorá rozptýli energiu systému. Všimnite si tiež, že \(\vec(x)-\vec(x)^(*)\) je vzdialenosť prejdená počas posledného integračného kroku (\(\vec(v)\Delta t\) ).

Na konci integračného kroku sa aktuálna poloha každej častice \(\vec(x)\) uloží do zodpovedajúcej premennej \(\vec(x)^(*)\) na použitie v ďalšom kroku. Ak je v systéme veľa častíc, potom namiesto kopírovania ich súradníc je vhodné použiť presmerovanie ukazovateľa.

Kód implementujúci myšlienky opísané vyššie môže vyzerať takto (trieda Vector3 obsahuje všetky potrebné operácie s vektormi)

class ParticleSystem (Vektor3 m_x [ NUM_PARTICLES ]; // Aktuálna pozícia Vector3 m_oldx [ NUM_PARTICLES ]; // Predchádzajúca pozícia Vector3 m_a [ NUM_PARTICLES ]; // Celková sila (zrýchlenie) Vector3 m_vGravity ; // Gravitačný float m_fTimeStep ; public : void TimeStep(); private : void Verlet(); void SatisfyConstraints(); void AccumulateForces(); // (vynecháme konštruktory, inicializáciu polí a pod.) }; // krok integrácie metódou Verlet void ParticleSystem::Verlet() ( for (int i = 0 ; i< NUM_PARTICLES ; i ++ ) { Vector3 & x = m_x [ i ]; Vector3 temp = x ; Vector3 & oldx = m_oldx [ i ]; Vector3 & a = m_a [ i ]; x += x - oldx + a * fTimeStep * fTimeStep ; oldx = temp ; } } // súčet síl pôsobiacich na každú časticu void ParticleSystem::AccumulateForces() ( // Všetky častice sú pod vplyvom gravitácie pre (int i = 0; i< NUM_PARTICLES ; i ++ ) m_a [ i ] = m_vGravity ; } // kontrola súladu so superponovanými pripojeniami void ParticleSystem::SatisfyConstraints() ( // Teraz nás nezaujíma, ako sa to implementuje.) // krok výpočtu void ParticleSystem :: TimeStep () ( AccumulateForces (); Verlet (); SatisfyConstraints (); )

Zatiaľ všetko opísané vyššie nevyzerá veľmi pôsobivo. Výhody tohto prístupu budú zrejmé, keď prejdeme k používaniu obmedzení a popisu tuhých telies.

Skúste nastaviť \(\vec(a)=(0,0,1)\) a počiatočné podmienky \(\vec(x)=(1,0,0)\) , \(\vec(x)^*= (0,0,0)\) . Vypočítajte niekoľko krokov ručne a uvidíte, čo sa stane.

Zrážky a manipulácia s kontaktmi pomocou projekcie

Metódy spracovania kontaktov medzi telami, založené na použití penalizačných funkcií (schémy založené na penalizácii), naznačujú, že v mieste kontaktu, kde je možné prenikanie telies do seba, je potrebné vložiť pružinu na simuláciu tohto kontaktu. Tento prístup je ľahko implementovateľný, ale vedie k množstvu vážnych problémov. Predovšetkým je veľmi ťažké zvoliť tuhosť pruženia, aby jednak predmety do seba nevnikali príliš hlboko a jednak aby systém nestrácal stabilitu tuhosťou pruženia. byť príliš vysoký. Ďalším prístupom k spracovaniu kolízie je, že pri detekcii kolízie sa čas „pretočí“ späť až do presného okamihu kontaktu telies (napríklad pomocou binárneho vyhľadávania), potom sa polohy a rýchlosti telies korigujú. (pomocou vzorcov pre zrážky známe z kurzu fyziky), po ktorých výpočet začína znova od tohto bodu v čase. A tak – za každú kolíziu. Nie je to veľmi ekonomický prístup, ak plánujete simulovať pohyb mnohých telies v reálnom čase.

Tu sa pozrieme na iný prístup. Premietneme častice, ktoré prenikli do prekážky mimo prekážky. Projekciou rozumieme pohyb častice, dostatočne malej na to, aby ju len oslobodil od prekážky. Typicky to zahŕňa pohyb častice v smere kolmom na kontaktnú plochu (prekážku) - odtiaľ pochádza termín "projekcia".

Zvážte nasledujúci príklad. Nech je náš „svet“ vnútri kocky o veľkosti (0,0,0)--(1000,1000,1000) a navyše reštitučný koeficient častíc je nulový (t.j. častice, ktoré sa zrážajú s povrchom kocka sa od nej neodrážajú). Aby sme zabezpečili, že súradnice častíc zostanú vo vnútri kocky, napíšeme nasledujúci kód, ktorý implementuje projekciu:

// Núti častice zostať vo vnútri kocky void ParticleSystem :: SatisfyConstraints () ( for (int i = 0 ; i< NUM_PARTICLES ; i ++ ) { // Pre všetky častice Vektor3 & x = m_x [ i ]; x = vmin(vmax(x, Vektor3(0, 0, 0)), Vektor3 (1000, 1000, 1000)); ))

(vmax je zložková operácia výpočtu maxima a vmin je ekvivalentný výpočet minima). Tento kód rieši kolízie aj pokojové kontakty (to znamená prípady, keď je bod v pokoji na povrchu kocky) a ukladá polohu všetkých častíc vo vnútri kocky. Krása metódy Verlet spočíva v tom, že príslušné zmeny hodnôt rýchlosti sa vykonávajú automaticky. Pri následných volaniach TimeStep() sa rýchlosť upraví tak, aby neobsahovala komponent kolmý na povrch kocky (čo zodpovedá nulovému koeficientu obnovy). Pozri obrázok 1.

Skúste tieto výpočty urobiť sami - a uvidíte, že nie je potrebné nulovať rýchlosť v smere kolmom na stenu kocky - to sa deje „samo“. Môže sa to zdať triviálne, ak sa obmedzíme na modelovanie častíc, ale hlavné výhody Verletovej metódy sa ukážu hneď, ako prejdeme k väzbám a pripojeným tuhým telesám. Teda práve teraz.

Spracovanie viacerých súčasne uložených spojení relaxačnou metódou

Model tkaniny je zvyčajne systém častíc spojených pružinami. Zostrojiť diferenciálne rovnice pre takýto systém nie je ťažké. Jedna vec je však stavať a druhá vec riešiť. Zároveň sa vynárajú všetky problémy, ktoré sme mali pri používaní penalizačných funkcií: príliš tuhé pružiny vedú k tomu, že samotný systém rovníc sa stáva „tuhým systémom“, čo vedie k nestabilite, ak sa použijú najjednoduchšie metódy numerickej integrácie, resp. pomalá práca, ak sa použijú pokročilejšie metódy, v oboch prípadoch je zaručená bolesť hlavy. Naopak príliš mäkké pramene spôsobia, že látka bude pôsobiť neskutočne pružne.

Najzaujímavejšia vec sa však stane, ak je tuhosť pružiny nasmerovaná do nekonečna: systém sa zrazu stáva riešiteľným aj pre veľmi jednoduchú (a rýchlu) integračnú metódu, pričom zostáva stabilný. Ale predtým, než budeme pokračovať v rozprávaní o látke, vráťme sa k predchádzajúcemu príkladu. Kocku, s ktorou sme sa zaoberali, si možno predstaviť ako súbor jednostranných obmedzení (t. j. obmedzení zapísaných vo forme nerovností) – jedna pre každú stranu kocky – ktoré sa musia vykonávať počas celej simulácie.

\begin(rovnica) x_i \geq 0 \ \text(and)\ x_i \leq 1000 \quad (i=1,2,3). \label(eq:C1) \end(equation)

V uvažovanom príklade na dodržanie obmedzení uložených väzbami (aby častice zostali vo vnútri kocky), stačí jednoducho premietnuť súradnice „vylezených“ častíc na povrch kocky. Táto myšlienka je opísaná v nasledujúcom pseudokóde:

// Pseudokód na vynútenie obmedzení (1) pre i = 1 , 2 , 3 nastavte xi = min ( max ( xi , 0 ), 1 000 )

Možno si to predstaviť tak, že častica a povrch prekážky sú spojené nekonečne tuhou pružinou, ktorá, ak sa predĺži, sa okamžite vráti do svojej normálnej dĺžky, rovnej nule.

Rozšírme náš model pridaním tyče dĺžky 100. Aby sme to dosiahli, musíme definovať dve častice (\(\vec(x)_1\) a \(\vec(x)_2\) ) a vyžadovať, aby vzdialenosť medzi nimi je vždy rovná 100. Matematický zápis pre tento bilaterálny vzťah je:

\začiatok(rovnica) |\vec(x)_2-\vec(x)_1| = 100. \label(eq:C2) \end(equation)

Aj keď v počiatočnom okamihu polohy častíc spĺňajú podmienky \eqref(eq:C2), potom v nasledujúcom okamihu tieto podmienky s najväčšou pravdepodobnosťou nebudú splnené. Aby sme získali správnu hodnotu vzdialenosti, pohybujeme časticami a premietame ich na množinu riešení opísanú v \eqref(eq:C2). Za týmto účelom sa častice buď od seba vzdialia, alebo sa priblížia, v závislosti od toho, či je vzdialenosť získaná numerickou integráciou malá alebo veľká. Pozri obrázok 2.

Pohybujúce sa častice na korekciu vzdialenosti, ktorá nespĺňa obmedzenie \eqref(eq:C2)

Pseudokód implementujúci podmienky \eqref(eq:C2):

Delta = x2 - x1; deltalength = sqrt(delta * delta); diff = (deltadĺžka - pokojná dĺžka) / deltadĺžka ; x1 -= delta * 0,5 * rozdiel ; x2 += delta * 0,5 * rozdiel ;

Všimnite si, že delta je vektor a delta*delta je skalárny súčin. Tento pseudokód posunie častice od seba alebo ich posunie tak, aby sa medzi nimi dosiahla požadovaná vzdialenosť. Opäť si to môžeme predstaviť ako nekonečne tuhú pružinu, ktorá sa okamžite vráti do svojej normálnej dĺžky 100.

Teraz predpokladajme, že okrem podmienky \eqref(eq:C2) musí byť splnená aj podmienka \eqref(eq:C1) (častice musia byť vo vnútri kocky). Môže sa ukázať, že pri pokuse o splnenie podmienky \eqref(eq:C2) niektoré častice tyče porušia požiadavky \eqref(eq:C1) (tyč bude vyčnievať z kocky). Urážlivú časticu môžete samozrejme znova premietnuť na povrch kocky spustením \eqref(eq:C1), ale potom sa \eqref(eq:C2) rozbije.

Aby sme súčasne splnili požiadavky \eqref(eq:C1) a \eqref(eq:C2), musíme vyriešiť sústavu rovníc. Urobíme to, ale nie priamo: jednoducho zopakujeme dva fragmenty pseudokódu jeden po druhom v určitom počte krát v nádeji, že výsledok bude užitočný. Tento prístup je implementovaný v nasledujúcom kóde:

//realizácia modelovania tyče vo vnútri kocky void ParticleSystem :: SatisfyConstraints () ( for (int j = 0; j< NUM_ITERATIONS ; j ++ ) { // Najprv splníme podmienky (1) pre (int i = 0; i< NUM_PARTICLES ; i ++ ) { // Pre všetky častice Vektor3 & x = m_x [ i ]; x = vmin(vmax(x, Vektor3(0, 0, 0)), Vektor3 (1000, 1000, 1000)); ) // Teraz sa uspokojme (2) Vektor3 & x1 = m_x [0]; Vektor3 & x2 = m_x [1]; Vektor3 delta = x2 - x1; float deltalength = sqrt(delta * delta); float diff = (deltalength - restlength) / deltalength ; x1 -= delta * 0,5 * rozdiel ; x2 += delta * 0,5 * rozdiel ; ))

(tu je vynechaná inicializácia častíc). Aj keď sa táto metóda „hlúpeho“ opakovania môže zdať trochu naivná, napriek tomu sa približuje k riešeniu, ktoré hľadáme! V matematike je to tzv relaxačná metóda(alebo Jacobi, alebo Gauss-Seidel - podľa toho, ako presne to robíte, pozri). Funguje tak, že postupne spĺňa jednotlivé obmedzenia a konverguje ku globálnej konfigurácii, ktorá spĺňa všetky obmedzenia súčasne. Táto metóda je veľmi užitočná v situáciách, keď musí byť súčasne splnených viacero nezávislých obmedzení.

Počet požadovaných iterácií závisí od modelovaného systému a povahy pohybu. Výber tohto čísla môžete prispôsobiť meraním zmeny, ktorá nastala v porovnaní s predchádzajúcou iteráciou. Ak zastavíme iterácie príliš skoro, výsledok nebude dostatočne presný, ale vďaka Verletovej metóde bude pravdepodobne o niečo lepší v ďalšom rámci a ešte lepší v nasledujúcom rámci atď. To znamená, že aj zastavenie relaxácie skoré nezničí animáciu úplne, ale urobí obraz trhanejším.

Modelovanie látok

Skutočnosť, že obmedzenie tyčového typu možno považovať za veľmi tuhú pružinu, umožňuje použiť tento typ obmedzenia na modelovanie tkaniva. Predpokladajme napríklad, že tkanina je reprezentovaná šesťhrannou sieťou pozostávajúcou z trojuholníkov. Každý uzol siete predstavuje časticu a každá plocha je tyčovité spojenie spájajúce častice (normálna dĺžka tyče sa rovná vzdialenosti medzi uzlami, ktoré spája).

Funkcia HandleConstraints(), ktorá je zodpovedná za spracovanie obmedzení, využíva relaxáciu nad všetkými obmedzeniami. Relaxačný cyklus sa môže opakovať niekoľkokrát. Vo väčšine prípadov však na získanie dobre vyzerajúcej animácie stačí iba jedna iterácia. To znamená, že časová náročnosť simulácie tkaniny závisí hlavne od toho, ako dlho trvá vykonanie operácií \(N\) druhej odmocniny a \(N\) delenia (kde \(N\) je počet hrán v simulovanej sieti tkanina). Nižšie vám ukážeme trik, ako sa zbaviť výpočtu druhej odmocniny. Najprv sa však pozrime, ako vyzerá spracovanie obmedzení.

// Realizácia modelovania látok struct Obmedzenie ( int časticaA , časticaB ; plávajúca pokojová dĺžka ; ); // Predpokladajme, že pole m_constraints už existuje void ParticleSystem :: SatisfyConstraints () ( for (int j = 0; j< NUM_ITERATIONS ; j ++ ) { for (int i = 0 ; i < NUM_CONSTRAINTS ; i ++ ) { Constraint & c = m_constraints [ i ]; Vector3 & x1 = m_x [ c . particleA ]; Vector3 & x2 = m_x [ c . particleB ]; Vector3 delta = x2 - x1 ; float deltalength = sqrt (delta * delta ); float diff = (deltalength - c . restlength ) / deltalength ; x1 -= delta * 0.5 * diff ; x2 += delta * 0.5 * diff ; } // Pripojte jednu z častíc, ktoré tvoria látku, k počiatku m_x [0] = vektor3 (0, 0, 0); ))

Teraz poďme diskutovať o tom, ako sa zbaviť výpočtu druhej odmocniny. Ak sú splnené všetky obmedzenia (dobre, alebo takmer splnené), potom, ako už vieme, výsledok výpočtu druhej odmocniny má tendenciu k \(r\) - normálnej dĺžke spojenia (tyče). Túto skutočnosť využijeme na získanie približného výrazu pre funkciu druhej odmocniny. Nahraďte funkciu \(\sqrt(x)\) členom 1. rádu z jej Taylorovho radu v okolí dĺžky \(r\) (toto je ekvivalentné jednej iterácii Newton-Raphsonovej metódy s počiatočná aproximácia \(r\)). Po niekoľkých transformáciách dostaneme nasledujúci pseudokód:

// Pseudokód na uplatnenie obmedzení (2) pomocou aproximácie sqrt delta = x2 - x1; delta *= restlength * restlength / (delta * delta + restlength * restlength ) - 0,5 ; x1 -= delta; x2 += delta ;

Všimnite si, že ak vzdialenosť už spĺňa obmedzenia (tj ak |delta|=dĺžka odpočinku), potom dostaneme delta rovnú (0,0,0) a nenastane žiadna zmena.

Teraz už pri spracovaní každého vzťahu nepoužívame odmocniny. Okrem toho je možné vopred vypočítať druhú mocninu pokojovej dĺžky * pokojovej dĺžky. Časovo náročné operácie sú zredukované na vykonávanie \(N\) delení na snímku (a prístup k zodpovedajúcej pamäti) – je ťažké vymyslieť niečo, čo beží výrazne rýchlejšie.

Obmedzenia nemusia byť nevyhnutne splnené v jednej iterácii, ale vďaka Verletovej metóde systém rýchlo konverguje do správneho stavu (keď sú splnené všetky obmedzenia) - doslova v niekoľkých snímkach. V skutočnosti použitie iba jednej iterácie a aproximácie druhej odmocniny eliminuje problém tuhosti sústavy rovníc, ktorý by sa nevyhnutne objavil v sústave s absolútne tuhými tyčami.

Umiestnením kolíkových spojov medzi páry susedných vrcholov možno algoritmus modelovania tkaniva rozšíriť na modelovanie rastlín.

Kód a rovnice diskutované v tejto časti predpokladajú, že všetky častice majú rovnakú hmotnosť. Častice s rôznou hmotnosťou sa dajú modelovať rovnakým spôsobom, ale výsledné rovnice budú trochu komplikovanejšie.

Teda súlad s obmedzením \eqref(eq:C2) pre častice s rôznymi hmotnosťami je implementovaný nasledujúcim pseudokódom:

// Pseudokód na vynútenie obmedzení (2) delta = x2 - x1; deltalength = sqrt(delta * delta); diff = (deltalength - zvyšok dĺžky ) / (deltadĺžka * (invmass1 + invmass2 )); x1 -= invmass1 * delta * diff ; x2 += invmass2 * delta * diff ;

Tu invmass1 a invmass2 ukladajú inverzné hmotnosti častíc \(\vec(x)_1\) a \(\vec(x)_2\) . Ak chceme, aby častica zostala nehybná, musíme ju nastaviť na invmass = 0, čo zodpovedá nekonečnej hmotnosti. Ako je uvedené vyššie, na urýchlenie výpočtov možno použiť približné výpočty druhej odmocniny.

Pevné látky

Pohybové rovnice tuhých telies boli navrhnuté dávno pred vynálezom moderných počítačov. Aby v tých časoch získali nejaké užitočné výsledky, museli matematici vykonávať transformácie vzorcov. To viedlo k vzniku takých užitočných konceptov a nástrojov ako tenzor zotrvačnosti, moment hybnosti, moment sily, kvaternióny reprezentujúce orientáciu, atď. pre jednoduchšie prvky a v niektorých prípadoch dokonca robia takéto výpočty ziskovejšími. V prípade trojrozmerných telies to znamená, že môže byť vhodné modelovať pevnú látku so štyrmi časticami a šiestimi väzbami (s uvedením správneho počtu stupňov voľnosti: \(4\cdot 3 - 6 = 6\)). To zjednodušuje veľa vecí a to je to, čo urobíme ďalej.

Uvažujme štvorsten s časticou umiestnenou v každom z jeho štyroch vrcholov. Okrem toho každý zo šiestich okrajov štvorstenu predstavuje obmedzenie typu tyče diskutované v predchádzajúcej časti. To úplne stačí na simuláciu pevného tela. Tetrahedron môže byť umiestnený vo vnútri kocky diskutovanej vyššie a Verlet integrátor zabezpečí jeho správny pohyb. Funkcia SatisfyConstraints() sa musí postarať o dve veci: 1) aby častice zostali vo vnútri kocky a 2) aby sa rešpektovalo šesť obmedzení kmeňa. To sa dá urobiť, ako predtým, pomocou relaxácie: zvyčajne stačia 3-4 iterácie. Nezabudnite tiež na efektívne výpočty druhej odmocniny.

Je však jasné, že pri zrážkach sa pevné telesá budú správať inak ako „kostrové“ štvorsteny. Je tu ďalší problém: doteraz sme fakt kolízie tuhého telesa s okolitým „svetom“ zisťovali len na základe informácií o vrcholoch: ak bol vrchol mimo kocky, opäť sa premietol dovnútra. Toto funguje skvele, pokiaľ je vnútro „sveta“ konvexné. Ak to tak nie je, potom štvorsten bude schopný preniknúť cez hranicu „sveta“ aj vtedy, keď žiadny z jeho vrcholov neprekročí túto hranicu (pozri obr. 3, kde trojuholník je plochým analógom štvorstenu). Pozrime sa, ako je tento problém vyriešený.

Najprv sa pozrime na jednoduchšiu verziu problému. Zoberme si tyč, umiestnime ju do kubického „sveta“ a predpokladajme, že kocka má malý výstupok smerujúci dovnútra. Teraz môže tyč prekročiť hranice „sveta“, hoci obe častice na jej koncoch zostávajú vo vnútri kocky (obr. 4). Nebudeme zachádzať do zložitosti vývoja mechanizmu detekcie kolízií, pretože ide o úplne samostatnú vedu. Predpokladajme namiesto toho, že subsystém detekcie kolízie už existuje a vykonáva svoju prácu: určuje hĺbku prieniku a súradnice bodov prieniku pre každý z dvoch kolidujúcich objektov. Jedna definícia bodov prieniku a hĺbky prieniku je: hĺbka prieniku \(d_p\) je najkratšia vzdialenosť, ktorú musia byť dva objekty oddelené vo vhodnom smere, aby sa predišlo ich zrážke. Penetračné body sú body na každom z predmetov, kde sa predmety navzájom dotýkajú po vyššie uvedenom prenose.

Pozrite sa ešte raz na obrázok 4. Tu po kroku numerickej integrácie tyč prenikla cez hranicu. Detektor kolízie identifikoval dva body prieniku: \(\vec(p)\) a \(\vec(q)\) . Na obr. 4a sa bod \(\vec(p)\) v skutočnosti zhoduje s jednou z koncových častíc: \(\vec(p)=\vec(x)_1\) . Na obr. 4b leží \(\vec(p)\) medzi \(\vec(x)_1\) a \(\vec(x)_2\) vo vzdialenosti 1/4 dĺžky tyče od \ (\vec( x)_1\) . V oboch prípadoch bod \(\vec(p)\) leží na tyči, a preto jeho súradnice možno vyjadriť ako lineárnu kombináciu súradníc bodov \(\vec(x)_1\) a \ (\vec(x) _2\) : \(\vec(p) = c_1\vec(x)_1 + c_2\vec(x)_2\) tak, že \(c_1 + c_2 = 1\) . V prvom prípade \(c_1 = 1\) , \(c_2 = 0\) a v druhom prípade - \(c_1 = 0,75\) a \(c_2 = 0,25\) . Tieto hodnoty nám hovoria, ako ďaleko je potrebné posunúť zodpovedajúce častice.

Ak chcete opraviť polohu tyče, posuňte ju tak, aby sa bod \(\vec(p)\) zhodoval s bodom \(\vec(q)\) . Aby sme to dosiahli, presunieme častice \(\vec(x)_1\) a \(\vec(x)_2\) v smere určenom vektorom spájajúcim \(\vec(p)\) a \(\ vec(q)\): .

V prvom prípade (obr. 4a) jednoducho premietneme \(\vec(x)_1\) mimo oblasť, kde je „zakázané“ byť, rovnako ako predtým (v smere \(\vec(q) )\) ). To bude stačiť a súradnice \(\vec(x)_2\) nie je potrebné vôbec meniť. V druhom prípade (obr. 4b) je tiež potrebné posunúť bod \(\vec(x)_1\) do väčšej vzdialenosti ako \(\vec(x)_2\) , keďže bod \(\vec (p)\) sa nachádza bližšie k \(\vec(x)_1\) (naozaj, pretože \(\vec(p) = 0,75\vec(x)_1 + 0,25\vec(x)_2\), potom vždy, keď posunieme \(\vec(x)_1\) o 0,75, posunieme \(\vec(x)_2\) iba o 0,25). Inými slovami, nové polohy častíc \(\vec(x)_1^\prvočíslo\) a \(\vec(x)_2^\prvočíslo\) sú dané vzťahmi

\začiatok(rovnica) \začiatok(zarovnanie) \vec(x)_1^\prvočíslo &= \vec(x)_1 + 0,75\lambda\cdot\vec(\Delta), \\ \vec(x)_2^\ prvočíslo &= \vec(x)_2 + 0,25\lambda\cdot\vec(\Delta), \end(zarovnané) \label(eq:x_new) \end(equation)

kde \(\lambda\) je neznáma veličina. Nová poloha častice \(\vec(p)\) - \(\vec(p)^\prime\) - sa vypočíta pomocou vzorca

$$ \vec(p)^\prvý = c_1\vec(x)_1^\prvý + c_2\vec(x)_2^\prvý . $$

Pamätajme, že chceme dosiahnuť to \(\vec(p)^\prvočíslo = \vec(q)\) , to znamená, že musíme zvoliť \(\lambda\) presne také, aby \(\vec(p ) ^\prime\) sa v dôsledku toho zhodovalo s \(\vec(q)\) . Keďže častice pohybujeme iba v smere \(\vec(\Delta)\) , potom sa \(\vec(p)\) pohybuje aj v smere \(\vec(\Delta)\) a teda riešenie rovnicu \ (\vec(p)^\prvočíslo = \vec(q)\) možno nájsť vyjadrením \(\lambda\) z

\begin(rovnica) \vec(p)^\prime\cdot\vec(\Delta) = \vec(q)\cdot\vec(\Delta) . \label(eq:pq) \end(equation)

Vypísaním výrazu na ľavej strane rovnosti dostaneme

$$ \začiatok(zarovnané) \vec(p)^\prime\cdot\vec(\Delta) &= (0,75\vec(x)_1^\prime + 0,25\vec(x)_2^\prime) \cdot \vec(\Delta) \\ &= (0,75 (\vec(x)_1 + 0,75\lambda\cdot\vec(\Delta)) + 0,25 (\vec(x)_2 + 0,25\lambda\cdot\vec( \Delta))) \cdot\vec(\Delta) \\ &= ((0,75\vec(x)_1 + 0,25\vec(x)_2)\cdot\vec(\Delta) + \lambda(0,75^2 + 0,25^2)\cdot\Delta^2 \\ &= \vec(p) \cdot\vec(\Delta) + \lambda(0,75^2 + 0,25^2)\cdot\Delta^2 , \end( zarovnané) $$

čo, berúc do úvahy pravú stranu \eqref(eq:pq), dáva

$$ \lambda = \frac((\vec(p)-\vec(q)) \cdot\vec(\Delta))((0,75^2 + 0,25^2)\cdot\Delta^2) . $$

Nahradením nájdenej \(\lambda\) do \eqref(eq:x_new) získame opravené polohy častíc \(\vec(x)_1\) a \(\vec(x)_2\), pri ktorých \( \vec( p)^\prime\) sa bude zhodovať s \(\vec(q)\) .

Obrázok 5 ukazuje polohu, ktorá vzniká po pohybe častíc. Už nedochádza k vzájomnému prenikaniu predmetov, ale bola porušená požiadavka, aby dĺžka tyče zostala konštantná. Aby sme to napravili, urobme ešte jednu iteráciu relaxačného cyklu (alebo aj niekoľko), po ktorej dokončíme cyklus korekcie polôh častíc.

V prípade štvorstenu bude vyššie popísaná stratégia fungovať podobne. Najprv sa nájdu body vzájomného prieniku \(\vec(p)\) a \(\vec(q)\) (môžu sa nachádzať aj vo vnútri trojuholníka) a \(\vec(p)\) sa znázorní ako lineárna kombinácia štyroch častíc \(\vec(p)=c_1\vec(x)_1+c_2\vec(x)_2+c_3\vec(x)_3+c_4\vec(x)_4\) tak, že \(c_1+c_2+c_3+c_4=1\) (bude to vyžadovať riešenie malého systému lineárnych rovníc). Raz nájdený \(\vec(\Delta) = \vec(q)-\vec(p)\), bude možné nájsť hodnotu \(\lambda\) pomocou vzorca

$$ \lambda = \frac((\vec(p)-\vec(q)) \cdot\vec(\Delta))((c_1^2 + c_2^2 + c_3^2 + c_4^2)\cdot \Delta^2) , $$

a korigované polohy častíc sú definované ako

$$ \begin(align*) \vec(x)_1^\prime &= \vec(x)_1 + c_1\lambda\cdot\vec(\Delta), \\ \vec(x)_2^\prime & = \vec(x)_2 + c_2\lambda\cdot\vec(\Delta), \\ \vec(x)_3^\prime &= \vec(x)_3 + c_3\lambda\cdot\vec(\Delta ), \\ \vec(x)_4^\prvočíslo &= \vec(x)_4 + c_4\lambda\cdot\vec(\Delta). \end(align*) $$

Uvažovali sme teda o zrážke jedného tuhého telesa s nehybným „svetom“. Vyššie opísaná metóda sa dá ľahko zovšeobecniť na zvládnutie kolízií viacerých tuhých telies. V tomto prípade sa kolízie spracovávajú pre jeden pár telies naraz a namiesto pohybu iba \(\vec(p)\) , budete musieť presunúť \(\vec(p)\) a \(\vec (q)\) voči sebe navzájom.

A opäť, po úprave polôh častíc, aby nedochádzalo k vzájomnému prenikaniu telies, je potrebné sa postarať o splnenie ďalších šiestich obmedzení – nemennosti vzdialeností medzi časticami, ktoré tvoria pevné teleso. Pomocou tejto metódy môže byť štvorsten dokonca vnorený do iného objektu, čo je vhodnejšie použiť namiesto samotného štvorstenu pri riešení kolízií. Obrázok 6 zobrazuje štvorsten umiestnený v kocke.

Najprv musí byť kocka nejakým spôsobom pripevnená k štvorstenu. Jedným z prístupov je vybrať ťažisko štvorstenu ako stred kocky \(0,25\cdot (\vec(x)_1 + \vec(x)_2 + \vec(x)_3 + \vec(x)_4)\) a potom pomocou aktuálnych súradníc štvorstenu vypočítajte súradnice vrcholov kocky. Keď sa zistí kolízia, kontaktný bod \(\vec(p)\) (ktorý sa teraz nachádza na kocke) sa spracuje rovnakým spôsobom ako vyššie. Aktualizované súradnice častíc sa vypočítajú rovnakým spôsobom. Na urýchlenie výpočtov si môžete vopred vypočítať koeficienty \(c_1\) -\(c_4\) pre všetky vrcholy kocky. Ak je \(\vec(p)\) vrcholom, potom hodnoty \(c_1\) -\(c_4\) možno nájsť a použiť priamo. V opačnom prípade leží \(\vec(p)\) vo vnútri trojuholníka alebo na jednej z jeho strán a hodnoty \(c_1\)-\(c_4\) možno získať z vopred vypočítaných hodnôt vrcholy trojuholníka pomocou interpolácie.

Na zvládnutie kolízií spravidla stačia 3-4 iterácie. Ak sa relaxácia zastaví príliš skoro, telá sa nebudú správať ako úplne pevné. Ale to je dokonca dobré, pretože absolútne pevné telesá v prírode neexistujú. Navyše to robí systém stabilnejším.

Pri preskupovaní polôh častíc, ktoré tvoria štvorsten, treba zodpovedajúcim spôsobom zmeniť fyzikálne vlastnosti telesa (matematicky to znamená, že tenzor zotrvačnosti telesa sa mení v závislosti od polôh a hmotností častíc).

Rovnakým princípom ako štvorsten môžete nastaviť inú podobnú konfiguráciu častíc a väzieb umiestnením častíc do bodov so súradnicami \((0,0,0)\), \((1,0,0)\), \( (0,1,0)\) a \((0,0,1)\) . Nech \(\vec(a)\) , \(\vec(b)\) a \(\vec(c)\) sú vektory smerujúce od častice 1 k časticiam 2, 3 a 4. Polohy častíc obmedzíme požiadavkou, aby vektory \(\vec(a)\) , \(\vec(b)\) a \(\vec(c)\) mali jednotkovú dĺžku a uhol medzi každým z troch párov vektorov bol rovný \(90^\circ\) (zodpovedajúce skalárne súčine sa musia rovnať nule). Všimnite si, že to opäť, ako v prípade štvorstenu, poskytne 4 častice a 6 väzieb.

Kĺbové telá

Teraz môžeme spojiť niekoľko tuhých telies pomocou závesov (valcový, guľový atď.). Za predpokladu, že dve telesá majú jednu spoločnú časticu, dostaneme guľový záves (čapový spoj) a ak sú dve častice spoločné, tak dostaneme valcový záves (záves) (obr. 7). Rovnakým spôsobom môžete spojiť dve telesá pomocou tyče alebo akéhokoľvek iného typu spojenia - stačí si zapamätať pridanie kódu, aby ste zvládli nový typ spojenia v relaxačnej slučke.

Tento prístup nám umožňuje zostaviť kompletný model kĺbového ľudského tela. Realizmus sa zvýši, ak dodatočne implementujete obmedzenia uhlových pohybov v pántoch. Existuje niekoľko spôsobov, ako takéto obmedzenia implementovať. Najjednoduchšia metóda zahŕňa použitie obmedzenia typu tyče, ktoré sa spustí iba vtedy, keď vzdialenosť medzi dvoma časticami klesne pod určitú prahovú hodnotu (v tomto prípade ide o jednosmernú väzbu tvaru \(|\vec(x)_2 - \vec(x)_1| > 100\)). V dôsledku toho sa obe častice nikdy nemôžu dostať príliš blízko k sebe (obr. 8).

Iný spôsob vytvárania obmedzení uhlových pohybov vyžaduje splnenie nasledujúcej podmienky pre bodový súčin:

$$ (\vec(x)_2 - \vec(x)_0)\cdot (\vec(x)_1 - \vec(x)_0)< \alpha . $$

Môžete tiež obmedziť pohyb častice na konkrétnu rovinu. Opäť platí, že polohy častíc, ktoré nespĺňajú dané obmedzenia, musia byť opravené. Robí sa to podobne ako v prípade tyče, aj keď zodpovedajúce vzorce budú trochu komplikovanejšie.

| Modelovanie v tabuľkových procesoroch

Lekcie 17 - 18
Modelovanie v tabuľkových procesoroch

Simulácia pohybu tela pod vplyvom gravitácie

Príklady pohybu pod vplyvom gravitácie sú dobre známe. Ide o pád tela z určitej výšky a pohyb tela hodeného nahor určitou rýchlosťou a pohyb tela hodeného pod uhlom k horizontu. Ak sa pri takýchto problémoch neberie do úvahy sila odporu vzduchu, potom sú všetky uvedené typy pohybu opísané známymi vzorcami. Nemenej zaujímavé sú ale problémy, pri ktorých sa berie do úvahy odpor vzduchu.

PROBLÉM 3.24. Zasiahnutie cieľa

Etapa I. Formulácia problému

POPIS ÚLOHY

Chlapci hrajú bedminton. Poryv vetra zdvihol loptičku a odniesol ju na konáre stromu. Náročnou úlohou je získať loptičku. Problém sa dá vyriešiť niekoľkými spôsobmi. Každá metóda má svoje pre a proti.

Môžete napríklad vyliezť na strom. Ide však o veľmi nebezpečnú činnosť: čím vyššie sú konáre stromu, tým sú tenšie. Existuje vysoká pravdepodobnosť pádu. Môžete vyrúbať strom. Zdá sa však, že tento spôsob riešenia problému ešte nikto neskúšal. Ak by si každý zvolil tento spôsob riešenia problému, potom by už dávno nezostal ani jeden strom. Môžete počkať, kým loptička spadne sama, zachytená ďalším poryvom vetra. Najčastejšie sa snažia zraziť loptičku kameňom. Tento model správania si zvolíme aj my. Okrem toho poznáme zákony pohybu tela.

ÚČEL SIMULÁCIE

Preskúmajte pohyb telesa hodeného pod uhlom k horizontále. Zvoľte počiatočné hodnoty rýchlosti a uhla hodu tak, aby hodené telo zasiahlo cieľ.

FORMALIZÁCIA PROBLÉMU

Poznámka. Na nastavenie presnosti zásahu , musíte vziať do úvahy veľkosť tela.

Presnosť zásahu by nemala byť väčšia ako polovica najmenšej geometrickej veľkosti tela.

Napríklad, ak je cieľom loptička s priemerom približne 7 cm, potom = 3,5 cm Ak je cieľom basketbalový kôš s priemerom 40 cm, tak = 20 cm Ak je cieľom balón vysoký 5 m, tak = 2,5 m.

Etapa II. Vývoj modelu

INFORMAČNÝ MODEL

Charakteristiky objektov a procesu uvádzame vo forme tabuľky.

Parametre pohybu tela sú uvedené na obrázku 3.4. Pohyb telesa vrhaného pod uhlom k horizontále je opísaný vzorcami


POČÍTAČOVÝ MODEL

Pre modelovanie zvolíme prostredie tabuľkového procesora. V tomto prostredí sú tabuľkové informácie a matematické modely spojené do tabuľky, ktorá obsahuje tri oblasti:

♦ počiatočné údaje;
♦ priebežné výpočty;
♦ výsledky.

1. Vyplňte oblasť zdrojových údajov podľa vzoru.

Stĺpce A B C D E F vyplňte zhora nadol podobnými vzorcami.

2. Vyplňte oblasť medzivýpočtov a výsledkov.


EXPERIMENTÁLNY PLÁN

TESTOVANIE

EXPERIMENT 1

Preskúmajte pohyb tela.

EXPERIMENT 2

Preskúmajte zmenu pohybu telesa pri zmene počiatočnej rýchlosti.

EXPERIMENT 3

Preskúmajte zmenu pohybu tela pri zmene uhla vrhania.

EXPERIMENT 4

Zmenou počiatočnej rýchlosti a uhla hodu preskúmajte povahu pohybu tela a jeho polohu vo vzťahu k cieľu.

EXPERIMENT 5

Zmenou počiatočnej počiatočnej rýchlosti a uhla zvoľte hodnoty tak, aby hodené telo zasiahlo cieľ so špecifikovanou presnosťou.

VEDENIE VÝSKUMU

TESTOVANIE

1. Vyplňte toľko riadkov výpočtovej tabuľky, koľko je súradníc pri nebude menšia ako nula.

2. Porovnajte výsledky skúšobného výpočtu s výsledkami uvedenými v príklade výpočtu. V tabuľke nižšie je niekoľko riadkov s výsledkami výpočtov na základe uvedených počiatočných údajov.

3. Pomocou stĺpcov B a C zostavte pohybový diagram. Príklad je znázornený na obrázku 3.6. Ak chcete vytvoriť diagram, vezmite toľko vypočítaných hodnôt, aby krivka pretínala vodorovnú os X .

4. Ako určiť, koľko výpočtových bodov je potrebné vziať na zostavenie diagramu?

Záver. Ak chcete vytvoriť diagram, musíte vziať vypočítané hodnoty, ktorých súradnice r väčšia ako 0 a jedna záporná hodnota.

EXPERIMENT 1. Štúdium pohybu tela

1. Pomocou diagramu testovacieho prípadu opíšte, ako sa telo pohybuje.

2. Vysvetlite, ako z diagramu určiť najvyšší bod telesa.

3. Vysvetlite, čo na diagrame predstavuje priesečník krivky s vodorovnou osou x. Ako určiť tento bod pomocou výpočtovej tabuľky?

4. Určte z nákresu, v akej vzdialenosti od bodu hodu telo dopadne na zem.

5. Z výpočtovej tabuľky určte:

Maximálna výška zdvihu;
čas cesty do najvyššieho bodu;
vzdialenosť od bodu odhodu po bod dopadu na zem;
čas pohybu pred pádom.

Do voľnej oblasti tabuľky zapíšte výsledky štúdie pohybu tela podľa navrhovaného vzoru.

6. Zadajte inú verziu počiatočných údajov, vyplňte pre ne tabuľku výsledkov experimentu.

EXPERIMENT 2. Závislosť pohybu tela na počiatočnej rýchlosti (uhol hodu nezmenený)

1. Zmenou počiatočnej rýchlosti od 5 do 20 m/s sledujte, ako sa mení maximálna výška zdvihu (y súradnica)

2. Pozorujte, ako sa mení dosah letu (súradnica x) so zvyšujúcou sa počiatočnou rýchlosťou.

3. Vykonajte výpočty pre určitý uhol a zhrňte výsledky výskumu do tabuľky (tabuľka 2), zostavenej na voľnom poli tabuľky.

4. Závery na základe výsledkov experimentu zapíšte do tabuľky: ako sa zmení výška a dolet pri zmene počiatočnej rýchlosti (pri konštantnom uhle vrhu)?


EXPERIMENT 3. Závislosť pohybu tela od uhla hodu (počiatočná rýchlosť pohybu je nezmenená)

1. Vykonajte výpočty pomocou modelu, zväčšite uhol vrhania z 5° na 85° a ponechajte počiatočnú rýchlosť nezmenenú (napríklad 15 m/s).

2. Sledujte zmenu výšky zdvihu (y súradnica) ako sa uhol vrhania zvyšuje, počiatočná rýchlosť zostáva nezmenená.

3. Pozorujte zmenu doletu (súradnica x) ako sa uhol vrhania zväčšuje.

4. Uveďte výsledky výpočtov do voľného poľa tabuľky (tabuľka 3).

5. Závery na základe výsledkov experimentu zapíšte do tabuľky: ako sa zmení výška a dolet pri zmene uhla vrhania (pri konštantnej počiatočnej rýchlosti)?

EXPERIMENT 4. Štúdium charakteru pohybu tela a jeho polohy vo vzťahu k cieľu

Obrázok 3.7 ukazuje možnosti umiestnenia krivky pohybu tela vo vzťahu k cieľu. Možno ich charakterizovať nasledovne:

1. Telo pri pohybe nedosiahne výšku, v ktorej sa nachádza cieľ a padá na zem bez dosiahnutia X ts .

2. Telo pri pohybe nedosiahne výšku, v ktorej sa nachádza cieľ, ale padá ďalej na zem X c.

3. Telo sa pri pohybe dvíha vyššie Y c, ale spadne na zem bez toho, aby dosiahol X c.

4. Telo sa pri pohybe dvíha vyššie Y c a padá ďalej na zem X c.

V stĺpcoch D, E a F hodnoty sú vypočítané S x, Sy, S, ktoré ukazujú polohu tela vo vzťahu k cieľu.

1. Preskúmajte, čo znamená znamenie S x a S y v rôznych časových okamihoch.

Záver.

2. Preskúmajte, ako sa mení S keď sa telo hýbe.

Záver. Celková vzdialenosť k cieľu sa najskôr znižuje a potom zvyšuje.

3. Vo voľnom poli tabuľky (tabuľka 4) vyberte počiatočné údaje (počiatočná rýchlosť a uhol hodu), zodpovedajúce možnostiam pohybu tela uvedeným na obrázku 3.7.


EXPERIMENT 5. Výber počiatočných hodnôt pre zasiahnutie cieľa

V prvom rade si všimneme, že existuje nekonečné množstvo možností, ako počiatočné údaje zasiahnuť cieľ. Našou úlohou je vybrať jednu možnosť.

1. Podľa stĺpca F určiť najmenšiu hodnotu S. V tomto momente telo letí najbližšie k cieľu.

2. Nakreslite stĺpec G analýza hitov. Budeme predpokladať, že telo zasiahlo cieľ, ak je vzdialenosť od cieľa menšia ako špecifikovaná presnosť (bunka $D$10). Ak to chcete urobiť, v bunke G16 zadajte vzorec =IF(F16<$D$10; «попал»; «мимо») .

3. Zmeňte vstupné údaje, aby ste dosiahli čo najlepšiu aproximáciu cieľa.

4. Výsledky výskumu zapíšte na voľné pole tabuľky (tabuľka 5).

5. Zvoľte inú sadu počiatočných údajov, v ktorých teleso zasiahne cieľový „previs“, teda po prejdení najvyššieho bodu stúpania.

6. Zmeňte cieľové súradnice a vyberte hodnoty počiatočnej rýchlosti a uhla hodu pre novú cieľovú pozíciu.

Výsledky a závery získané v experimentoch prezentujte vo forme správy v textovom dokumente. Vo svojej správe uveďte odpovede na nasledujúce otázky:

1. Ako sa pohybuje teleso hodené pod uhlom k horizontále?
2. Ako určiť najvyšší bod stúpania?
3. Ako určiť dosah letu?
4. Ako sa zmení maximálna výška zdvihu so zvýšením počiatočnej rýchlosti a konštantného uhla vrhania?
5. Ako sa mení dosah letu so zvyšovaním počiatočnej rýchlosti a konštantným uhlom hodu?
6. Ako sa mení maximálna výška zdvihu s rastúcim uhlom vrhania a konštantnou počiatočnou rýchlosťou?
7. Ako sa mení dosah letu so zvyšujúcim sa uhlom vrhania a konštantnou počiatočnou rýchlosťou?
8. Ako môžeme vypočítať polohu tela vo vzťahu k cieľu v každom časovom okamihu? Ako sa to dá určiť z výpočtovej tabuľky?
9. Ako sa mení vzdialenosť od tela k cieľu počas pohybu a ako sa to dá určiť pomocou výpočtovej tabuľky?

PROBLÉM 3.25*. Parašutistické hnutie

*Pokročilá výzva

Etapa I. Formulácia problému

POPIS ÚLOHY

Keď parašutista spadne na zem, zažije účinky gravitácie a odporu vzduchu. Experimentálne sa zistilo, že odporová sila závisí od rýchlosti pohybu: čím väčšia rýchlosť, tým väčšia sila. Pri pohybe vo vzduchu je táto sila úmerná druhej mocnine rýchlosti s určitým koeficientom odporu vzduchu k, ktorá závisí od konštrukcie padáka a hmotnosti osoby R odpor = kV 2 .Aká by mala byť hodnota tohto koeficientu, aby parašutista v rýchlosti pristál na zemi nie viac ako 8 m/s ktorý nepredstavuje zdravotné riziko?

Určite ciele modelovania a formalizujte problém.

Etapa II. Vývoj modelu

INFORMAČNÝ MODEL

Vytvorte si sami informačný model.

MATEMATICKÝ MODEL

Na obrázku 3.8 sú znázornené sily pôsobiace na parašutistu. Podľa druhého Newtonovho zákona možno pohyb pod vplyvom síl zapísať ako rovnosť. Túto rovnosť premietneme na os pohybu a dosadíme výraz za silu odporu vzduchu ma = mg - kV 2 .

Zoberme si vzorec na výpočet zrýchlenia

Vypočítame rýchlosť a vzdialenosť, ktorú parašutista preletel v pravidelných intervaloch △t. Vzorec na výpočet momentov v čase je: t i+1 +t i + △t. 

Kde V i- rýchlosť na začiatku intervalu ( V o- štartovacia rýchlosť). Rýchlosť na konci intervalu (a teda na začiatku nasledujúceho) sa vypočíta pomocou vzorca pre rovnomerne zrýchlený pohyb

Vzdialenosť, ktorú parašutista preletel, sa rovná súčtu vzdialenosti prejdenej začiatkom nasledujúceho časového úseku ( S i) a vzdialenosť prejdenú cez tento interval:


POČÍTAČOVÝ MODEL

Pre modelovanie si zvolíme tabuľkové prostredie. V tomto prostredí sú informačné a matematické modely kombinované do tabuľky, ktorá obsahuje tri oblasti:

♦ počiatočné údaje;
♦ priebežné výpočty;
♦ výsledky.

1. Vyplňte oblasť zdrojových údajov.

2. Vyplňte vypočítané stĺpce A B C D, v ktorom sa počítajú parametre pohybu parašutistu:

čas;
rýchlosť;
vzdialenosť;
zrýchlenie.

3. Do buniek výpočtu zadajte vzorce. Príklad vyplnenia kalkulačnej tabuľky:


Stupeň III. Počítačový experiment


EXPERIMENTÁLNY PLÁN

TESTOVANIE

Vykonajte skúšobný výpočet počítačového modelu pomocou údajov uvedených v tabuľke.

EXPERIMENT 1

Preskúmajte pohyb telesa pod vplyvom gravitácie a odporu vzduchu.

EXPERIMENT 2

Vyberte hodnotu koeficientu odporu k pre bezpečné pristátie parašutistu.

EXPERIMENT 3

Preskúmajte závislosť rýchlosti a zrýchlenia od počiatočnej rýchlosti pohybu.

EXPERIMENT 4

Preskúmajte, ako sa mení vzdialenosť letu, kým sa rýchlosť pádu nestabilizuje.

VEDENIE VÝSKUMU

TESTOVANIE

1. Porovnajte výsledky skúšobného výpočtu s výsledkami uvedenými v príklade výpočtu. Príklad skúšobného výpočtu:

2. Zostrojte diagram zmien rýchlosti, zrýchlenia a vzdialenosti v závislosti od času.

EXPERIMENT 1. Štúdium pohybu tela s prihliadnutím na odpor vzduchu

1. Určte z diagramu a tabuľky, ako sa mení rýchlosť parašutistu v čase. Koľko sekúnd trvá, kým sa rýchlosť poklesu stabilizuje?

2. Určte z diagramu a tabuľky, ako sa mení zrýchlenie parašutistu v priebehu času.

3. Určte z diagramu a tabuľky, ako ďaleko parašutista preletí, kým sa rýchlosť ustáli. Umiestnite výsledky na prázdne miesto v tabuľke.

4. Zmeňte časový krok (0,1 s) a určte rýchlosť stabilizácie pohybu, vzdialenosť letu k stabilizácii. Výsledky štúdie sú uvedené v tabuľke.

EXPERIMENT 2. Výber koeficientu odporu

Zmenou hodnoty koeficientu k (bunka SZ), zvoľte rýchlosť stabilizácie pohybu, ktorá je pre trénovaného človeka bezpečná na pristátie (8 m/s).

EXPERIMENT 3. Štúdium stabilizácie rýchlosti a vzdialenosti v závislosti od počiatočnej rýchlosti

Parašutista, ktorý vyskočil z lietadla, nejaký čas letí voľným pádom, naberie dostatočne vysokú rýchlosť a až potom otvorí padák.

1. Zmeňte počiatočnú hodnotu rýchlosti (10 m/s).

2. Pomocou výpočtovej tabuľky určite, ako sa zmení nasledovné:

Počiatočné zrýchlenie;
rýchlosť stabilizácie;
vzdialenosť letu, kým sa rýchlosť nestabilizuje.

3. Výsledky pokusu zapíšte do voľného poľa tabuľky. Vyvodiť záver.

Výsledky experimentu 3:

Poznámka. Všimnite si, ako sa mení počiatočné zrýchlenie. Upozorňujeme, že nemôže byť veľké, pretože zrýchlenie je väčšie 3 g (30 m/s2) spôsobuje veľmi veľké preťaženie.

Štádium IV. Analýza výsledkov simulácie

Na základe výsledkov počítačového experimentu odpovedzte na nasledujúce otázky:

1. Ako sa mení rýchlosť parašutistu v priebehu času?
2. Ako sa zmení rýchlosť parašutistu, keď sa zmení koeficient odporu vzduchu?
3. Aký by mal byť koeficient odporu, aby parašutista klesol k zemi rýchlosťou 8 m/s?
4. Ako sa mení rýchlosť pohybu a ako závisí ustálená rýchlosť rovnomerného pohybu parašutistu od počiatočnej rýchlosti?
5. Koľko sekúnd po začiatku pohybu možno považovať rýchlosť parašutistu za stabilnú?
6. V akej výške od zeme by mal parašutista otvoriť padák, aby mohol pristáť pri danej rýchlosti.

ÚLOHY PRE SAMOSTATNÚ PRÁCU

3.26. Basketbalový hráč.

Pomocou zostrojeného modelu pohybu tela hodeného pod uhlom vypočítajte, akou počiatočnou rýchlosťou a pod akým uhlom musíte hodiť basketbalovú loptu, aby ste sa dostali do obruče.

Pri výpočtoch zohľadnite nasledujúce podmienky:

Počiatočná rýchlosť lopty pri hode sa môže meniť až do 15 m/s;
kruhové súradnice pri = 3 m, X = 0,5 ÷ 7 m;
presnosť zásahu súvisí s priemerom krúžku a rovná sa = 20 cm;
loptička musí zasiahnuť kruhový „vrchlík“, to znamená po prejdení najvyššieho bodu stúpania.

Upravte matematické a počítačové modely pohybu telesa hodeného pod uhlom tak, aby sa dali použiť na výpočet pohybu telesa hodeného z určitej počiatočnej výšky. r 0

3.27. Záchrana topiaceho sa muža.

Akou rýchlosťou a pod akým uhlom treba vrhnúť kruh zo záchrannej lode na topiaceho sa človeka? Pri výpočtoch zohľadnite nasledujúce podmienky:


vzdialenosť topiaceho sa od lode;
presnosť zásahu je = 0,5 m;
uhol vrhania môže byť záporný;
výška boku lode nad hladinou mora.

3.28. Akrobati.

Mnohí videli takýto akrobatický čin v cirkuse. Jeden akrobat stojí na skákacej doske na jednej strane, druhý skáče na druhom konci. Akou počiatočnou rýchlosťou a pod akým uhlom by mal prvý akrobat vyletieť, aby pristál presne na pleciach tretieho účastníka aktu? Pri výpočtoch zohľadnite nasledujúce podmienky:

Počiatočná rýchlosť sa môže meniť až do 10 m/s;
výška a odstránenie tretieho akrobata;
presnosť zásahu je = 0,1 m.

Pokračujeme v sérii článkov o automatizácii vykonávania akrobatických manévrov na malých dronoch. Tento článok má predovšetkým vzdelávací účel: tu si ukážeme, ako môžete vytvoriť jednoduchý automatický riadiaci systém (ACS) na príklade úlohy vykonania „hlavňového“ akrobatického manévru pri riadení lietadla iba krídelkami. Článok je druhým zo série publikácií „Aerobatické UAV“, ktoré cvičnou formou rozpráva o procese budovania hardvérových a softvérových častí samohybných zbraní.

Úvod

Preto sme sa rozhodli implementovať „hlaveň“ v automatickom režime. Je zrejmé, že na automatické vykonanie čísla je potrebné sformulovať príslušný zákon o kontrole. Proces vynájdenia bude oveľa bezbolestnejší a rýchlejší, ak použijete matematický model pohybu lietadla. Testovanie zákona o kontrole v letovom experimente, aj keď je to možné, si vyžaduje oveľa viac času a môže byť tiež oveľa drahšie v prípade straty alebo poškodenia zariadenia.

Pretože pri malých uhloch nábehu a kĺzavosti lietadla jeho rolovací pohyb prakticky nesúvisí s pohybom v ostatných dvoch kanáloch: dráhe a pozdĺžnom - na vykonanie jednoduchého „sudu“ bude stačiť postaviť model pohybu iba okolo. jedna os - os OH pridružené SC. Z rovnakého dôvodu sa zákon o riadení krídiel výrazne nezmení, pokiaľ ide o vytvorenie kompletného riadiaceho systému.

Pohybový model

Rovnica pohybu lietadla okolo pozdĺžnej osi OH súvisiaci SC je veľmi jednoduchý:

Kde je moment zotrvačnosti okolo osi OH, a moment sa skladá z niekoľkých komponentov, z ktorých pre reálny popis pohybu nášho lietadla stačí uvažovať len o dvoch:

Kde je moment spôsobený rotáciou lietadla okolo svojej osi OH(tlmiaci moment), - moment spôsobený vychýlením krídielok (riadiaci moment). Posledný výraz je napísaný v linearizovanej forme: klopný moment lineárne závisí od uhlovej rýchlosti a uhla vychýlenia krídielok s konštantnými koeficientmi úmernosti, resp.

Ako je známe (napríklad z Wiki), lineárna diferenciálna rovnica

Zodpovedá aperiodickej väzbe prvého rádu

Kde je prenosová funkcia, je operátor diferenciácie, je časová konštanta a je zisk.

Ako prejsť od diferenciálnej rovnice k prenosovej funkcii?

V našom prípade môžeme prejsť od parametrov rovnice k parametrom prenosovej funkcie nasledovne (s vedomím, že derivácia je záporná):




Pre aperiodický spoj sa časová konštanta rovná času, počas ktorého výstupná hodnota pri jedinom postupnom pôsobení vstupnej hodnoty nadobudne hodnotu, ktorá sa líši od hodnoty v ustálenom stave o ~ 5 %, a faktor zosilnenia sa číselne rovná ustálenej hodnote výstupnej hodnoty pri jednej krokovej akcii:


V konštruovanom pohybovom modeli sú dva neznáme parametre: zisk a časová konštanta. Tieto parametre sú vyjadrené prostredníctvom charakteristík fyzikálneho systému: moment zotrvačnosti, ako aj derivácie valivého momentu a:

Ak je teda známy moment zotrvačnosti, potom po určení parametrov modelu je možné z nich obnoviť parametre systému.

Parametre modelu. Moment zotrvačnosti

Naše lietadlo sa skladá z nasledujúcich častí: krídlo, trup s chvostom, motor, batéria (batéria) a avionika:

Avionika zahŕňa: dosku autopilota, dosku prijímača SNS, dosku rádiového modemu, dosku prijímača signálu z riadiaceho zariadenia, dva regulátory napätia, regulátor otáčok motora a spojovacie vodiče.

Vzhľadom na nízku hmotnosť avioniky možno zanedbať jej príspevok k celkovému momentu zotrvačnosti.

Ako bola hodnotená veľkosť momentu zotrvačnosti?

Moment zotrvačnosti možno odhadnúť nasledovne. Pozrime sa na rovinu pozdĺž jej osi OH:

A potom to uvádzame vo forme nasledujúceho zjednodušeného modelu:


Schéma na výpočet momentu zotrvačnosti. Vľavo hore je batéria, vpravo dole je motor. Motor a batéria sú umiestnené na osi trupu

Je vidieť, že pri vytváraní modelu boli vyradené: kýl, horizontálny chvost, vrtuľa a avionika. Zároveň zostalo: trup, krídlo, batéria, motor. Meraním hmotností a charakteristických rozmerov každej časti je možné vypočítať momenty zotrvačnosti každej časti vzhľadom na pozdĺžnu os trupu:


Celková hodnota momentu zotrvačnosti lietadla vzhľadom na os OH sčítaním momentov zotrvačnosti dielov získame:

Po vyhodnotení príspevku každej časti lietadla k celkovému momentu zotrvačnosti sa získalo toto:

  • krídlo - 96,3 %,
  • trup - 1,6%,
  • motor a batéria - 2%,
Je vidieť, že hlavný podiel na celkovom momente zotrvačnosti má krídlo. Je to spôsobené tým, že krídlo má pomerne veľkú priečnu veľkosť (rozpätie krídla - 1 m):

Preto má krídlo napriek svojej skromnej hmotnosti (asi 20 % z celkovej vzletovej hmotnosti lietadla) významný moment zotrvačnosti.

Parametre modelu. Deriváty valivého momentu a

Výpočet derivácií valivého momentu je pomerne náročná úloha spojená s výpočtom aerodynamických charakteristík lietadla pomocou numerických metód alebo pomocou inžinierskych techník. Použitie prvého a druhého vyžaduje značné časové, intelektuálne a výpočtové náklady, ktoré sú opodstatnené pri vývoji riadiacich systémov pre veľké lietadlá, kde cena chyby stále prevyšuje náklady na stavbu dobrého modelu. Pre úlohu riadenia UAV, ktorého hmotnosť nepresahuje 2 kg, je tento prístup sotva opodstatnený. Ďalším spôsobom výpočtu týchto derivátov je letový experiment. Vzhľadom na nízku cenu nášho lietadla, ako aj blízkosť vhodného poľa na uskutočnenie takéhoto experimentu, bola voľba pre nás jasná.

Po napísaní firmvéru na manuálne ovládanie a záznam parametrov do autopilota sme lietadlo zostavili a pripravili na testovanie:

V letovom experimente sa podarilo získať údaje o uhle vychýlenia krídielok a uhlovej rýchlosti otáčania lietadla. Pilot riadil lietadlo ručne, vykonával kruhy, otočky a kotúľania a palubné zariadenie zaznamenávalo a posielalo potrebné informácie na pozemnú stanicu. V dôsledku toho sa získali potrebné závislosti: (stupne/s) a (b/r). Hodnota predstavuje normalizovaný uhol vychýlenia krídiel: hodnota 1 zodpovedá maximálnemu vychýleniu a hodnota −1 zodpovedá minimu:

Ako môžeme teraz zo získaných údajov určiť? Odpoveďou je meranie parametrov prechodového procesu pomocou grafov a .

Ako boli stanovené koeficienty k a T?

Zisk bol určený vzťahom hodnoty uhlovej rýchlosti v ustálenom stave k hodnote výchylky krídielok:


Závislosti uhla vychýlenia krídielok a uhlovej rýchlosti nakláňania od času, získané v letovom experimente

Na predchádzajúcom obrázku úseky ustálenej hodnoty uhlovej rýchlosti približne zodpovedajú napríklad úsekom blízkym časom 422, 425 a 438 s (na obrázku vyznačené tmavočervenou farbou).
Časová konštanta bola určená z rovnakých grafov. Na tento účel boli nájdené oblasti ostrých zmien uhla vychýlenia krídielok a následne bol zmeraný čas, počas ktorého uhlová rýchlosť nadobudla hodnotu, ktorá sa líšila od ustálenej hodnoty o 5 %.


Výsledok určenia hodnôt časovej konštanty a zisku je nasledovný: , . Tieto hodnoty koeficientov so známou hodnotou momentu zotrvačnosti zodpovedajú nasledujúcim hodnotám derivácií valivého momentu:

Overenie modelu

Po vytvorení modelu založeného na aperiodickom spojení

Dá sa to overiť aplikáciou signálu získaného z letového experimentu na vstup a porovnaním výstupného signálu modelu s hodnotou získanou tiež v experimente.

Ako prebiehala simulácia?

Nástroj na realizáciu simulácie sme si vybrali predovšetkým na základe možnosti opakovania výsledkov širokému okruhu čitateľov: to v prvom rade znamená, že program by mal byť vo verejnej doméne. V zásade možno problém modelovania správania aperiodického spojenia prvého rádu vyriešiť vytvorením vlastného nástroja od začiatku. Ale keďže model bude v budúcnosti zložitejší, vytvorenie vlastného nástroja môže odvrátiť pozornosť od hlavnej úlohy – tvorby samohybných riadiacich systémov pre akrobatické drony. S prihliadnutím na princíp otvorenosti nástroja sme zvolili JSBsim.

V predchádzajúcej časti sme získali hodnoty koeficientov a . Používame ich na simuláciu pohybu lietadla. Z predchádzajúceho článku si pamätáme, že konfigurácia modelu lietadla v JSBsim sa špecifikuje pomocou XML súbor. Vytvorme si vlastný model:
0.2 1.0 0.2 0.03 0.5 0.03 0.5 -0.025 0 0.05 0.018 0.018 0.018 1.2 0 0 0 fcs/aileron-cmd-norm -1 1 Roll_moment_due_to_roll_rate rýchlosti/p-aero-rad_sec -0.24 Roll_moment_due_to_aileron fcs/aileron-cmd-norm 2.4 Rýchlosti/vc-kts Aero/alphadot-deg_sec Aero/betadot-deg_sec Fcs/throttle-cmd-norm VYPNUTÉ VYPNUTÉ VYPNUTÉ ON ON ON VYPNUTÉ VYPNUTÉ ON VYPNUTÉ VYPNUTÉ ON VYPNUTÉ
Keďže model pohybu vozidla vytvárame iba v rolkách, mnohé časti súboru necháme prázdne. Nasledujúce charakteristiky sú postupne špecifikované v súbore modelu.

Geometrické rozmery lietadlá sú uvedené v časti metriky: plocha krídla, rozpätie, stredná aerodynamická dĺžka tetivy, horizontálna chvostová plocha, horizontálne chvostové rameno, vertikálna chvostová plocha, vertikálne chvostové rameno, aerodynamická poloha zaostrenia.

Hmotnostné charakteristiky lietadlá sú uvedené v časti mass_balance: tenzor zotrvačnosti lietadla, hmotnosť prázdneho lietadla, poloha ťažiska.

Je potrebné poznamenať, že absolútne polohy aerodynamického ohniska a ťažiska lietadla sa nezúčastňujú na výpočte dynamiky vozidla, dôležitá je ich relatívna poloha.
Potom nasledujú časti popisujúce vlastnosti podvozku lietadla a jeho pohonnej jednotky.

V ďalšej časti zodpovedá za riadiaci systém, vyplňte kanál zodpovedný za ovládanie rolovania: uveďte jediný vstup fcs/aileron-cmd-norm, ktorej hodnota bude normalizovaná od -1 do 1.

Aerodynamické vlastnosti sú uvedené v časti aerodynamika: sily sú špecifikované v súradnicovom systéme rýchlosti, momenty - v príbuznom. Zaujíma nás moment rolovania. V sekcii axis name="ROLL"špecifikujú sa funkcie, ktoré určujú moment síl z rôznych zložiek priemetu momentu aerodynamických síl na os VÔL pridružený súradnicový systém. V našom modeli sú dva takéto komponenty. Prvou zložkou je tlmiaci moment, ktorý sa rovná súčinu uhlovej rýchlosti a predtým určeného koeficientu. Druhou zložkou je moment z krídielok pri pevnej rýchlosti letu: rovná sa súčinu predtým určeného koeficientu veľkosti výchylky krídielok.

Stojí za zmienku, že pri určovaní koeficientu bola použitá rozmerová hodnota. V našich letových údajoch bola uhlová rýchlosť meraná v stupňoch za sekundu, zatiaľ čo v JSBSim sa používajú radiány za sekundu, takže koeficient musíme zmenšiť na rozmer, ktorý potrebujeme, to znamená vydeliť 180 stupňov a vynásobiť radiánmi. Tieto zložky momentu aerodynamických síl zapíšeme do funkcií produktu produktu. Pri modelovaní sa spočíta výsledok vykonania všetkých funkcií a získa sa hodnota priemetu aerodynamického momentu na príslušnú os.

Vytvorený model je možné overiť pomocou experimentálnych údajov získaných počas letových skúšok. Ak to chcete urobiť, vytvorte skript s nasledujúcim obsahom:
sim-time-sec ge 0,0 Poskytnite vstup časovej histórie pre krídelko sim-time-sec ge 0

sim-time-sec 0 0.00075 0.1 0.00374 0.2 -0.00075 0.3 -0.00075 0.4 -0.00075 0.5 -0.00075 0.6 0.00075 0.7 0.00075 ... 48.8 -0.00075 48.9 0.00000 49 -0.00075

kde bodky označujú chýbajúce údaje. V súbore skriptu, ktorý je nám známy z predchádzajúceho článku, sa objavil nový typ udalosti ( "Časové upozornenie"), ktorý vám umožňuje určiť nepretržitú zmenu parametra v priebehu času. Závislosť parametra od času je určená tabuľkovou funkciou. JSBSim Lineárne interpoluje hodnotu funkcie medzi tabuľkovými údajmi. Postup overenia modelu rolovacieho pohybu pozostáva z vykonania tohto skriptu na vytvorenom modeli a porovnania výsledkov s experimentálnymi.


Výsledok overenia je znázornený na obrázku:


Ako vidno z obrázku, zhoda medzi modelom a realitou je o niečo menej úplná.

Riadiaca syntéza na vykonanie „sudu“

Po obdržaní modelu je ľahké určiť, o aké množstvo a ako dlho je potrebné vychýliť krídelká, aby bolo možné vykonať rolovanie. Jednou z možností je nasledujúci algoritmus odmietnutia:



Prítomnosť segmentov v trvaní 0,1 s na začiatku a na konci algoritmu vychyľovania krídielok simuluje zotrvačnosť servopohonu, ktorý nedokáže okamžite vychýliť plochy. Model ukazuje, že pri takomto zákone vychýlenia krídiel musí lietadlo vykonať jednu plnú otáčku okolo svojej osi OH, skontrolujeme?

Letový experiment

Výsledný zákon riadenia krídielok bol naprogramovaný do autopilota nainštalovaného v lietadle. Myšlienka experimentu je jednoduchá: dostať lietadlo do horizontálneho letu a potom použiť výsledný zákon riadenia. Ak skutočný rolovací pohyb lietadla zodpovedá vytvorenému modelu, potom lietadlo musí vykonať „pretáčanie sudom“ – jednu plnú rotáciu o 360 stupňov.

Špeciálne ďakujeme nášmu vernému pilotovi za jeho prácu, profesionalitu a pohodlný kufor na jeho kombi Priore!

Počas experimentu sa ukázalo, že model rolovacieho pohybu bol skonštruovaný úspešne - lietadlo vykonávalo jeden „sud“ za druhým, len čo pilot aktivoval naprogramovaný zákon riadenia. Nasledujúci obrázok ukazuje uhlovú rýchlosť zaznamenanú počas experimentu a získanú z výsledkov simulácie, ako aj uhol náklonu a sklonu z letového experimentu:


A nasledujúci obrázok ukazuje signály zaznamenané v letovom experimente pre krídelká, výškovku (ER) a kormidlo (RU):


Vertikálne čiary označujú momenty začiatku a konca popravy „sudu“. Z obrázkov je zrejmé, že počas „pretáčania suda“ pilot nezasahuje do ovládania výškovky a smerového kormidla; je tiež zrejmé, že uhol sklonu má tendenciu neustále klesať počas „valenia suda“ - lietadlo je ťahané do ponoru, ako to bolo predpovedané z výsledkov simulácie na leteckom simulátore (pozri článok „Aerobatické UAV. Ako správne vyvaliť sud“). Ak si pozorne prezriete predchádzajúce grafy, uvidíte, že tretia „hlaveň“ nebola ani dokončená, pretože pilot zasiahol do riadenia, aby vyviedol lietadlo zo strmhlavého letu: pri vykonávaní „hlavne“ sa uhol sklonu veľmi mení. len s krídelkami.

Poznámky

závery

Ako výsledok vykonanej práce sme ukázali jeden zo spôsobov, ako vytvoriť model pohybu UAV na základe uhlovej rýchlosti. V letovom experimente bolo dokázané, že vytvorený pohybový model plne zodpovedá simulovanému objektu. Na základe vyvinutého modelu bol získaný zákon o riadení programu, ktorý umožňuje vykonávať „hlaveň“ v automatickom režime. Presvedčili sme sa aj o tom, že len pomocou krídielok nebude možné vykonať správny „roll“, a to sme aj názorne demonštrovali.

Ďalšou etapou bude spresnenie zákona o riadení pridaním spätnej väzby, ako aj zahrnutím výťahu do riadenia. To si vyžiada vytvorenie modelu pozdĺžneho pohybu nášho lietadla. Na základe výsledkov práce bude vydaná ďalšia publikácia.

Povedzme, že idete na bicykli a zrazu vás niekto tlačí zboku. Aby ste rýchlo získali rovnováhu a vyhli sa pádu, otočte riadidlá bicykla v smere tlače. Cyklisti to robia reflexívne, ale je úžasné, že bicykel dokáže tento úkon vykonať sám. Moderné bicykle dokážu samostatne udržiavať rovnováhu aj pri pohybe bez kontroly. Pozrime sa, ako možno tento efekt modelovať v COMSOL Multiphysics.

Čo vieme o samovyvažovacích bicykloch?

Moderný bicykel sa veľmi nelíši od bezpečný bicykel- jeden z prvých návrhov, ktorý sa objavil v 80. rokoch 19. storočia. O viac ako sto rokov neskôr sa vedci stále snažia zistiť, aké účinky spôsobujú, že bicykel sa sám vyrovná. Inými slovami, ako zostane nekontrolovateľný bicykel vo vzpriamenej polohe? Mnoho publikovaných prác bolo venovaných opisu pohybu bicykla pomocou analytických rovníc. Jednou z prvých dôležitých publikácií na túto tému bola práca Francisa Whippla, v ktorej odvodil všeobecné nelineárne rovnice pre dynamiku bicykla ovládaného cyklistom bez použitia rúk.

Všeobecne sa uznáva, že stabilitu bicykla zaisťujú dva faktory - gyroskopická precesia predného kolesa a stabilizačný účinok pozdĺžny sklon osi otáčania kolesá. Nedávno tím výskumníkov z Delft a Cornell (pozri) publikoval komplexný prehľad linearizovaných pohybových rovníc pre model bicyklov Whipple. Svoje výsledky použili na demonštráciu samovyvažovacieho bicykla. Ich výskum ukazuje, že pre tento jav neexistuje jednoduché vysvetlenie. Kombinácia faktorov, vrátane gyroskopických a stabilizačných efektov, geometrie bicykla, rýchlosti a rozloženia hmoty, umožňuje neriaditeľnému bicyklu zostať vzpriamený.

Inšpirovaní touto prácou sme vytvorili dynamický model viactelesového systému, ktorý demonštruje samovyvažovací pohyb bicykla ovládaného cyklistom s voľnými rukami.

Poloha bicykla v rôznych časoch.

Viactelesový model bicykla

Aby sme zabezpečili čisté odvaľovanie kolies a obmedzili preklzávanie kolies v troch smeroch, potrebujeme tri okrajové podmienky.


Model kolesa zobrazujúci smery, v ktorých je pohyb obmedzený.

Platia nasledujúce obmedzenia: Žiadny posun dopredu:

(\frac(d\bold(u))(dt).\bold(e)_(2)=r\frac(d\bold(\theta)_s)(dt))

Žiadny bočný sklz:

\frac(d\bold(u))(dt).\bold(e)_(3)=r\frac(d\bold(\theta)_(l))(dt)

Žiadne skĺznutie kolmo na povrch kontaktu so zemou:

\frac(d\bold(u))(dt).\bold(e)_(4)=0

kde \bold(e)_(2) , \bold(e)_(3) a \bold(e)_(4) sú okamžitý smer (naklonená os), priečny smer (os rotácie) a kolmá na kontaktná plocha (\bold(e)_(4)=\bold(e)_(2) \times\bold(e)_(3)), v tomto poradí;

\frac(d\bold(u))(dt) — rýchlosť prekladu; r je polomer kolesa; \frac(d\bold(\theta)_(s))(dt) — uhlová rýchlosť rotácie; \frac(d\bold(\theta)_(l))(dt) je uhlová šikmá rýchlosť.

Pretože nie je možné aplikovať tieto okrajové podmienky na rýchlosť, sú diskretizované v čase a uložené nasledovne:

(\bold(u)-\bold(u)_(p)).\bold(e)_(2)=r(\bold(\theta)_(s)-\bold(\theta)_(sp ))

(\bold(u)-\bold(u)_(p)).\bold(e)_(3)=r(\bold(\theta)_(l)-\bold(\theta)_(lp ))

(\bold(u)-\bold(u)_(p)).\bold(e)_(4)=0

kde \bold(u)_(p) , \bold(\theta)_(sp) a \bold(\theta)_(lp) sú vektor posunutia, rotácia a uhol sklonu v predchádzajúcom čase.

V diskrétnych okrajových podmienkach, ktoré zaisťujú absenciu sklzu, sa použije výsledok výpočtu polohy kolesa v predchádzajúcom časovom kroku. Pevná poloha tela, rotácia a okamžité polohy osi v predchádzajúcom časovom kroku sú uložené pomocou globálnych rovníc a uzla Predchádzajúce riešenie v nestacionárnom riešiči.

Simulácia pohybu samovyvažovacieho bicykla

Na analýzu sme vybrali bicykel s uhlom riadenia 18°. Počiatočná rýchlosť bicykla je 4,6 m/s. 1 sekundu po začatí pohybu pôsobí na bicykel na veľmi krátku dobu sila 500 N. Pod vplyvom sily sa bicykel vychýli z priamej trajektórie v danom smere.

Počas prvej sekundy sa bicykel pohybuje dopredu v pôvodne určenom smere konštantnou rýchlosťou. Bočná sila potom spôsobí vychýlenie. Všimnite si, že cyklista nedrží ruky na riadidlách a nemôže kontrolovať rovnováhu bicykla. Čo bude ďalej? Môžeme si všimnúť, že akonáhle sa bicykel začne nakláňať, riadidlá sa otáčajú v smere pádu. Korekcia polohy riadidiel v prípade pádu obnoví rovnováhu bicykla.

Bicykel pokračuje v pohybe dopredu a pri pohybe sa začína nakláňať do protismeru. Toto naklonenie je menšie a pohyb riadenia tesne sleduje sklon s miernym oneskorením. Táto ľavo-pravá oscilácia pokračuje a nakoniec zmizne. Bicykel sa pohybuje dopredu v striktne vertikálnej polohe a mierne zvyšuje rýchlosť. Vibrácie volantu, uhly natočenia a uhlová rýchlosť postupne klesajú a miznú.

Pohyb bicykla po rovnej ploche pri vybočovaní z priameho smeru. Šípka ukazuje sklon bicykla.

Výsledky výpočtu uhlov sklonu a natočenia volantu (vľavo) a relatívnej uhlovej rýchlosti (vpravo) bicykla.

Vykonávanie analýzy stability

Tak sme sa naučili, že bicykel dokáže samovyvážiť. Štúdia ukázala, že nie je možné vyčleniť jeden parameter, ktorý určuje stabilitu bicykla. Dizajn bicykla, rozloženie hmotnosti a rýchlosť jazdy sú všetko faktory, ktoré ovplyvňujú stabilitu. Na lepšie pochopenie tohto javu sme vykonali ďalšie analýzy, aby sme preskúmali vplyv dvoch parametrov – počiatočnej rýchlosti a sklonu osi riadenia. Ako počiatočnú konfiguráciu sme použili vyššie popísaný model bicykla s uhlom riadidiel 18° a počiatočnou rýchlosťou 4,6 m/s a vykonali sme parametrickú analýzu vplyvu týchto dvoch faktorov.

Rôzne počiatočné rýchlosti

Pri státí nemôže bicykel zostať v striktne vzpriamenej polohe. Na vyhodnotenie vplyvu tohto parametra sme menili rýchlosť pohybu od 2,6 m/s do 6,6 m/s v krokoch po 1 m/s. V rozsahu 2,6–3,6 m/s sa bicykel príliš nakláňa a je nestabilný. Pri rýchlosti 5,6 m/s má rýchlosť náklonu tendenciu k nule, no samotný uhol náklonu nadobúda nenulovú hodnotu. Aj keď je táto konfigurácia stabilná, bicykel sa bude pohybovať v kruhu s miernym naklonením. Pri rýchlosti 6,6 m/s sa náklon a uhol natočenia volantu časom zväčšujú, takže pohyb je nestabilný.

Nestabilný Udržateľný Nestabilný
2,6 m/s 3,6 m/s 4,6 m/s 5,6 m/s 6,6 m/s

Stabilné puzdro zodpovedá rýchlosti 5,6 m/s (vľavo) a nestabilné puzdro zodpovedá rýchlosti 6,6 m/s (vpravo).

Uhol riadenia

Zostava riadenia je veľmi dôležitá pre samovyvažovanie bicykla. Ak sa bicykel nedá ovládať (napríklad pri zaseknutých riadidlách), bicykel nebude schopný kompenzovať náklon, takže nakoniec spadne. V tomto smere na samovyvažovanie bicykla vplýva aj otáčanie riadiacej osi, ktorá riadi dráhu vidlice.

Aby sme analyzovali vplyv otáčania osi riadenia na stabilitu bicykla, menili sme uhly riadenia od 15° do 21° v krokoch po 1°. Pri uhle 15° sa uhol sklonu a natočenia volantu časom zväčšuje, čím sa táto konfigurácia stáva nestabilnou. Bicykel je stabilný od 16° do 19° a nestabilný pri vyšších uhloch. Pri hodnotách rotácie väčších ako 19° kolíše sklon a uhol rotácie a tieto oscilácie sa časom zvyšujú, čo vedie k strate stability.

V tomto príspevku sme ukázali, ako simulovať pohyb neriaditeľného, ​​samovyvažujúceho bicykla pomocou modulu Multibody Dynamics v COMSOL Multiphysics. Ukázali sme, ako implementovať obmedzenia sklzu na pevnom kolese prostredníctvom rovníc a potom sme tieto obmedzenia skombinovali s viactelesovým modelom bicykla. Potom sme analyzovali účinky počiatočnej rýchlosti a rotácie nápravy na stabilitu bicykla. Po vyhodnotení týchto parametrov sme videli, že bicykel môže zostať stabilný v jednej konfigurácii a stratiť ju v inej.

Samovyvažovanie bicykla je dôsledkom množstva faktorov. Prostredníctvom našej analýzy a v súlade s predchádzajúcim výskumom sme preukázali, že stabilita bicykla súvisí s jeho schopnosťou „riadiť sa“ v smere naklonenia.