Simulace pohybu postav počítačové hry. Lekce informatiky "modelování pohybu" Verletova integrační metoda

Tento tutoriál obsahuje 3D scénu.

Stručný úvod

Ve skutečnosti již v předchozích lekcích byly určité aspekty fyziky v Cinema 4D zmíněny: například hned v první lekci na tomto webu jsme upustili míč na rovnou plochu, později byl fyzikální model Cinema 4D považován za jeden ze způsobů, jak simulovat generátor nekonečného pohybu. Ale až dosud to byly jen dílčí, extrémně povrchní a nejprimitivnější aspekty fyziky.

V této lekci přejdeme k tomu nejzajímavějšímu: k hloubkovému studiu fyziky v Cinema 4D na konkrétním příkladu – pokusíme se vytvořit a nakonfigurovat (alespoň v té nejprimitivnější verzi) plně funkční fyzikální model pohybu auta v nerovném terénu, simulující obecně stejné principy, podle kterých se auto pohybuje v reálném světě.

Potřeba použít fyzický model pohybu vozidla spočívá ve slovech „po nerovném terénu“. Ve většině případů při modelování automobilové dopravy není potřeba používat fyzikální model: auta se pohybují rovnoměrně po trajektorii (přesně takový dopravní proud jsme se naučili vytvářet z jednoho modelu auta, pamatuješ?), prakticky vizuálně interagují v žádném případě s prostředím, a to snadno a jednoduše zobrazit pomocí jednoduchých prostředků, aniž byste se uchýlili k fyzice. Jakmile se však bavíme o složitém terénu, po kterém auto jede, nebo o mimořádném chování auta samotného (driftování, smyky či kolize) – zde přichází na řadu fyzika, pokud ty a já nechceme ručně umístěte velké množství klíčů a upravte křivky chování trojrozměrného modelu pro každou sekundu jeho chování (a to bez zaručení vizuální věrohodnosti konečného vykreslení).

Záměry a cíle

Nejprve si definujme naše cíle a cíle. V této lekci je naším cílem znázornit více či méně pravděpodobné chování automobilu při jízdě na nerovném povrchu. Přesněji řečeno: auto by mělo při nárazech na nerovnosti poskakovat a kutálet a také by mělo věšet kola přes výmoly. A samozřejmě by měl zpomalit při překonávání nervozity a zrychlit na rovných plochách.

Nebýt zrychlování a zpomalování vozu v závislosti na terénu, pak bychom si možná zjednodušili náš úkol „zavěšením“ vozu na neviditelného „vůdce“ pohybujícího se po dané trajektorii – v tomto případě by vůz byl jako dětské sáňky, jejichž rychlost nezávisí na výšce závějí pod běžci a na rychlosti kroku otce, který vleče syna na saních. V našem případě toto řešení problému není pro vás a pro mě vhodné, to znamená, že budeme muset vybavit model auta nejpracovanějším motorem. Pro maximální efekt uděláme z našeho auta SUV s pohonem zadních kol.

Začněme?

Začněme modelováním vzhledu vozu (konkrétně vzhledu, nikoli fyzického modelu – to není totéž!). Náš vůz se bude skládat pouze z pěti trojrozměrných prvků: karoserie a čtyř kol. Doufám, že chápete, že každé kolo by mělo být samostatným prvkem modelu. Kromě toho je vhodné, aby každé z kol bylo pevné (monolitické), to znamená, že sestávalo z jednoho jediného prvku, a ne ze sady prvků, jinak se později setkáte s mnoha obtížemi - budete se muset spojit dohromady všechny prvky každého z kol pomocí fyzikálních modifikátorů , což by podle mého názoru byla naprosto zbytečná ztráta času. Základním principem, na jehož základě jsme rozdělili prvky modelu, je možnost následného vizuálního posunutí prvků vůči sobě za jízdy SUV.

Vezměte prosím na vědomí, že ve spodní části karoserie SUV jsou výřezy pro kola - hned udělám výhradu, aby jejich absence nerušila práci našeho budoucího fyzického modelu (později uvidíte sami), ale při sledování v animaci byste mohli vidět kola projíždějící přímo skrz dno, což by samozřejmě byla hrubá vizuální chyba.

Nyní přejděme k tomu nejdůležitějšímu: vytvoření skutečného fyzického modelu SUV. Mohli byste okamžitě předpokládat, že je čas připevnit kola ke karoserii. V žádném případě! Ne teď, ne později. A právě proto. Faktem je, že pokud byste kola připevnili přímo na tělo, měli byste opět spoustu potíží: fyzický model Cinema 4D by kola vnímal jako uvnitř těla(tedy jakoby v něm uvízl) a za každou cenu by se je snažil vyprostit, v důsledku čehož byste místo více či méně věrohodného chování kol viděli především jejich malé, non-stop vibrace a minimální reakce na fyzickou interakci s jinými objekty obklopujícími SUV. Tento problém lze samozřejmě zcela vyřešit doladěním a časově náročným nastavením hodnot dynamiky scény a modelů, jako jsou intervaly, po jejichž dosažení začíná interakce trojrozměrných prvků, ale my půjde jednodušší cestou.

Půjdeme jednodušší cestou – a tentokrát vytvoříme nikoli vizuální, ale fyzický model karoserie auta. Podle návrhu autora se jedná o nejobyčejnější polygonální krychli. V tom vašem to může být jakýkoliv jiný polygonální objekt – hlavní je, že není vidět pod karoserií SUV a že jde o polygonální model, jehož okraje jsou dostatečně daleko od kol. Tento prvek budeme konvenčně nazývat váhovým centrem.

Proč tomu tak je, ptáte se? Proč to nemůže být objekt NULL nebo spline?

Protože hmotnostní centrum, které jsme vytvořili, je podle definice a na základě svého názvu určeno k aktivní účasti na fyzickém modelu SUV. Ani splajny, ani objekty NULL, které jsou vybaveny fyzikálními vlastnostmi, je nepoužívají, protože nemají fyzický povrch.

Bylo tedy vytvořeno těžiště SUV. Přejděme k uchycení kol. Nebýt fyzického modelu, jednoduše bychom je ve správci objektů podřídili krychli (nebo i tělu), a to by úplně stačilo. V našem případě by kola neměla být připevněna pevně, ale s přihlédnutím k určité fyzické svobodě, tedy schopnosti mírně se posunout vzhledem ke středu váhy, když dojde k fyzické interakci s jinými objekty na scéně (například s nerovným povrchy vozovek).

Právě pro tento typ upevnění poskytuje Cinema 4D objekty typu „Connector“ (z anglického „connect“ - „to connect“). Přejděte do horní nabídky, vyhledejte položku „Simulace“, v položce rozbalovací nabídky vyberte podpoložku „Dynamika“ a v rozbalovací nabídce klikněte na „Konektor“.

Vidíme, že se v pracovním okně objevil nový objekt a jeho jméno se objevilo ve správci objektů. Začněme pravým předním kolem. Konektor umístíme v místě, kde se nachází geometrický střed kola, které se pomocí konektoru připevní ke karosérii - přičemž samotný geometrický střed kola by se měl nacházet v místě, kde je střed náboje kola. umístěný u volantu.

Nyní musíte nakonfigurovat konektor. Vyberte jeho název ve správci objektů a podívejte se na okno vlastností, které se otevře níže.

Prvním parametrem, jehož hodnotu bychom měli změnit, je typ spojení (parametr „Type“), ten určuje, jak se bude kolo pohybovat vůči karosérii. Je zřejmé, že nejvhodnějším typem připojení v našem případě bude „Odpružení kola“. V poli naproti slovům „Object A“ přetáhněte název těžiště ze správce objektů; na obrázku níže je označen jako „Základ“ - to je předmět ke kterému Připevňujeme kolo. V poli naproti slovu „Object B“ přetáhněte název kola (na obrázku označený jako „Wheel_FR“, ze zkratky „Wheel Front Right“) – to je namítat to přikládáme vám to. Parametry „Příloha A“ a „Příloha B“ se nedotkneme – označují, kde jsou těžiště objektů, a výchozí hodnoty nám v tomto případě docela vyhovují.

Přejděme k jemnému doladění konektoru.

Nastavení "Ignorovat kolize" je pro případy, kdy se chcete vyhnout fyzické interakci mezi kolem a středem váhy - například pokud nastavení konektoru umožňuje vychýlení kola až o 45 stupňů, ale kolo stále spočívá na předmětu, o který se jedná. a nemůže se odchýlit do maximálního povoleného úhlu, pak může toto nastavení pomoci. Parametr „Steering Angle“ je maximální povolený úhel vychýlení kola od jeho původní polohy. Parametr „Suspension Rest Position“ určuje vertikální posunutí kola v klidu (to znamená v těch okamžicích, kdy kolo s ničím neinteraguje). V našem případě je hodnota -15 cm. - pokud ji změníte na -25, pak se karoserie SUV zvedne ve vztahu ke kolům ještě výše než v tuto chvíli a zvýší se světlá výška, ale při zároveň se sníží stabilita SUV, protože těžiště bude vyšší - ne, to už připomíná rovnováhu stability aut v reálném světě? Měkkost odpružení závisí na hodnotě parametru „Tuhost odpružení“. Čím nižší hodnota, tím měkčí bude odpružení. Parametr „Suspension Dumping“ určuje „odskok“ zavěšení. A nakonec, pokud si přejete, můžete aktivovat parametry „Dolní mez Y“ a „Horní mez Y“ a určit pro ně hodnoty vzdálenosti, za kterou se kolo nemůže vychýlit.

Po dokončení nastavení konektoru opakujeme stejnou operaci - počínaje vytvořením nového konektoru - pro druhé přední kolo, tentokrát levé. Místo toho, abyste cestovali přes horní nabídku, jak jste již pravděpodobně zjistili, můžete jednoduše najít konektor pravého předního kola, který jsme vytvořili dříve, a stisknutím a podržením klávesy „Ctrl“ na klávesnici vší silou přetáhněte název konektoru do prázdného místa ve správci objektů - Po dokončení této operace obdržíte vy i já novou kopii konektoru, která také zdědí všechna nastavení ze svého originálu. Hlavní věc je nezapomenout změnit název pravého kola na název levého v poli „Objekt B“ ve vlastnostech nového konektoru.

Přední kola jsou hotová. Přesuňme se dozadu.

A hned stojíme před otázkou, která je na první pohled poněkud nezřejmá: kolik motorů by naše SUV mělo mít? Jaká zvláštní otázka, říkáte si - jedna, samozřejmě.

Dovolte mi vysvětlit, s čím tato otázka souvisí. Ve skutečném mechanismu automobilu je točivý moment přenášen na obě hnací kola současně prostřednictvím poměrně složitého systému mechanických pohonů. Modelování tohoto pohonného systému pro vás a mě nemá smysl, protože nemáme za úkol vizualizovat vnitřní strukturu SUV, což znamená, že místo plného chodu motoru si můžeme dovolit jakoukoli zjednodušenou fyzickou imitaci to, dokud se hnací kola protáčejí a tlačí vůz dopředu.

Vy a já tedy máme dvě alternativní řešení: pokud zoufale potřebujeme vykreslit oddělená trakce dvou hnacích kol, můžeme do virtuálního návrhu přidat dva samostatné motory, z nichž každý bude točit vlastním kolem. Pokud nepotřebujeme modelovat oddělenou trakci, pak nejúčinnějším a nejjednodušším způsobem, jak uvést auto do pohybu, je vytvořit takzvaný „pár kol“ – dvě kola pevně spojená k sobě, která jsou poháněna jedním motorem.

V této lekci zvolíme druhý, jednodušší způsob – vytvoření dvojkolí a jeho otáčení jedním motorem. S výhradou, že v zásadě, chcete-li, můžete tuto metodu zkomplikovat - například neotočte dvojkolí, ale nápravu s hnacími koly připojenými k ní pomocí konektorů tak, aby se mohla volně kývat tam a zpět, jako jsme již nakonfigurovali pro kola předních kol V této lekci si však nebudeme náš úkol zbytečně komplikovat, pokud máte chuť, experimentujte sami na základě scénky přiložené k této lekci, odkaz na ni najdete na začátku lekce.

Takže je rozhodnuto - vytvoříme dvojkolí: vyberte dvě zadní kola - můžete v pracovním okně, můžete přejít do správce objektů, kde je to pro vás pohodlnější - pak ve správci objektů klikneme pravým tlačítkem na libovolné z nich a v rozevíracím kontextovém menu hledáme položku „Připojit“ +Odstranit“ („Připojit a odstranit“). O řádek výše ve stejné kontextové nabídce je položka „Connect“ - při kombinování prvků vytvoří nový objekt, přičemž originály sloučených modelů zůstanou nedotčené, nebudeme potřebovat originály samostatných zadních kol.

Vidíme, že zadní kola SUV se stala jedním trojrozměrným prvkem – což jsme potřebovali.

Vytváříme další konektor - tentokrát pro zadní dvojkolí a vzhledem k jeho monolitické povaze je pouze jeden a poté jej nakonfigurujeme. Umístíme jej přirozeně do středu dvojkolí.

Nyní vytvoříme motor: horní nabídka, opět položka „Simulace“, rozbalovací nabídka, podpoložka „Dynamika“, podpoložka „Motor“ v rozbalovací nabídce.

Vytvořený motor umístíme na stejné místo jako konektor pro dvojkolí - doprostřed mezi zadními koly (nebo vědecky řečeno do geometrického středu zadního dvojkolí), poté vybereme jeho název ve správci objektů, plynule posuneme náš pohled do okna vlastností motoru, které se otevře níže, a pokračujeme na staveniště.

V poli vedle slov „Object A“ přetáhněte název zadního dvojkolí ze správce objektů (na obrázku je označen jako „Back Wheels“). Do pole vedle slova „Objekt B“ nic nepřetahujeme. Pro parametr „Typ“ vyberte hodnotu „Úhlový“ - vše je v pořádku, protože aby se SUV mohlo pohybovat, námi vytvořený motor musí neustále natáčet hnací dvojkolí do určitého úhlu. Nastavte parametr „Mode“ na „Regulate Speed“. A nakonec uvádíme číselné hodnoty parametrů „Angular Target Speed“ a „Torque“.

Pravděpodobně jste připraveni spustit animaci a zkontrolovat výsledky. Pokud ano, pak je trochu brzy: koneckonců jsme dokončili pouze jednu část práce - nastavili jsme fyzický vliv na předměty, zatímco fyzické předměty samotné ještě nemáme. A kola, říkáte, a tělo a kostka váhy? Je pravda, že byly vytvořeny polygonální modely, ale fyzikálně pro síly vlivu ještě neexistují kola, ani tělo, ani kostka závaží - dokud není ke kolům, karoserii a kostce hmotnosti přiřazen tag dynamiky. Protože je to dynamická značka přiřazená polygonálnímu prvku trojrozměrné scény, která indikuje, že se tento prvek účastní interakce s jinými prvky, které mají dynamické vlastnosti.

Začněme s nastavením fyzických vlastností SUV. A zároveň budujeme hierarchickou strukturu prvků, ze kterých se skládá. Nejprve vytvoříme skupinu, ve které budou shromážděny všechny prvky vozu (pokud tak již nebylo provedeno) - to lze provést kombinací několika prvních prvků, které se vám přijdou pod ruku, pomocí kombinace kláves Alt + G (Připomínám, že na rozdíl od obecně uznávané metody v Cinema 4D sekvenčního samostatného stisku kláves je tato kombinace stisknuta současně!), nebo vytvořením objektu NULL.

Vytvořenou skupinu dále nazveme nějakým jedinečným, nenapodobitelným a nezapomenutelným slovem (autor ji například nazval „CAR“) a nacpeme do ní všechny prvky související s SUV: karoserii, kola, konektory, kostku hmotnosti a motor.

Nyní označíme prvky skupiny jako účastníky fyzické interakce s okolním fyzickým modelem: vyberte název skupiny, klikněte na něj pravým tlačítkem myši, v rozevírací nabídce přesuňte kurzor myši na položku „Dynamics Tags“ a v rozbalovací nabídce z poslední podnabídky vyberte jedinou položku - „Dynamics Body“.

Pokud jste až dosud pozorně četli tuto lekci, možná se ptáte: jak může skupina „CAR“, jelikož je objektem NULL, fyzicky interagovat ve fyzickém modelu? Je to tak, samotný objekt NULL nefunguje. Dynamické vlastnosti od něj ale mohou zdědit všechny jemu podřízené prvky a není potřeba přiřazovat dynamickou značku každému prvku jednotlivě. Hlavní věc je správně nastavit značku dynamiky skupiny. Konfigurovat: vyberte značku a v okně vlastností, které se otevře níže, vyberte záložku „Dynamics“, ve které aktivujeme parametr „Enabled“ (čímž zahrnuje fyziku interakce) a pro parametr „Dynamic“ vyberte hodnotu „On“ ( čímž naznačuje účast skupiny ve všech běžných pro scénu fyzikálních pravidel, jako je gravitace atd.)...

Poté přejděte na kartu „Collision“ ve stejném okně vlastností a zadejte hodnoty, které nutí prvky skupiny zdědit pravidla dynamiky: „Apply Tag to Children“ pro parametr „Zdědit značku“ „ („Dědičnost“), "Vše" pro "Individual Elements", zaškrtnutí pro "Self Collisions" a "Automatic (MoDynamics)" pro "Shape" ("Circuit"). Zbývající parametry nakonfigurujeme podle vašeho vkusu.

Zde by se slušelo konečně vzpomenout na karoserii SUV. Podle naší představy by měl také interagovat s okolním fyzickým modelem trojrozměrné scény - například házet nosem stěnu kartonových krabic - ale zároveň by neměl interagovat s ostatními prvky vlastní skupiny - se zátěžovou kostkou a kolečky. Abychom tohoto výsledku dosáhli, podřídíme jej hmotnostní kostce a karoserii přiřadíme individuální tag dynamiky - stejně jako skupině prvků auta - ale v tagu dynamika karoserie vypneme parametr „Dynamický“ (nastavíme hodnotu „Vypnuto“ na záložce „Dynamika“ (všimněte si, že parametr „Povoleno“ zůstane aktivní, jinak se tělo přestane úplně podílet na fyzickém modelu scény a jakákoli překážka, která se SUV postaví do cesty volně procházet tělem!). Na kartě „Collision“ dynamického tagu přiřazeného k tělu můžete pro parametry „Zdědit tag“ a „Jednotlivé prvky“ zadat „Žádný“ a „Vypnuto“ - tělo nemá podřízené prvky, kterým dynamické vlastnosti těla by měly být přeneseny.

Nezbývá než přidat do trojrozměrné scény výše opakovaně zmíněný okolní fyzikální model – nějaký nerovnoměrný reliéf, který by ve finální animaci odhalil fyzikálně věrohodnou reakci vozu na interakci s výmoly. Ve scéně připojené k lekci je to hrubé zdání jakési arény s jádrem posetým mohylami.

Konečně

V této lekci jsme studovali tvorbu nejjednoduššího fyzického modelu pohybu auta – bez jakýchkoliv dalších pluginů a modulů, pomocí standardních nástrojů Cinema 4D. V lekci, jak jste si všimli, se nemluví o modelování zatáček, námi vytvořený model je schopen se pohybovat pouze po přímce - samozřejmě pokud nerovný terén pod koly nezmění trajektorii pohybu (což se děje ve videu níže). Autor mimochodem záměrně upravil parametry fyzického modelu trojrozměrné scény tak, aby pohyb SUV byl jakoby přehnaný, aby bylo jasně demonstrováno vzájemné působení kol a karoserie vozu s nesrovnalosti. Scéna připojená k lekci navíc obsahuje další prvky, které nejsou uvedeny v lekci, určené pro natáčení a osvětlení. Následně možná budou na webu zvažovány složitější fyzické modely.

Konečný výsledek je ve formě animace.


Zkrácený překlad-převyprávění článku: .

Úvod

Článek popisuje základy přístupu k modelování pohybu objektů, který je vhodný pro použití v počítačových hrách. Tento přístup je jednoduchý, programy, které jej implementují, fungují rychle a jsou poměrně stabilní. K pochopení jeho základů navíc nejsou potřeba žádné speciální matematické znalosti (ačkoli samotný přístup má pevné matematické základy). S jeho pomocí můžete simulovat pohyb tkání, měkkých a tvrdých těles i těles s přihlédnutím ke spojení.

Fyzikální modelování, tedy modelování pohybu postav na základě zákonů fyziky (nebo spíše mechaniky), je studováno poměrně dlouho. V literatuře jsou navrženy různé přístupy (viz atd.) a mnoho úsilí bylo investováno do vytvoření přesných a spolehlivých algoritmů. Přesné metody pro modelování pohybu jsou ve fyzice známy již dlouhou dobu. Pro hry a systémy virtuální reality však přesnost není tou nejdůležitější výhodou (i když je dobrá, když je). Mnohem důležitější je věrohodnost (programátor může model reality zkreslovat, jak chce, pokud se mu podaří hráče zaujmout) a rychlost provedení (k provedení je vyhrazena pouze část času, který trvá animační snímek). výpočty pro modelování pohybu). V případě fyzikálního modelování termín „věrohodnost“ také implikuje stabilitu: modelovací metodu, ve které tělesa pronikají překážkami nebo se odrážejí, když by měla ležet, nelze považovat za úspěšnou. Metody popsané v této práci byly vyvinuty především pro dosažení věrohodnosti a rychlosti výpočtu. Mají vysoký výkon a jsou poměrně jednoduché na implementaci (alespoň ve srovnání s jinými metodami, které řeší stejné problémy).

Uvažovaná metoda je iterativní, takže od určitého kroku ji lze kdykoli zastavit. To umožňuje kompromis mezi přesností výpočtu a vynaloženým časem: pokud je určité množství chyb považováno za přijatelné, kód může běžet rychleji; Kromě toho lze velikost chyby volit adaptivně během provádění. Metoda si také poradí s kolizemi a klidovými kontakty a poradí si s modelováním stohu těles naskládaných na sebe, což je problém mnoha fyzikálních motorů.

Úspěch metody závisí na správné kombinaci a využití výhod několika technik:

  • Verletova metoda numerické integrace;
  • zvládání kolizí a průniku těla pomocí projekce;
  • jednoduchý řešič omezení využívající relaxaci;
  • aproximace druhé odmocniny, která zvyšuje rychlost výpočtů;
  • modelování pevných látek jako částic spojených vazbami.

Uvedeme krátké vysvětlení každé z těchto technik. Při psaní tohoto dokumentu se autor snažil zpřístupnit jej co nejširšímu publiku, aniž by ztratil podstatné informace nutné k realizaci. To znamená, že matematická vysvětlení a zdůvodnění jsou omezena na minimum, pokud nejsou zásadní pro pochopení předmětu. Cílem práce je demonstrovat možnost implementace poměrně pokročilé a robustní metody fyzikálního modelování bez utápění v matematických jemnostech.

Obsah je uspořádán následovně. Část 2 popisuje znázornění částicového systému bez použití rychlosti. Tato reprezentace má řadu výhod, z nichž nejvýznamnější jsou stabilita a snadnost implementace spojení a dalších omezení. Část 3 popisuje, jak dochází k řešení kolize. Poté je v části 4 částicový systém rozšířen o spojení, která umožňují simulaci pohybu tkaniny. Část 5 vysvětluje, jak nastavit systém vzájemně propojených částic pro modelování tuhého tělesa. Dále v části 6 ukážeme, jak realizovat spojení mezi tělesy (zejména závěsy). Část 7 obsahuje různé krátké poznámky a některé zkušenosti s implementací tření.

V následujícím textu jsou vektory označeny písmeny se šipkami a jejich složky dolními indexy: \(\vec(x)=(x_1,x_2,x_3)\) .

Verletova integrační metoda

Srdcem simulace (tj. simulace fyzikálního procesu pomocí počítačového systému) je částicový systém. Typicky se při implementaci takového systému předpokládá, že každá částice má dvě hlavní charakteristiky: souřadnici (polohu) \(\vec(x)\) a rychlost \(\vec(v)\) . Poté se pomocí vzorců vypočítají nové hodnoty souřadnic \(\vec(x)^\prime\) a rychlosti \(\vec(v)^\prime\)

$$ \začátek(zarovnáno) \vec(x)^\první &= \vec(x) + \vec(v) \Delta t, \\ \vec(v)^\první &= \vec(v) + \vec(a) \Delta t, \end(zarovnáno) $$

kde \(\Delta t\) je časový krok, \(\vec(a)\) je zrychlení vypočítané podle 2. Newtonova zákona \(\vec(f)=m \vec(a)\) (kde \(\vec(f)\) je celková síla působící na částici). Uvedené vzorce implementují nejjednodušší metodu numerické integrace - Eulerovu metodu.

Budeme uvažovat o jiném popisu částice, ve které se rychlost nepoužívá: místo uložení polohy a rychlosti každé částice uložíme aktuální polohu částice \(\vec(x)\) a její polohu na předchozím místě. integrační krok \(\vec(x)^ (*)\) . Za předpokladu, že integrační krok je konstantní, získáme následující vzorce pro výpočet nových hodnot:

$$ \begin(zarovnáno) \vec(x)^\prvočíslo &= 2\vec(x) - \vec(x)^(*) + \vec(a) \Delta t^2, \\ \vec( x)^(*) &= \vec(x). \end(zarovnáno) $$

Tato metoda numerické integrace se nazývá Verletova metoda (viz) a aktivně se používá v molekulární dynamice.

Verletova metoda je založena na přibližném vzorci pro výpočet druhé derivace

$$ \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) $$

Tato aproximace není nejpřesnější (existují pokročilejší metody numerické integrace), ale je stabilní a funguje rychle. Snížením faktoru 2 na řekněme 1,99 tím zavedeme odporovou sílu, která rozptýlí energii systému. Všimněte si také, že \(\vec(x)-\vec(x)^(*)\) je vzdálenost ujetá během posledního integračního kroku (\(\vec(v)\Delta t\) ).

Na konci integračního kroku se aktuální poloha každé částice \(\vec(x)\) uloží do odpovídající proměnné \(\vec(x)^(*)\) pro použití v dalším kroku. Pokud je v systému mnoho částic, je vhodné místo kopírování jejich souřadnic použít přesměrování ukazatele.

Kód implementující výše popsané myšlenky může vypadat takto (třída Vector3 obsahuje všechny potřebné operace s vektory)

class ParticleSystem (Vektor3 m_x [ NUM_PARTICLES ]; // Aktuální pozice Vector3 m_oldx [ NUM_PARTICLES ]; // Předchozí pozice Vector3 m_a [ NUM_PARTICLES ]; // Celková síla (zrychlení) Vector3 m_vGravity ; // Gravitační plovák m_fTimeStep ; public : void TimeStep(); private : void Verlet(); void SatisfyConstraints(); void AccumulateForces(); // (vynecháme konstruktory, inicializaci pole atd.) }; // krok integrace metodou 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 ; } } // součet sil působících na každou částici void ParticleSystem::AccumulateForces() ( // Všechny částice jsou pod vlivem gravitace for (int i = 0; i< NUM_PARTICLES ; i ++ ) m_a [ i ] = m_vGravity ; } // kontrola souladu se superponovanými připojeními void ParticleSystem::SatisfyConstraints() ( // Nyní nás nezajímá, jak je implementován.) // krok výpočtu void ParticleSystem :: TimeStep () ( AccumulateForces (); Verlet (); SatisfyConstraints (); )

Zatím vše popsané výše nevypadá moc efektně. Výhody tohoto přístupu budou zřejmé, jakmile přejdeme k použití vazeb a popisu tuhých těles.

Zkuste nastavit \(\vec(a)=(0,0,1)\) a počáteční podmínky \(\vec(x)=(1,0,0)\) , \(\vec(x)^*= (0,0,0)\) . Spočítejte si ručně pár kroků a uvidíte, co se stane.

Srážky a manipulace s kontaktem pomocí projekce

Metody zpracování kontaktů mezi tělesy, založené na použití penalizačních funkcí (schémata založená na penalizaci), naznačují, že v místě kontaktu, kde je možné pronikání těles do sebe, je třeba vložit pružinu, která tento kontakt simuluje. Tento přístup je snadno proveditelný, ale vede k řadě vážných problémů. Zejména je velmi obtížné vybrat tuhost pružiny, aby jednak předměty do sebe nepronikaly příliš hluboko, jednak aby systém neztrácel stabilitu tuhostí pružiny. být příliš vysoký. Dalším přístupem ke zpracování kolize je, že když je detekována kolize, čas je „přetočen“ zpět, až do přesného okamžiku kontaktu těles (například pomocí binárního vyhledávání), poté jsou polohy a rychlosti těles korigovány. (pomocí vzorců pro srážky známé z kurzu fyziky), po kterém začíná výpočet znovu od tohoto okamžiku. A tak – za každou kolizi. Nepříliš ekonomický přístup, pokud plánujete simulovat pohyb mnoha těles v reálném čase.

Zde se podíváme na jiný přístup. Promítneme částice, které pronikly do překážky mimo překážku. Projekcí rozumíme pohyb částice, která je dostatečně malá na to, aby ji vyprostila z překážky. Typicky to zahrnuje pohyb částice ve směru kolmém na kontaktní povrch (překážku) - odtud pochází termín "projekce".

Zvažte následující příklad. Nechť je náš „svět“ vnitřkem krychle o velikosti (0,0,0)--(1000,1000,1000) a navíc restituční koeficient částic je nulový (tj. částice srážející se s povrchem kostka se od ní neodráží). Abychom zajistili, že souřadnice částic zůstanou uvnitř krychle, napíšeme následující kód, který implementuje projekci:

// Přinutí částice zůstat uvnitř krychle void ParticleSystem :: SatisfyConstraints () ( for (int i = 0 ; i< NUM_PARTICLES ; i ++ ) { // Pro všechny částice Vektor3 & x = m_x [ i ]; x = vmin(vmax(x, Vector3(0, 0, 0)), Vector3(1000, 1000, 1000)); ))

(vmax je složková operace výpočtu maxima a vmin je ekvivalentní výpočet minima). Tento kód zpracovává jak kolize, tak klidové kontakty (to znamená případy, kdy je bod v klidu na povrchu krychle), a ukládá polohu všech částic uvnitř krychle. Krása metody Verlet spočívá v tom, že příslušné změny hodnot rychlosti se provádějí automaticky. Při následných voláních TimeStep() bude rychlost upravena tak, aby neobsahovala komponentu kolmou k povrchu krychle (což odpovídá nulovému faktoru obnovy). Viz obrázek 1.

Zkuste tyto výpočty provést sami - a uvidíte, že není třeba nulovat rychlost ve směru kolmém ke stěně krychle - to se děje „samo“. To se může zdát triviální, pokud se omezíme na modelování částic, ale hlavní výhody Verletovy metody se projeví, jakmile přejdeme k vazbám a připojeným tuhým tělesům. Tedy právě teď.

Zpracování několika současně uložených spojů relaxační metodou

Model tkaniny je obvykle systém částic spojených pružinami. Sestavit diferenciální rovnice pro takový systém není obtížné. Ale jedna věc je stavět a druhá věc je řešit. Zároveň se objevují všechny problémy, které jsme měli při používání penalizačních funkcí: příliš tuhé pružiny vedou k tomu, že se systém rovnic sám stává „tuhým systémem“, a to vede k nestabilitě, pokud jsou použity nejjednodušší metody numerické integrace nebo pomalá práce, při použití pokročilejších metod je v obou případech zaručena bolest hlavy. Naopak příliš měkké prameny způsobí, že látka bude působit nerealisticky pružně.

Nejzajímavější věc se však stane, pokud je tuhost pružiny směrována do nekonečna: systém se rázem stane řešitelným i pro velmi jednoduchou (a rychlou) integrační metodu, přičemž zůstane stabilní. Ale než budeme pokračovat v povídání o látce, vraťme se k předchozímu příkladu. Kostku, se kterou jsme se zabývali, si lze představit jako sbírku jednostranných omezení (tj. omezení zapsaných ve formě nerovností) – jedna pro každou stranu krychle – které musí být prováděny během simulace.

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

V uvažovaném příkladu stačí pro dodržení omezení uložených vazbami (aby částice zůstaly uvnitř krychle) jednoduše promítnout souřadnice „vylezených“ částic na povrch krychle. Tato myšlenka je popsána v následujícím pseudokódu:

// Pseudokód k vynucení omezení (1) pro i = 1 , 2 , 3 nastavte xi = min ( max ( xi , 0 ), 1000 )

Lze si to představit tak, že částice a povrch překážky jsou spojeny nekonečně tuhou pružinou, která se v případě prodloužení okamžitě vrátí do své normální délky rovné nule.

Rozšiřme náš model přidáním tyče o délce 100. K tomu potřebujeme definovat dvě částice (\(\vec(x)_1\) a \(\vec(x)_2\) ) a vyžadovat, aby vzdálenost mezi nimi je vždy rovna 100. Matematický zápis pro tento bilaterální vztah je:

\begin(rovnice) |\vec(x)_2-\vec(x)_1| = 100. \label(eq:C2) \end(equation)

I když v počátečním okamžiku polohy částic splňují podmínky \eqref(eq:C2), pak v příštím okamžiku tyto podmínky s největší pravděpodobností splněny nebudou. Abychom získali správnou hodnotu vzdálenosti, pohybujeme částicemi a promítáme je na množinu řešení popsanou \eqref(eq:C2). K tomu se částice buď od sebe vzdalují, nebo se přibližují, v závislosti na tom, zda je vzdálenost získaná numerickou integrací malá nebo velká. Viz obrázek 2.

Pohybující se částice pro korekci vzdálenosti, která nesplňuje podmínku \eqref(eq:C2)

Pseudokód implementující podmínky \eqref(eq:C2):

Delta = x2 - x1; deltalength = sqrt(delta * delta); diff = (deltadélka - klidová délka) / deltadélka; x1 -= delta * 0,5 * diff ; x2 += delta * 0,5 * diff ;

Všimněte si, že delta je vektor a delta*delta je skalární součin. Tento pseudokód posune částice od sebe nebo je posune tak, aby se dosáhlo požadované vzdálenosti mezi nimi. Opět si to můžeme představit jako nekonečně tuhou pružinu, která se okamžitě vrací do své normální délky 100.

Nyní předpokládejme, že kromě podmínky \eqref(eq:C2) musí být splněna i podmínka \eqref(eq:C1) (částice musí být uvnitř krychle). Může se stát, že při pokusu o splnění podmínky \eqref(eq:C2) některá z částic tyče poruší požadavky \eqref(eq:C1) (tyč bude vyčnívat z krychle). Urážlivou částici můžete samozřejmě znovu promítnout na povrch krychle spuštěním \eqref(eq:C1), ale potom bude \eqref(eq:C2) rozbito.

Abychom současně splnili požadavky \eqref(eq:C1) a \eqref(eq:C2), musíme vyřešit soustavu rovnic. Uděláme to, ale ne přímo: jednoduše zopakujeme dva fragmenty pseudokódu jeden po druhém několikrát v naději, že výsledek bude užitečný. Tento přístup je implementován v následujícím kódu:

//realizace modelování tyče uvnitř krychle void ParticleSystem :: SatisfyConstraints () ( for (int j = 0; j< NUM_ITERATIONS ; j ++ ) { // Nejprve splníme podmínky (1) for (int i = 0; i< NUM_PARTICLES ; i ++ ) { // Pro všechny částice Vektor3 & x = m_x [ i ]; x = vmin(vmax(x, Vector3(0, 0, 0)), Vector3(1000, 1000, 1000)); ) // Teď pojďme uspokojit (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 * diff ; x2 += delta * 0,5 * diff ; ))

(zde je vynechána inicializace částic). I když se tato metoda „hloupého“ opakování může zdát poněkud naivní, přesto konverguje k řešení, které hledáme! V matematice se tomu říká relaxační metoda(nebo Jacobi, nebo Gauss-Seidel - podle toho, jak přesně to děláš, viz). Funguje tak, že uspokojuje jednotlivá omezení postupně a konverguje ke globální konfiguraci, která splňuje všechna omezení současně. Tato metoda je velmi užitečná v situacích, kdy musí být současně splněno více nezávislých omezení.

Počet požadovaných iterací závisí na modelovaném systému a povaze pohybu. Volbu tohoto čísla můžete upravit tak, že změříte změnu, ke které došlo vzhledem k předchozí iteraci. Pokud zastavíme iterace příliš brzy, výsledek nebude dostatečně přesný, ale díky Verletově metodě bude pravděpodobně o něco lepší v dalším snímku a ještě lepší v dalším snímku atd. To znamená, že i zastavení relaxace brzy nezničí animaci úplně, ale udělá obrázek trhanějším.

Modelování látek

Skutečnost, že omezení tyčového typu lze považovat za velmi tuhou pružinu, umožňuje použití tohoto typu omezení pro modelování tkáně. Předpokládejme například, že tkanina je reprezentována šestihrannou sítí skládající se z trojúhelníků. Každý uzel sítě představuje částici a každá plocha je spojením tyčového typu spojující částice (normální délka tyče se rovná vzdálenosti mezi uzly, které spojuje).

Funkce HandleConstraints(), která je zodpovědná za zpracování omezení, používá relaxaci přes všechna omezení. Relaxační cyklus lze několikrát opakovat. Ve většině případů však stačí k získání dobře vypadající animace pouze jedna iterace. To znamená, že časová náročnost simulace tkaniny závisí hlavně na tom, jak dlouho trvá provedení operací \(N\) druhé odmocniny a \(N\) dělení (kde \(N\) je počet hran v simulované síti tkanina). Níže vám ukážeme trik, jak se zbavit výpočtu druhé odmocniny. Nejprve se ale podívejme, jak vypadá zpracování omezení.

// Provádění modelování látek struct Constraint ( int částiceA , částiceB ; plovoucí restlength ; ); // Předpokládejme, že pole m_constraints již 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 ; } // Připojte jednu z částic, které tvoří látku, k počátku m_x [0] = vektor3 (0, 0, 0); ))

Nyní pojďme diskutovat o tom, jak se zbavit výpočtu druhé odmocniny. Pokud jsou všechna omezení splněna (dobře, nebo téměř splněna), pak, jak již víme, výsledek výpočtu odmocniny má tendenci k \(r\) - normální délce spoje (tyče). Tuto skutečnost využijeme k získání přibližného výrazu pro funkci druhé odmocniny. Nahraďte funkci \(\sqrt(x)\) členem 1. řádu z jejího rozvoje Taylorovy řady v okolí délky \(r\) (to je ekvivalentní jedné iteraci Newton-Raphsonovy metody s počáteční aproximace \(r\)). Po několika transformacích získáme následující pseudokód:

// Pseudokód pro vynucení omezení (2) pomocí aproximace sqrt delta = x2 - x1; delta *= restlength * restlength / (delta * delta + restlength * restlength ) - 0,5 ; x1 -= delta ; x2 += delta ;

Všimněte si, že pokud vzdálenost již splňuje omezení (tj. pokud |delta|=délka odpočinku), pak dostaneme delta rovnou (0,0,0) a žádná změna nenastane.

Nyní již nepoužíváme odmocniny při zpracování každého vztahu. Navíc lze předem vypočítat druhou mocninu klidové délky * klidové délky. Časově náročné operace jsou zredukovány na provádění \(N\) dělení na snímek (a přístup k odpovídající paměti) – je těžké vymyslet něco, co běží výrazně rychleji.

Omezení nemusí být nutně splněno v jedné iteraci, ale díky Verletově metodě systém rychle konverguje do správného stavu (když jsou splněna všechna omezení) – doslova v několika snímcích. Použití pouze jedné iterace a aproximace druhé odmocniny totiž eliminuje problém tuhosti soustavy rovnic, který by se nutně objevil v soustavě s absolutně tuhými tyčemi.

Umístěním kolíkových spojů mezi páry sousedních vrcholů lze algoritmus modelování tkání rozšířit na modelování rostlin.

Kód a rovnice diskutované v této části předpokládají, že všechny částice mají stejnou hmotnost. Částice s různou hmotností lze modelovat stejným způsobem, ale výsledné rovnice budou trochu složitější.

Shoda s omezením \eqref(eq:C2) pro částice s různou hmotností je tedy implementována následujícím pseudokódem:

// Pseudokód k vynucení omezení (2) delta = x2 - x1; deltalength = sqrt(delta * delta); diff = (deltalength - restlength ) / (deltalength * (invmass1 + invmass2 )); x1 -= invmass1 * delta * diff ; x2 += invmass2 * delta * diff ;

Zde invmass1 a invmass2 ukládají inverzní hmotnosti částic \(\vec(x)_1\) a \(\vec(x)_2\) . Pokud chceme, aby částice zůstala nehybná, musíme ji nastavit na invmass = 0, což odpovídá nekonečné hmotnosti. Jak je uvedeno výše, pro urychlení výpočtů lze použít přibližné výpočty druhé odmocniny.

Pevné látky

Pohybové rovnice tuhých těles byly navrženy dlouho před vynálezem moderních počítačů. Aby v té době získali nějaké užitečné výsledky, museli matematici provádět transformace vzorců. To vedlo ke vzniku takových užitečných konceptů a nástrojů, jako je tenzor setrvačnosti, moment hybnosti, moment síly, čtveřice reprezentující orientaci atd. Mezitím schopnost zpracovávat obrovské množství dat v digitální podobě nyní umožňuje provádět výpočty. pro jednodušší prvky a v některých případech dokonce učinit takové výpočty ziskovějšími. V případě trojrozměrných těles to znamená, že může být vhodné modelovat těleso se čtyřmi částicemi a šesti vazbami (s uvedením správného počtu stupňů volnosti: \(4\cdot 3 - 6 = 6\)). Tím se spousta věcí zjednoduší a to je to, co uděláme příště.

Uvažujme čtyřstěn s částicí umístěnou v každém z jeho čtyř vrcholů. Navíc každý ze šesti okrajů čtyřstěnu představuje omezení typu tyče diskutované v předchozí části. To je docela dost na simulaci pevného těla. Čtyřstěn lze umístit do výše diskutované krychle a jeho správný pohyb zajistí integrátor Verlet. Funkce SatisfyConstraints() se musí postarat o dvě věci: 1) aby částice zůstaly uvnitř krychle a 2) aby bylo respektováno šest omezení kmene. To lze provést jako dříve pomocí relaxace: obvykle stačí 3-4 iterace. Nezapomeňte také na efektivní výpočty druhé odmocniny.

Je však jasné, že při srážkách se pevná tělesa budou chovat jinak než „kosterní“ čtyřstěny. Je tu ještě jeden problém: skutečnost kolize tuhého tělesa s okolním „světem“ jsme dosud zjišťovali pouze na základě informací o vrcholech: pokud byl vrchol vně krychle, promítl se opět dovnitř. To funguje skvěle, pokud je vnitřek "světa" konvexní. Pokud tomu tak není, pak bude čtyřstěn schopen proniknout hranicí „světa“, i když žádný z jeho vrcholů tuto hranici nepřekročí (viz obr. 3, kde trojúhelník je plochou obdobou čtyřstěnu). Podívejme se, jak je tento problém vyřešen.

Nejprve se podívejme na jednodušší verzi problému. Vezmeme tyč, umístíme ji do krychlového „světa“ a předpokládejme, že kostka má malý výstupek směřující dovnitř. Nyní může tyč překročit hranice „světa“, ačkoli obě částice na jejích koncích zůstávají uvnitř krychle (obr. 4). Nebudeme se pouštět do složitostí vývoje mechanismu detekce kolizí, protože se jedná o zcela samostatnou vědu. Předpokládejme místo toho, že subsystém detekce kolizí již existuje a dělá svou práci: určuje hloubku průniku a souřadnice bodů průniku pro každý ze dvou kolidujících objektů. Jedna definice bodů průniku a hloubky průniku je: hloubka průniku \(d_p\) je nejkratší vzdálenost, kterou musí být dva objekty odděleny ve vhodném směru, aby se zabránilo jejich kolizi. Průnikové body jsou body na každém z předmětů, kde se předměty po výše zmíněném přenosu vzájemně dotýkají.

Podívejte se znovu na obrázek 4. Zde po kroku numerické integrace tyč pronikla přes hranici. Detektor kolizí identifikoval dva průnikové body: \(\vec(p)\) a \(\vec(q)\) . Na obr. 4a se bod \(\vec(p)\) ve skutečnosti shoduje s jednou z koncových částic: \(\vec(p)=\vec(x)_1\) . Na obr. 4b leží \(\vec(p)\) mezi \(\vec(x)_1\) a \(\vec(x)_2\) ve vzdálenosti 1/4 délky tyče od \ (\vec( x)_1\) . V obou případech leží bod \(\vec(p)\) na tyči, a proto lze jeho souřadnice vyjádřit jako lineární kombinaci souřadnic bodů \(\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 prvním případě \(c_1 = 1\) , \(c_2 = 0\) a ve druhém - \(c_1 = 0,75\) a \(c_2 = 0,25\) . Tyto hodnoty nám říkají, jak daleko je třeba posunout odpovídající částice.

Chcete-li opravit polohu tyče, posuňte ji tak, aby se bod \(\vec(p)\) shodoval s \(\vec(q)\) . K tomu přesuneme částice \(\vec(x)_1\) a \(\vec(x)_2\) ve směru určeném vektorem spojujícím \(\vec(p)\) a \(\ vec(q)\): .

V prvním případě (obr. 4a) jednoduše promítneme \(\vec(x)_1\) mimo oblast, kde je „zakázané“ být, stejně jako předtím (ve směru \(\vec(q) )\)). To bude stačit a souřadnice \(\vec(x)_2\) není třeba vůbec měnit. Ve druhém případě (obr. 4b) je také potřeba bod \(\vec(x)_1\) posunout na větší vzdálenost než \(\vec(x)_2\) , protože bod \(\vec (p)\) se nachází blíže k \(\vec(x)_1\) (ve skutečnosti, protože \(\vec(p) = 0,75\vec(x)_1 + 0,25\vec(x)_2\), pak pokaždé, když posuneme \(\vec(x)_1\) o hodnotu 0,75, posuneme \(\vec(x)_2\) pouze o 0,25). Jinými slovy, nové polohy částic \(\vec(x)_1^\prime\) a \(\vec(x)_2^\prime\) jsou dány vztahy

\begin(rovnice) \begin(zarovnáno) \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(zarovnáno) \label(eq:x_new) \end(equation)

kde \(\lambda\) je neznámá veličina. Nová poloha částice \(\vec(p)\) - \(\vec(p)^\prime\) - se vypočítá pomocí vzorce

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

Pamatujme, že chceme dosáhnout toho, že \(\vec(p)^\prime = \vec(q)\) , to znamená, že musíme zvolit \(\lambda\) přesně takové, aby \(\vec(p ) ^\prime\) se ve výsledku shodoval s \(\vec(q)\) . Protože částice pohybujeme pouze ve směru \(\vec(\Delta)\) , pak se \(\vec(p)\) také pohybuje ve směru \(\vec(\Delta)\) a tedy řešení rovnici \ (\vec(p)^\prvočíslo = \vec(q)\) lze nalézt vyjádřením \(\lambda\) z

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

Když vypíšeme výraz na levé straně rovnosti, dostaneme

$$ \begin(zarovnáno) \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( zarovnáno) $$

což, vezmeme-li v úvahu pravou stranu \eqref(eq:pq), dává

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

Dosazením nalezené \(\lambda\) do \eqref(eq:x_new) získáme opravené polohy částic \(\vec(x)_1\) a \(\vec(x)_2\), ve kterých \( \vec( p)^\prime\) bude odpovídat \(\vec(q)\) .

Obrázek 5 ukazuje polohu, která vzniká po pohybu částic. Již nedochází k vzájemnému pronikání předmětů, ale byl porušen požadavek, aby délka tyče zůstala konstantní. Abychom to napravili, udělejme ještě jednu iteraci relaxačního cyklu (nebo i několik), po které dokončíme cyklus korekce poloh částic.

V případě čtyřstěnu bude výše popsaná strategie fungovat podobně. Nejprve jsou nalezeny body vzájemného průniku \(\vec(p)\) a \(\vec(q)\) (mohou být také umístěny uvnitř trojúhelníku) a \(\vec(p)\) je reprezentován jako lineární kombinace čtyř částic \(\vec(p)=c_1\vec(x)_1+c_2\vec(x)_2+c_3\vec(x)_3+c_4\vec(x)_4\) takové, že \(c_1+c_2+c_3+c_4=1\) (to bude vyžadovat řešení malého systému lineárních rovnic). Jednou nalezen \(\vec(\Delta) = \vec(q)-\vec(p)\), bude možné pomocí vzorce najít hodnotu \(\lambda\).

$$ \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 částic jsou definovány jako

$$ \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^\první číslo &= \vec(x)_4 + c_4\lambda\cdot\vec(\Delta). \end(align*) $$

Uvažovali jsme tedy o srážce jednoho tuhého tělesa s nehybným „světem“. Výše popsanou metodu lze snadno zobecnit pro řešení kolizí více tuhých těles. V tomto případě jsou kolize zpracovávány pro jeden pár těl najednou a místo pouhého pohybu \(\vec(p)\) , budete muset přesunout \(\vec(p)\) a \(\vec (q)\) vůči sobě.

A opět po úpravě poloh částic, aby nedocházelo k vzájemnému pronikání těles, je třeba se postarat o splnění dalších šesti omezení – neměnnosti vzdáleností mezi částicemi, které tvoří pevné těleso. Pomocí této metody lze čtyřstěn dokonce vnořit do jiného objektu, což je při řešení kolizí výhodnější použít místo samotného čtyřstěnu. Obrázek 6 ukazuje čtyřstěn umístěný v krychli.

Nejprve musí být krychle nějakým způsobem připojena k čtyřstěnu. Jedním z přístupů je zvolit těžiště čtyřstěnu jako střed krychle \(0,25\cdot (\vec(x)_1 + \vec(x)_2 + \vec(x)_3 + \vec(x)_4)\) a poté pomocí aktuálních souřadnic čtyřstěnu vypočítejte souřadnice vrcholů krychle. Když je detekována kolize, kontaktní bod \(\vec(p)\) (který je nyní umístěn na krychli) je zpracován stejným způsobem jako výše. Aktualizované souřadnice částic se vypočítají stejným způsobem. Pro urychlení výpočtů můžete předem vypočítat koeficienty \(c_1\) -\(c_4\) pro všechny vrcholy krychle. Pokud je \(\vec(p)\) vertex, pak hodnoty \(c_1\) -\(c_4\) lze najít a použít přímo. Jinak leží \(\vec(p)\) uvnitř trojúhelníku nebo na jedné z jeho stran a hodnoty \(c_1\)-\(c_4\) lze získat z předem vypočítaných hodnot vrcholy trojúhelníku pomocí interpolace.

Ke zvládnutí kolizí zpravidla stačí 3-4 iterace. Pokud je relaxace zastavena příliš brzy, tělesa se nebudou chovat jako zcela pevná. Ale to je dokonce dobře, protože absolutně pevná tělesa v přírodě neexistují. Navíc to dělá systém stabilnější.

Při přeskupování poloh částic, které tvoří čtyřstěn, je třeba odpovídajícím způsobem změnit fyzikální vlastnosti tělesa (matematicky to znamená, že se v závislosti na polohách a hmotnostech částic mění tenzor setrvačnosti tělesa).

Na stejném principu jako u čtyřstěnu můžete nastavit další podobnou konfiguraci částic a vazeb umístěním částic do bodů se souřadnicemi \((0,0,0)\), \((1,0,0)\), \( (0,1,0)\) a \((0,0,1)\) . Nechť \(\vec(a)\) , \(\vec(b)\) a \(\vec(c)\) jsou vektory směřující od částice 1 k částicím 2, 3 a 4, v tomto pořadí. Pozice částic omezíme požadavkem, aby vektory \(\vec(a)\) , \(\vec(b)\) a \(\vec(c)\) měly jednotkovou délku a úhel mezi každým ze tří párů vektorů byl roven \(90^\circ\) (odpovídající skalární součin musí být roven nule). Všimněte si, že to opět, stejně jako u čtyřstěnu, poskytne 4 částice a 6 vazeb.

Kloubová těla

Nyní můžeme spojit několik tuhých těles pomocí závěsů (válcového, kulového atd.). Za předpokladu, že dvě tělesa mají jednu společnou částici, dostaneme kulový závěs (čepový kloub), a pokud jsou dvě částice společné, pak dostaneme válcový závěs (závěs) (obr. 7). Stejným způsobem můžete spojit dvě těla pomocí tyče nebo jakéhokoli jiného typu spojení - stačí si pamatovat přidat kód, abyste zvládli nový typ spojení v relaxační smyčce.

Tento přístup nám umožňuje sestavit kompletní model kloubového lidského těla. Realismus se zvýší, pokud dodatečně zavedete omezení úhlových pohybů v pantech. Existuje několik způsobů, jak taková omezení implementovat. Nejjednodušší metoda zahrnuje použití omezení typu tyče, které se spustí pouze tehdy, když vzdálenost mezi dvěma částicemi klesne pod určitou prahovou hodnotu (v tomto případě máme co do činění s jednosměrným spojením tvaru \(|\vec(x)_2 - \vec(x)_1| > 100\)). V důsledku toho se obě částice nikdy nemohou dostat příliš blízko k sobě (obr. 8).

Jiný způsob vytváření omezení úhlových pohybů vyžaduje pro bodový součin splněnou následující podmínku:

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

Můžete také omezit pohyb částice na určitou rovinu. Opět platí, že polohy částic, které nesplňují daná omezení, musí být opraveny. To se provádí podobně jako v případě tyče, i když odpovídající vzorce budou trochu složitější.

| Modelování v tabulkách

Lekce 17 - 18
Modelování v tabulkách

Simulace pohybu těla pod vlivem gravitace

Příklady pohybu pod vlivem gravitace jsou dobře známé. Jedná se o pád tělesa z určité výšky a pohyb tělesa vrženého vzhůru určitou rychlostí a pohyb tělesa vrženého pod úhlem k horizontu. Pokud se v takových problémech nebere v úvahu síla odporu vzduchu, pak jsou všechny uvedené typy pohybu popsány známými vzorci. Neméně zajímavé jsou ale problémy, při kterých se počítá s odporem vzduchu.

PROBLÉM 3.24. Zasáhnout cíl

Fáze I. Formulace problému

POPIS ÚKOLU

Kluci hrají badminton. Poryv větru zvedl míček a odnesl ho na větve stromu. Těžkým úkolem je získat míček. Problém lze vyřešit několika způsoby. Každá metoda má své pro a proti.

Můžete například vylézt na strom. To je ale velmi nebezpečná činnost: čím vyšší jsou větve stromů, tím jsou tenčí. Je zde vysoká pravděpodobnost pádu. Můžete pokácet strom. Ale zdá se, že tento způsob řešení problému ještě nikdo nezkusil. Pokud by každý zvolil tento způsob řešení problému, pak by už dávno nezůstal jediný strom. Můžete počkat, až míček sám spadne, zachycený dalším poryvem větru. Nejčastěji se snaží pérák srazit kamenem. Tento model chování zvolíme i my. Navíc známe zákony pohybu těles.

ÚČEL SIMULACE

Zkoumejte pohyb tělesa vrženého pod úhlem k horizontále. Vyberte počáteční hodnoty rychlosti a úhlu hodu tak, aby vržené tělo zasáhlo cíl.

FORMALIZACE PROBLÉMU

Poznámka. Chcete-li nastavit přesnost zásahu , musíte vzít v úvahu velikost těla.

Přesnost zásahu by neměla být větší než polovina nejmenší geometrické velikosti těla.

Pokud je tedy cílem například míček o průměru přibližně 7 cm, pak = 3,5 cm Pokud je cílem basketbalový koš o průměru 40 cm, tak = 20 cm Pokud je cílem balón vysoký 5 m, pak = 2,5 m.

Etapa II. Vývoj modelu

INFORMAČNÍ MODEL

Charakteristiky objektů a procesu uvádíme ve formě tabulky.

Parametry pohybu těla jsou uvedeny na obrázku 3.4. Pohyb tělesa vrženého pod úhlem k horizontále je popsán pomocí vzorců


POČÍTAČOVÝ MODEL

Pro modelování zvolíme prostředí tabulkového procesoru. V tomto prostředí jsou tabulkové informace a matematické modely kombinovány do tabulky, která obsahuje tři oblasti:

♦ počáteční údaje;
♦ průběžné výpočty;
♦ výsledky.

1. Vyplňte oblast zdrojových dat podle ukázky.

Sloupce A B C D E F vyplňte shora dolů podobnými vzorci.

2. Vyplňte oblast mezivýpočtů a výsledků.


EXPERIMENTÁLNÍ PLÁN

TESTOVÁNÍ

EXPERIMENT 1

Prozkoumejte pohyb těla.

EXPERIMENT 2

Zkoumejte změnu pohybu tělesa při změně počáteční rychlosti.

EXPERIMENT 3

Zkoumejte změnu pohybu těla při změně úhlu odhozu.

EXPERIMENT 4

Změnou počáteční rychlosti a úhlu hodu prozkoumejte povahu pohybu těla a jeho polohu vzhledem k cíli.

EXPERIMENT 5

Změnou počáteční počáteční rychlosti a úhlu vyberte hodnoty tak, aby vržené tělo zasáhlo cíl se zadanou přesností.

PROVÁDĚNÍ VÝZKUMU

TESTOVÁNÍ

1. Vyplňte tolik řádků výpočtové tabulky, kolik je souřadnic na nebude menší než nula.

2. Porovnejte výsledky zkušebního výpočtu s výsledky uvedenými v příkladu výpočtu. Níže uvedená tabulka ukazuje několik řádků s výsledky výpočtů na základě uvedených výchozích dat.

3. Pomocí sloupců B a C sestavte pohybový diagram. Příklad je na obrázku 3.6. Chcete-li sestavit diagram, vezměte tolik vypočítaných hodnot, aby křivka protínala vodorovnou osu X .

4. Jak určit, kolik výpočtových bodů je třeba vzít k sestavení diagramu?

Závěr. Chcete-li vytvořit diagram, musíte vzít vypočítané hodnoty, jejichž souřadnice y větší než 0 a jedna záporná hodnota.

EXPERIMENT 1. Studium pohybu těla

1. Pomocí diagramu testovacího případu popište, jak se těleso pohybuje.

2. Vysvětlete, jak z diagramu určit bod nejvyšší nadmořské výšky tělesa.

3. Vysvětlete, co na diagramu představuje průsečík křivky s vodorovnou osou x. Jak určit tento bod pomocí kalkulační tabulky?

4. Určete z nákresu, v jaké vzdálenosti od bodu vrhu těleso dopadne na zem.

5. Z výpočtové tabulky určete:

Maximální výška zdvihu;
doba cesty do nejvyššího bodu;
vzdálenost od bodu vrhu k bodu dopadu na zem;
čas pohybu před pádem.

Do volné oblasti tabulky zapište výsledky studie pohybu těla podle navrženého vzoru.

6. Zadejte jinou verzi počátečních dat, vyplňte pro ně tabulku výsledků experimentu.

EXPERIMENT 2. Závislost pohybu tělesa na počáteční rychlosti (úhel hodu nezměněn)

1. Změnou počáteční rychlosti od 5 do 20 m/s sledujte, jak se mění maximální výška zdvihu (y souřadnice)

2. Pozorujte, jak se mění dosah letu (souřadnice x) s rostoucí počáteční rychlostí.

3. Proveďte výpočty pro určitý úhel a shrňte výsledky výzkumu do tabulky (tabulka 2), sestavené na volném poli tabulky.

4. Závěry na základě výsledků experimentu zapište do tabulky: jak se změní výška a dolet při změně počáteční rychlosti (při konstantním úhlu vrhu)?


EXPERIMENT 3. Závislost pohybu těla na úhlu odhozu (počáteční rychlost pohybu se nemění)

1. Proveďte výpočty pomocí modelu, zvyšte úhel vrhání z 5° na 85° a ponechte počáteční rychlost nezměněnou (např. 15 m/s).

2. Sledujte změnu výšky zdvihu (y souřadnice) jak se úhel odhozu zvyšuje, počáteční rychlost zůstává nezměněna.

3. Sledujte změnu letového dosahu (souřadnice x) jak se úhel odhozu zvětšuje.

4. Výsledky výpočtů zaznamenejte do volného pole tabulky (tabulka 3).

5. Závěry na základě výsledků pokusu zapište do tabulky: jak se změní výška a dolet letu při změně úhlu vrhu (při konstantní počáteční rychlosti)?

EXPERIMENT 4. Studium charakteru pohybu těla a jeho polohy vzhledem k cíli

Obrázek 3.7 ukazuje možnosti umístění křivky pohybu těla vzhledem k cíli. Lze je charakterizovat následovně:

1. Při pohybu tělo nedosáhne výšky, ve které se nachází cíl a padá na zem, aniž by dosáhlo X ts .

2. Při pohybu tělo nedosáhne výšky, ve které se nachází cíl, ale padá dále k zemi X c.

3. Tělo se při pohybu zvedá výš Y c, ale spadne na zem, aniž by dosáhl X c.

4. Tělo se při pohybu zvedá výš Y c a padá dále k zemi X c.

Ve sloupcích D, E a F hodnoty se počítají S x, Sy, S, které ukazují polohu těla vzhledem k cíli.

1. Zkoumejte, co znak znamená S x a S y v různých okamžicích.

Závěr.

2. Prozkoumejte, jak se mění S když se tělo pohybuje.

Závěr. Celková vzdálenost k cíli se nejprve snižuje a poté zvyšuje.

3. Ve volném poli tabulky (tabulka 4) vyberte počáteční data (počáteční rychlost a úhel vrhu), odpovídající možnostem pohybu těla uvedeným na obrázku 3.7.


EXPERIMENT 5. Výběr počátečních hodnot pro zasažení cíle

Nejprve si všimneme, že existuje nekonečné množství možností, jak počáteční data zasáhnout cíl. Naším úkolem je vybrat jednu možnost.

1. Podle sloupce F určit nejmenší hodnotu S. V tomto okamžiku tělo letí nejblíže k cíli.

2. Nakreslete sloupec G analýza hitů. Budeme předpokládat, že tělo zasáhlo cíl, pokud se vzdálenost od cíle zmenší než zadaná přesnost (buňka $D$10). K tomu v cele G16 zadejte vzorec =IF(F16<$D$10; «попал»; «мимо») .

3. Změňte vstupní data, abyste získali co nejlepší přiblížení k cíli.

4. Výsledky výzkumu zapište na volné pole tabulky (tabulka 5).

5. Vyberte další sadu počátečních dat, ve kterých těleso zasáhne cílový „převis“, tedy po projetí nejvyššího bodu stoupání.

6. Změňte cílové souřadnice a vyberte hodnoty počáteční rychlosti a úhlu vrhání pro novou cílovou pozici.

Výsledky a závěry získané v experimentech prezentujte formou zprávy v textovém dokumentu. Ve své zprávě uveďte odpovědi na následující otázky:

1. Jak se pohybuje těleso vržené pod úhlem k horizontále?
2. Jak určit nejvyšší bod stoupání?
3. Jak určit dosah letu?
4. Jak se změní maximální výška zdvihu se zvýšením počáteční rychlosti a konstantním úhlem odhozu?
5. Jak se změní dosah letu se zvýšením počáteční rychlosti a konstantním úhlem vrhu?
6. Jak se mění maximální výška zdvihu s rostoucím úhlem odhozu a konstantní počáteční rychlostí?
7. Jak se mění dosah letu s rostoucím úhlem vrhu a konstantní počáteční rychlostí?
8. Jak můžeme vypočítat polohu těla vzhledem k cíli v každém časovém okamžiku? Jak to lze zjistit z kalkulační tabulky?
9. Jak se během pohybu mění vzdálenost od těla k cíli a jak to lze určit pomocí výpočtové tabulky?

PROBLÉM 3.25*. Parašutistické hnutí

*Pokročilá výzva

Fáze I. Formulace problému

POPIS ÚKOLU

Když parašutista spadne na zem, zažije sílu gravitace a odporu vzduchu. Experimentálně bylo zjištěno, že odporová síla závisí na rychlosti pohybu: čím větší rychlost, tím větší síla. Při pohybu ve vzduchu je tato síla úměrná druhé mocnině rychlosti s určitým koeficientem odporu vzduchu k, která závisí na konstrukci padáku a hmotnosti osoby R odpor = kV 2 .Jaká by měla být hodnota tohoto koeficientu, aby parašutista přistál na zemi v rychlosti ne více než 8 m/s který nepředstavuje zdravotní riziko?

Určete cíle modelování a formalizujte problém.

Etapa II. Vývoj modelu

INFORMAČNÍ MODEL

Vytvořte si sami informační model.

MATEMATICKÝ MODEL

Obrázek 3.8 ukazuje síly působící na parašutistu. Podle druhého Newtonova zákona lze pohyb pod vlivem sil zapsat jako rovnost. Tuto rovnost promítneme na osu pohybu a dosadíme výraz za odporovou sílu vzduchu ma = mg - kV 2 .

Vezměme si vzorec pro výpočet zrychlení

Budeme počítat rychlost a vzdálenost, kterou parašutista v pravidelných intervalech uletěl △t. Vzorec pro výpočet momentů v čase je: t i+1 +t i + △t. 

Kde PROTI i- rychlost na začátku intervalu ( PROTI Ó- startovací rychlost). Rychlost na konci intervalu (a tedy na začátku dalšího) se vypočítá pomocí vzorce pro rovnoměrně zrychlený pohyb

Vzdálenost, kterou parašutista uletěl, se rovná součtu ujeté vzdálenosti na začátku dalšího časového úseku ( S i) a vzdálenost ujetá za tento interval:


POČÍTAČOVÝ MODEL

Pro modelování zvolíme prostředí tabulkového procesoru. V tomto prostředí jsou informační a matematické modely spojeny do tabulky, která obsahuje tři oblasti:

♦ počáteční údaje;
♦ průběžné výpočty;
♦ výsledky.

1. Vyplňte oblast zdrojových dat.

2. Vyplňte vypočítané sloupce ABECEDA, ve kterém se počítají parametry pohybu parašutisty:

Čas;
Rychlost;
vzdálenost;
akcelerace.

3. Zadejte vzorce do buněk výpočtu. Příklad vyplnění kalkulační tabulky:


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


EXPERIMENTÁLNÍ PLÁN

TESTOVÁNÍ

Proveďte zkušební výpočet počítačového modelu pomocí údajů uvedených v tabulce.

EXPERIMENT 1

Zkoumejte pohyb tělesa pod vlivem gravitace a odporu vzduchu.

EXPERIMENT 2

Vyberte hodnotu koeficientu odporu k pro bezpečné přistání parašutisty.

EXPERIMENT 3

Zkoumejte závislost rychlosti a zrychlení na počáteční rychlosti pohybu.

EXPERIMENT 4

Zkoumejte, jak se mění vzdálenost letu, dokud se rychlost pádu nestabilizuje.

PROVÁDĚNÍ VÝZKUMU

TESTOVÁNÍ

1. Porovnejte výsledky zkušebního výpočtu s výsledky uvedenými v příkladu výpočtu. Příklad zkušebního výpočtu:

2. Sestrojte diagram změn rychlosti, zrychlení a vzdálenosti v závislosti na čase.

EXPERIMENT 1. Studium pohybu těla s přihlédnutím k odporu vzduchu

1. Určete z diagramu a tabulky, jak se mění rychlost parašutisty v čase. Kolik sekund trvá, než se rychlost poklesu stabilizuje?

2. Určete z diagramu a tabulky, jak se mění zrychlení parašutisty v průběhu času.

3. Z diagramu a tabulky určete, jak daleko parašutista uletí, než se rychlost ustálí. Umístěte své výsledky na prázdné místo v tabulce.

4. Změňte časový krok (0,1 s) a určete rychlost stabilizace pohybu, vzdálenost letu ke stabilizaci. Výsledky studie jsou uvedeny v tabulce.

EXPERIMENT 2. Volba součinitele odporu

Změnou hodnoty koeficientu k (buňka SZ), zvolte rychlost stabilizace pohybu, která je bezpečná pro přistání trénované osoby (8 m/s).

EXPERIMENT 3. Studie stabilizace rychlosti a vzdálenosti v závislosti na počáteční rychlosti

Parašutista, který vyskočil z letadla, nějakou dobu létá volným pádem, nabere dostatečně vysokou rychlost a teprve poté otevře padák.

1. Změňte počáteční hodnotu rychlosti (10 m/s).

2. Pomocí výpočtové tabulky určete, jak se změní následující:

Počáteční zrychlení;
rychlost stabilizace;
vzdálenost letu, dokud se rychlost nestabilizuje.

3. Výsledky pokusu zapište na volné pole tabulky. Dojít k závěru.

Výsledky experimentu 3:

Poznámka. Všimněte si, jak se mění počáteční zrychlení. Vezměte prosím na vědomí, že nemůže být velký, protože zrychlení je větší 3 g (30 m/s2) způsobuje velmi velká přetížení.

Etapa IV. Analýza výsledků simulace

Na základě výsledků počítačového experimentu odpovězte na následující otázky:

1. Jak se mění rychlost parašutisty v průběhu času?
2. Jak se změní rychlost parašutisty, když se změní koeficient odporu?
3. Jaký by měl mít součinitel odporu, aby parašutista sestoupil k zemi rychlostí 8 m/s?
4. Jak se mění rychlost pohybu a jak závisí ustálená rychlost rovnoměrného pohybu parašutisty na počáteční rychlosti?
5. Kolik sekund po začátku pohybu lze rychlost parašutisty považovat za ustálenou?
6. V jaké výšce od země by měl parašutista otevřít padák, aby přistál danou rychlostí.

ÚKOLY PRO SAMOSTATNOU PRÁCI

3.26. Basketbalový hráč.

Pomocí sestrojeného modelu pohybu těla hozeného pod úhlem vypočítejte, jakou počáteční rychlostí a pod jakým úhlem musíte hodit basketbalový míč, abyste se dostali do obruče.

Při provádění výpočtů vezměte v úvahu následující podmínky:

Počáteční rychlost míče při hození se může měnit až do 15 m/s;
kroužkové souřadnice na = 3 m, X = 0,5 ÷ 7 m;
přesnost zásahu souvisí s průměrem prstenu a rovná se = 20 cm;
míč musí narazit na prstencový „vrchlík“, tedy po projetí nejvyššího bodu stoupání.

Upravit matematické a počítačové modely pohybu tělesa vrženého pod úhlem tak, aby se daly použít k výpočtu pohybu tělesa vrženého z určité počáteční výšky y 0

3.27. Záchrana tonoucího muže.

Jakou rychlostí a pod jakým úhlem má být ze záchranné lodi vržen kruh tonoucímu? Při provádění výpočtů vezměte v úvahu následující podmínky:


vzdálenost tonoucího od lodi;
přesnost zásahu je = 0,5 m;
úhel odhozu může být záporný;
výška boku lodi nad hladinou moře.

3.28. Akrobati.

Mnozí viděli takový akrobatický čin v cirkuse. Jeden akrobat stojí na skákacím prkně na jedné straně, druhý skáče na druhém konci. Jakou počáteční rychlostí a pod jakým úhlem by měl první akrobat vzlétnout, aby dopadl přesně na ramena třetího účastníka aktu? Při provádění výpočtů vezměte v úvahu následující podmínky:

Počáteční rychlost se může měnit až do 10 m/s;
výška a odstranění třetího akrobata;
přesnost zásahu je = 0,1 m.

Pokračujeme v sérii článků o automatizaci provádění akrobatických manévrů na malých dronech. Tento článek má především vzdělávací účel: zde si ukážeme, jak lze vytvořit jednoduchý automatický řídicí systém (ACS) na příkladu úlohy provedení „sudového“ akrobatického manévru při řízení letadla pouze pomocí křidélek. Článek je druhým ze série publikací „Aerobatické UAV“, která cvičnou formou pojednává o procesu budování hardwarových a softwarových částí samohybných děl.

Úvod

Rozhodli jsme se tedy implementovat „barel“ v automatickém režimu. Je zřejmé, že k automatickému provedení figury je nutné formulovat příslušný kontrolní zákon. Proces vymýšlení bude mnohem bezbolestný a rychlejší, pokud použijete matematický model pohybu letadla. Testování zákona kontroly v letovém experimentu, i když je to možné, vyžaduje mnohem více času a může být také mnohem dražší v případě ztráty nebo poškození zařízení.

Vzhledem k tomu, že při malých úhlech náběhu a klouzání letadla jeho pohyb naklánění prakticky nesouvisí s pohybem v ostatních dvou kanálech: dráhovém a podélném - k provedení jednoduchého „sudu“ bude stačit postavit model pohybu pouze kolem jedna osa - osa ACH přidružené SC. Ze stejného důvodu se výrazně nezmění zákon o ovládání křidélek, pokud jde o vytvoření kompletního systému řízení.

Pohybový model

Rovnice pohybu letadla kolem podélné osy ACH související SC je velmi jednoduchý:

Kde je moment setrvačnosti kolem osy ACH a moment se skládá z několika komponent, z nichž pro realistický popis pohybu našeho letadla stačí uvažovat pouze dva:

Kde je moment způsobený rotací letadla kolem své osy ACH(tlumící moment), - moment způsobený výchylkou křidélek (řídicí moment). Poslední výraz je zapsán v linearizované podobě: klopný moment lineárně závisí na úhlové rychlosti a úhlu vychýlení křidélek s konstantními koeficienty úměrnosti, resp.

Jak je známo (např. z Wiki), lineární diferenciální rovnice

Odpovídá aperiodickému spojení prvního řádu

Kde je přenosová funkce, je derivační operátor, je časová konstanta a je zisk.

Jak přejít od diferenciální rovnice k přenosové funkci?

V našem případě můžeme přejít od parametrů rovnice k parametrům přenosové funkce následovně (s vědomím, že derivace je záporná):




U aperiodického spojení je časová konstanta rovna době, během které výstupní hodnota při jediném postupném působení vstupní hodnoty nabude hodnoty, která se liší od hodnoty v ustáleném stavu o ~5 %, a faktoru zesílení je číselně rovna ustálené hodnotě výstupní hodnoty při jediné krokové akci:


Ve zkonstruovaném modelu pohybu jsou dva neznámé parametry: zisk a časová konstanta. Tyto parametry jsou vyjádřeny prostřednictvím charakteristik fyzikálního systému: moment setrvačnosti, stejně jako derivace valivého momentu a:

Pokud je tedy znám moment setrvačnosti, pak po určení parametrů modelu je možné z nich obnovit systémové parametry.

Parametry modelu. Moment setrvačnosti

Naše letadlo se skládá z těchto částí: křídlo, trup s ocasem, motor, baterie (baterie) a avionika:

Avionika zahrnuje: desku autopilota, desku přijímače SNS, desku rádiového modemu, desku přijímače signálu z řídicího zařízení, dva regulátory napětí, regulátor otáček motoru a propojovací vodiče.

Vzhledem k nízké hmotnosti avioniky lze její podíl na celkovém momentu setrvačnosti zanedbat.

Jak byla hodnocena velikost momentu setrvačnosti?

Moment setrvačnosti lze odhadnout následovně. Podívejme se na rovinu podél její osy ACH:

A poté jej uvádíme ve formě následujícího zjednodušeného modelu:


Schéma pro výpočet momentu setrvačnosti. Vlevo nahoře je baterie, vpravo dole je motor. Motor a baterie jsou umístěny na ose trupu

Je vidět, že pro vytvoření modelu byly vyřazeny: kýl, horizontální ocas, vrtule a avionika. Přitom zůstalo: trup, křídlo, baterie, motor. Změřením hmotností a charakteristických rozměrů každé části je možné vypočítat momenty setrvačnosti každé části vzhledem k podélné ose trupu:


Celková hodnota momentu setrvačnosti letadla vzhledem k ose ACH sečtením momentů setrvačnosti dílů získáme:

Po posouzení příspěvku každé části letadla k celkovému momentu setrvačnosti bylo získáno následující:

  • křídlo - 96,3 %,
  • trup - 1,6%,
  • motor a baterie - 2%,
Je vidět, že hlavní podíl na celkovém momentu setrvačnosti má křídlo. To je způsobeno skutečností, že křídlo má poměrně velkou příčnou velikost (rozpětí křídel - 1 m):

Proto má křídlo i přes svou skromnou hmotnost (asi 20 % celkové vzletové hmotnosti letadla) významný moment setrvačnosti.

Parametry modelu. Derivace valivého momentu a

Výpočet derivací klopného momentu je poměrně obtížný úkol spojený s výpočtem aerodynamických charakteristik letadla pomocí numerických metod nebo pomocí inženýrských technik. Použití prvního a druhého vyžaduje značné časové, intelektuální a výpočetní náklady, které jsou opodstatněné při vývoji řídicích systémů pro velká letadla, kde náklady na chybu stále převyšují náklady na stavbu dobrého modelu. Pro úlohu řízení UAV, jehož hmotnost nepřesahuje 2 kg, je tento přístup stěží opodstatněný. Dalším způsobem, jak vypočítat tyto derivace, je letový experiment. S ohledem na nízkou cenu našeho letounu a také blízkost vhodného pole pro provedení takového experimentu pro nás byla volba jasná.

Po napsání firmwaru pro ruční ovládání a záznam parametrů do autopilota jsme letoun sestavili a připravili k testování:

V letovém experimentu se podařilo získat údaje o úhlu vychýlení křidélek a úhlové rychlosti otáčení letounu. Pilot řídil letoun ručně, prováděl kruhy, zatáčky a výkruty a palubní zařízení zaznamenávalo a odesílalo potřebné informace na pozemní stanici. V důsledku toho byly získány potřebné závislosti: (stupně/s) a (b/r). Hodnota představuje normalizovaný úhel výchylky křidélek: hodnota 1 odpovídá maximální výchylce a hodnota −1 odpovídá minimu:

Jak můžeme nyní ze získaných dat určit? Odpovědí je měření parametrů přechodového procesu pomocí grafů a .

Jak byly určeny koeficienty k a T?

Zisk byl určen vztahem hodnoty úhlové rychlosti v ustáleném stavu k hodnotě výchylky křidélek:


Závislosti úhlu výchylky křidélek a úhlové rychlosti náklonu na čase, získané v letovém experimentu

Na předchozím obrázku úseky ustálené hodnoty úhlové rychlosti přibližně odpovídají např. úsekům blízkým časům 422, 425 a 438 s (na obrázku vyznačeny tmavě červeně).
Ze stejných grafů byla určena časová konstanta. K tomu byly nalezeny oblasti ostrých změn úhlu vychýlení křidélek a následně byla změřena doba, během které úhlová rychlost nabyla hodnoty, která se lišila od ustálené hodnoty o 5 %.


Výsledek určení hodnot časové konstanty a zesílení je následující: , . Tyto hodnoty koeficientů se známou hodnotou momentu setrvačnosti odpovídají následujícím hodnotám derivací valivého momentu:

Verifikace modelu

Po sestavení modelu založeného na aperiodickém spojení

Lze to ověřit přivedením signálu získaného z letového experimentu na vstup a porovnáním výstupního signálu modelu s hodnotou rovněž získanou v experimentu.

Jak simulace probíhala?

Nástroj pro provádění simulace jsme zvolili především na základě možnosti opakování výsledků širokému okruhu čtenářů: to především znamená, že program by měl být ve veřejné doméně. V zásadě lze problém modelování chování aperiodického spoje prvního řádu vyřešit vytvořením vlastního nástroje od začátku. Ale vzhledem k tomu, že model bude v budoucnu složitější, může vytvoření vlastního nástroje odvést pozornost od hlavního úkolu – vytváření samohybných řídicích systémů pro akrobatické drony. S přihlédnutím k principu otevřenosti nástroje jsme zvolili JSBsim.

V předchozí části jsme získali hodnoty koeficientů a . Používáme je k simulaci pohybu letadla. Z předchozího článku si pamatujeme, že konfigurace modelu letadla v JSBsim je specifikováno pomocí XML soubor. Vytvořme 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 rychlosti/p-aero-rad_sec -0.24 Roll_moment_due_to_aileron fcs/aileron-cmd-norm 2.4 Rychlosti/vc-kts Aero/alphadot-deg_sec Aero/betadot-deg_sec Fcs/throttle-cmd-norm VYPNUTO VYPNUTO VYPNUTO NA NA NA VYPNUTO VYPNUTO NA VYPNUTO VYPNUTO NA VYPNUTO
Vzhledem k tomu, že model pohybu vozidla vytváříme pouze v pohybu, ponecháme mnoho částí souboru prázdných. Následující charakteristiky jsou postupně specifikovány v souboru modelu.

Geometrické rozměry letadla jsou specifikována v části metriky: plocha křídla, rozpětí, střední aerodynamická délka tětivy, horizontální ocasní plocha, horizontální ocasní rameno, vertikální ocasní plocha, vertikální ocasní rameno, aerodynamická poloha zaostření.

Hmotnostní charakteristiky letadla jsou specifikována v části hmotnostní bilance: tenzor setrvačnosti letadla, hmotnost prázdného letadla, poloha těžiště.

Za zmínku stojí, že absolutní polohy aerodynamického ohniska a těžiště letadla se při výpočtu dynamiky vozidla nepodílejí, důležitá je jejich relativní poloha.
Poté následují části popisující vlastnosti podvozku letadla a jeho pohonné jednotky.

V další části zodpovídá za kontrolní systém, pojďme vyplnit kanál zodpovědný za ovládání rolování: označte jediný vstup fcs/aileron-cmd-norm, jehož hodnota bude normalizována od -1 do 1.

Aerodynamické vlastnosti jsou uvedeny v sekci aerodynamika: síly jsou uvedeny v souřadnicovém systému rychlosti, momenty - v souvisejícím. Zajímá nás moment rotace. V sekci axis name="ROLL" jsou specifikovány funkce, které určují moment sil z různých složek průmětu momentu aerodynamických sil na osu VŮL přidružený souřadnicový systém. V našem modelu jsou takové komponenty dvě. První složkou je tlumicí moment, který je roven součinu úhlové rychlosti a dříve stanoveného koeficientu. Druhou složkou je moment od křidélek při pevné rychlosti letu: rovná se součinu dříve stanoveného koeficientu velikosti výchylky křidélek.

Stojí za zmínku, že při stanovení koeficientu byla použita rozměrová hodnota. V našich letových datech byla úhlová rychlost měřena ve stupních za sekundu, zatímco v JSBSim se používají radiány za sekundu, takže koeficient je třeba snížit na rozměr, který potřebujeme, to znamená vydělit 180 stupňů a vynásobit radiány. Tyto složky momentu aerodynamických sil zapisujeme uvnitř funkcí součinu produkt. Při modelování se sečte výsledek provedení všech funkcí a získá se hodnota průmětu aerodynamického momentu na odpovídající osu.

Vytvořený model lze ověřit pomocí experimentálních dat získaných při letových zkouškách. Chcete-li to provést, vytvořte skript s následujícím obsahem:
sim-time-sec ge 0,0 Poskytněte vstup časové historie pro křidélko sim-time-sec ge 0

sim-čas-s 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 tečky označují chybějící údaje. V souboru skriptu, který známe z předchozího článku, se objevil nový typ události ( "Časové upozornění"), který umožňuje určit plynulou změnu parametru v průběhu času. Závislost parametru na čase je určena tabulkovou funkcí. JSBSim Lineárně interpoluje hodnotu funkce mezi tabulkovými daty. Postup ověření modelu rolovacího pohybu spočívá ve spuštění tohoto skriptu na vytvořeném modelu a porovnání výsledků s experimentálními.


Výsledek ověření je znázorněn na obrázku:


Jak je vidět z obrázku, shoda mezi modelem a realitou je o něco méně než úplná.

Řídící syntéza pro provedení „sudu“

Po obdržení modelu je snadné určit, o jaké množství a jak dlouho je nutné vychýlit křidélka, aby bylo možné provést náklon. Jednou z možností je následující algoritmus odmítnutí:



Přítomnost segmentů trvajících 0,1 s na začátku a na konci algoritmu vychylování křidélek simuluje setrvačnost servopohonu, který nedokáže vychýlit plochy okamžitě. Model ukazuje, že s takovým zákonem výchylky křidélek musí letadlo provést jednu celou otáčku kolem své osy ACH, zkontrolujeme?

Letový experiment

Výsledný zákon řízení křidélek byl naprogramován do autopilota instalovaného v letadle. Myšlenka experimentu je jednoduchá: vezměte letadlo do horizontálního letu a poté použijte výsledný zákon řízení. Pokud skutečný rolovací pohyb letadla odpovídá vytvořenému modelu, pak letadlo musí provést „valení sudu“ – jednu plnou rotaci o 360 stupňů.

Zvláště děkujeme našemu věrnému pilotovi za jeho práci, profesionalitu a pohodlný kufr na jeho kombi Priore!

Během experimentu se ukázalo, že model náklonu byl zkonstruován úspěšně - letadlo vykonávalo jednu „hlaveň“ za druhou, jakmile pilot aktivoval naprogramovaný zákon řízení. Následující obrázek ukazuje úhlovou rychlost zaznamenanou během experimentu a získanou z výsledků simulace, stejně jako úhel náklonu a sklonu z letového experimentu:


A následující obrázek ukazuje signály zaznamenané v letovém experimentu pro křidélka, výškovku (ER) a směrovku (RU):


Svislé čáry označují okamžiky začátku a konce provedení „sudu“. Z obrázků je zřejmé, že při „přetáčení hlavně“ pilot nezasahuje do ovládání výškovky a směrovky, je také zřejmé, že úhel sklonu má při „přetáčení hlavně“ tendenci neustále klesat – letadlo je taženo do ponoru, jak bylo předpovězeno z výsledků simulace na leteckém simulátoru (viz článek „Akrobatické UAV. Jak správně vytočit sud“). Pokud pozorně prozkoumáte předchozí grafy, uvidíte, že třetí „hlaveň“ nebyla ani dokončena, protože pilot zasáhl do řízení, aby vyvedl letadlo ze střemhlavého letu: úhel sklonu se při provádění „hlavně“ tolik mění. pouze s křidélky.

Poznámky

závěry

Jako výsledek provedené práce jsme ukázali jeden ze způsobů, jak vytvořit model pohybu UAV založený na úhlové rychlosti. V letovém experimentu bylo prokázáno, že vytvořený pohybový model plně odpovídá simulovanému objektu. Na základě vyvinutého modelu byl získán zákon o řízení programu, který umožňuje provádět „hlaveň“ v automatickém režimu. Ujistili jsme se také, že správný „výval“ nebude možné provést pouze pomocí křidélek a také jsme to názorně předvedli.

Další fází bude zpřesnění zákona o řízení přidáním zpětné vazby a také zařazení výtahu do řízení. To bude vyžadovat vytvoření modelu podélného pohybu našeho letadla. Na základě výsledků práce bude vydána další publikace.

Řekněme, že jedete na kole a najednou vás někdo strčí ze strany. Abyste rychle získali rovnováhu a vyhnuli se pádu, otočte řídítka kola ve směru tlaku. Cyklisté to dělají reflexivně, ale je úžasné, že kolo tuto akci zvládne samo. Moderní jízdní kola dokážou samostatně udržovat rovnováhu i při pohybu bez kontroly. Podívejme se, jak lze tento efekt modelovat v COMSOL Multiphysics.

Co víme o samovyvažovacích kolech?

Moderní jízdní kolo se příliš neliší od bezpečné kolo- jeden z prvních návrhů, který se objevil v 80. letech 19. století. O více než sto let později se vědci stále snaží přijít na to, jaké účinky způsobují, že se kolo samo vyrovnává. Jinými slovy, jak kolo, které není pod kontrolou, zůstane vyvážené, když je vzpřímené? Mnoho publikovaných prací bylo věnováno popisu pohybu jízdního kola pomocí analytických rovnic. Jednou z prvních důležitých publikací na toto téma byla práce Francise Whippla, ve které odvodil obecné nelineární rovnice pro dynamiku jízdního kola řízeného cyklistou bez použití rukou.

Všeobecně se uznává, že stabilitu jízdního kola zajišťují dva faktory – gyroskopická precese předního kola a stabilizační účinek podélný sklon osy otáčení kola. Nedávno tým výzkumníků z Delft a Cornell (viz) publikoval komplexní přehled linearizovaných pohybových rovnic pro model kola Whipple. Své výsledky použili k demonstraci samovyvažovacího jízdního kola. Jejich výzkum ukazuje, že pro tento jev neexistuje jednoduché vysvětlení. Kombinace faktorů, včetně gyroskopických a stabilizačních efektů, geometrie jízdního kola, rychlosti a rozložení hmoty, umožňuje neřízenému jízdnímu kolu zůstat vzpřímeně.

Inspirováni touto prací jsme vytvořili dynamický model vícetělového systému, který demonstruje samovyvažovací pohyb jízdního kola ovládaného hands-free cyklistou.

Poloha kola v různých časech.

Vícetělový model jízdního kola

Aby bylo zajištěno čisté odvalování kola a omezení prokluzu kola ve třech směrech, potřebujeme tři okrajové podmínky.


Model kola ukazující směry, ve kterých je pohyb omezen.

Platí následující omezení: Žádný skluz:

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

Žádné boční sklouznutí:

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

Žádné prokluzování kolmo k povrchu kontaktu se zemí:

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

kde \bold(e)_(2) , \bold(e)_(3) a \bold(e)_(4) jsou okamžitý směr (nakloněná osa), příčný směr (osa rotace) a kolmá k kontaktní plocha (\bold(e)_(4)=\bold(e)_(2) \times\bold(e)_(3)), respektive;

\frac(d\bold(u))(dt) — rychlost překladu; r je poloměr kola; \frac(d\bold(\theta)_(s))(dt) — úhlová rychlost rotace; \frac(d\bold(\theta)_(l))(dt) je úhlová šikmá rychlost.

Protože není možné aplikovat tyto okrajové podmínky na rychlost, jsou diskretizovány v čase a uloženy následovně:

(\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) jsou vektor posunutí, rotace a úhel náklonu v předchozím čase.

V diskrétních okrajových podmínkách, které zajišťují absenci prokluzu, se použije výsledek výpočtu polohy kola v předchozím časovém kroku. Pevná poloha těla, rotace a okamžité polohy os v předchozím časovém kroku jsou uloženy pomocí globálních rovnic a uzlu Předchozí řešení v nestacionárním řešiteli.

Simulace pohybu samovyvažovacího jízdního kola

Pro rozbor jsme zvolili jízdní kolo s úhlem řízení 18°. Počáteční rychlost jízdního kola je 4,6 m/s. 1 sekundu po zahájení pohybu působí na jízdní kolo na velmi krátkou dobu síla 500 N. Vlivem síly se jízdní kolo vychýlí z přímé trajektorie v daném směru.

Během první sekundy se jízdní kolo pohybuje dopředu v původně určeném směru konstantní rychlostí. Boční síla pak způsobí vychýlení. Pamatujte, že cyklista nedrží ruce na řídítkách a nemůže ovládat rovnováhu jízdního kola. Co se stane dál? Můžeme si všimnout, že jakmile se kolo začne naklánět, řídítka se natočí do směru pádu. Korekce polohy řídítek v případě pádu obnoví rovnováhu jízdního kola.

Jízdní kolo pokračuje v pohybu vpřed a při pohybu se začíná naklánět opačným směrem. Tento náklon je co do velikosti menší a pohyb řízení těsně následuje náklon s mírným zpožděním. Tato levo-pravá oscilace pokračuje a nakonec slábne. Kolo se pohybuje vpřed v přísně svislé poloze a mírně zvyšuje rychlost. Vibrace volantu, úhly natočení a úhlová rychlost se postupně snižují a slábnou.

Pohyb jízdního kola po rovném povrchu při vybočení z přímého směru. Šipka ukazuje sklon kola.

Výsledky výpočtu úhlů sklonu a natočení volantu (vlevo) a relativní úhlové rychlosti (vpravo) jízdního kola.

Provedení analýzy stability

Tak jsme se naučili, že kolo se dokáže samo vyvážit. Studie ukázala, že není možné vyčlenit jediný parametr, který určuje stabilitu jízdního kola. Konstrukce kola, rozložení hmotnosti a rychlost jízdy jsou faktory, které ovlivňují stabilitu. Abychom tomuto jevu lépe porozuměli, provedli jsme další analýzy, abychom prozkoumali vliv dvou parametrů – počáteční rychlosti a sklonu osy řízení. Jako výchozí konfiguraci jsme použili výše popsaný model kola s úhlem řídítek 18° a počáteční rychlostí 4,6 m/s a provedli jsme parametrickou analýzu vlivu těchto dvou faktorů.

Různé počáteční rychlosti

Při stání nemůže jízdní kolo zůstat v přísně vzpřímené poloze. Pro vyhodnocení vlivu tohoto parametru jsme měnili rychlost pohybu od 2,6 m/s do 6,6 m/s v krocích po 1 m/s. V rozsahu 2,6–3,6 m/s se kolo příliš naklání a je nestabilní. Při rychlosti 5,6 m/s má rychlost náklonu tendenci k nule, ale samotný úhel náklonu nabývá nenulové hodnoty. Přestože je tato konfigurace stabilní, kolo se bude pohybovat v kruhu s mírným nakloněním. Při rychlosti 6,6 m/s se náklon a úhel řízení v průběhu času zvětšují, takže pohyb je nestabilní.

Nestabilní Udržitelného Nestabilní
2,6 m/s 3,6 m/s 4,6 m/s 5,6 m/s 6,6 m/s

Stabilní pouzdro odpovídá rychlosti 5,6 m/s (vlevo) a nestabilní pouzdro odpovídá rychlosti 6,6 m/s (vpravo).

Úhel řízení

Sestava řízení je velmi důležitá pro samovyvažování jízdního kola. Pokud kolo nelze ovládat (například při zaseknutých řídítkách), pak kolo nebude schopno kompenzovat náklon, takže nakonec spadne. V tomto ohledu ovlivňuje samovyvažování jízdního kola také rotace osy řízení, která řídí dráhu vidlice.

Abychom analyzovali vliv otáčení osy řízení na stabilitu jízdního kola, měnili jsme úhly řízení od 15° do 21° v krocích po 1°. Při úhlu 15° se sklon a úhel natočení v průběhu času zvětšují, což činí tuto konfiguraci nestabilní. Kolo je stabilní od 16° do 19° a nestabilní ve vyšších úhlech. Při hodnotách rotace větších než 19° kolísá sklon a úhel rotace a tyto oscilace se časem zvyšují, což vede ke ztrátě stability.

V tomto příspěvku jsme ukázali, jak simulovat pohyb neřiditelného, ​​samovyvažujícího kola pomocí modulu Multibody Dynamics v COMSOL Multiphysics. Ukázali jsme, jak implementovat omezení prokluzu na tuhé kolo pomocí rovnic, a poté jsme tato omezení zkombinovali s modelem vícetělového kola. Poté jsme analyzovali účinky počáteční rychlosti a rotace nápravy na stabilitu jízdního kola. Po vyhodnocení těchto parametrů jsme viděli, že kolo může zůstat stabilní v jedné konfiguraci a ztratit ji v jiné.

Samovyvažování jízdního kola je důsledkem řady faktorů. Prostřednictvím naší analýzy a v souladu s předchozím výzkumem jsme prokázali, že stabilita jízdního kola souvisí s jeho schopností „řídit“ ve směru naklonění.