symulacja układów fizycznych

0

Jest taki program pt. 'Working model', lub jakoś tak.
Tam można sobie ustawiać różne sprężyny, wahadła, różne dźwignie,
wielo-krążki i inne maszyny, no i tracie - opory i inne takie rzeczy z mechaniki.

Ten program potem to oblicza i to normalnie działa jakby naprawdę było zrobione - fizycznie.

No i mi chodzi o to jak to jest tam obliczane.
Pewnie z wprost z równań ruchu, i metoda numeryczne całkowania.

No, ale weźmy prosty przykład:
mamy niesymetryczne ciało sztywne i podajemy tylko przypadkową oś dookoła której to wiruje.

Będzie precesja swobodna - no i jak to obliczać?
Przecież tu praktycznie nic nie ma - jeden sztywny kloc i cześć!
Zatem jakie równania trzeba tu rozwiązywać, żeby to zasymulować realistycznie?

0

Ten kloc to akurat nie będzie aż tak wielki problem - równania Newtona-Eulera i jakaś nawet bardzo prosta metoda całkowania numerycznego, np. Eulera. Przy czym do reprezentacji orientacji stosuje się zwykle kwaterniony jednostkowe.
Ciekawiej robi się jak są zderzenia i zetknięcia między bryłami lub stałe powiązania różnego rodzaju między nimi (constraints), a szczególnie w sytuacjach wielu takich interakcji jednocześnie dla tej samej bryły. Tutaj dochodzi bardzo szeroka tematyka efektywnego wykrywania kolizji oraz reakcje na zderzenia (z uwzlędnieniem sprężystości i tarcia) i LCP - linear complementarity problem. Przykładowo klocek prostopadłościenny oparty krawędziami o podłogę i ścianę jednocześnie, gdzie potrzebne jest wyznaczenie sił na stykach - każda drobna modyfikacja siły na jednym styku (bo np. coś kładziemy na tym klocku) ma wpływ na sytuację na drugim, tarcia może nie wystarczyć itd. W zastosowaniach "rozrywkowych" chyba najbardziej owocne jest podejście z sekwencyjnymi impulsami.
Przykładowe materiały:
http://www.essentialmath.com/GDC2012/Richard_Tonge_solvingRigidBodyContacts.pdf (i inne stąd http://www.essentialmath.com/tutorial.htm)
http://erwincoumans.com/ftp/pub/test/physics/papers/IterativeDynamics.pdf
kody źródłowe bibliotek Bullet i Box2D

0
zz napisał(a):

Ten kloc to akurat nie będzie aż tak wielki problem - równania Newtona-Eulera i jakaś nawet bardzo prosta metoda całkowania numerycznego, np. Eulera. Przy czym do reprezentacji orientacji stosuje się zwykle kwaterniony jednostkowe.

Ale to jest chyba za bardzo specjalistyczna metoda, więc chyba nie nadaje się do ogólnych przypadków.
Przykładowo wprowadzam tam dowolny dodatkowy czynnik, np. opory powietrza, grawitację, czy inne ciała lub siły, i ta metoda raczej już nie nadaje się.

W przypadku punktowych mas łatwo obliczać - symulować,
a każde ciało - sztywne lub nie, można sobie podzielić na wiele fragmentów, no i plus jakieś siły pomiędzy nimi, oczywiście.

Dla brył sztywnych te części nie przesuwają się względem siebie, zatem chyba wystarczy wybrać dowolne 3 punkty, i każdy z innej osi układu wsp.,
plus środek masy, a następnie obliczać z równań położenie tych punktów w kolejnych momentach czasu - z krokiem dt.
I w przypadku 'czystej' precesji będzie to tylko obrót lokalnego układu wsp., który reprezentują te punkty, a środek masy to jego początek: (0,0,0).

A siły w bryle sztywnej to te sprężystości, i z bardzo dużym współczynnikiem sprężystości k, co chyba nietrudno zaprogramować.

Pewnie jakoś tak mszą to obliczać w 'Working modelu', bo teraz możemy bez problemu dokładać inne elementy: ciała i siły.
Sam schemat obliczeń będzie nadal dobry, jedynie trochę więcej zmiennych.

0

Ta metoda, o której pisałem, jest dość uniwersalna - można dodawać prawie dowolne siły (tarcie, opór powietrza).

Podejście z cząstkowymi masami połączonymi "sprężynkami" jest bardzo intuicyjne, ale są z nim problemy. Nie wiem, czy da się uzyskać dowolny rozkład mas (odpowiadający dowolnemu tensorowi momentu bezwładności) przy pomocy tylko trzech mas. Żeby ciało nie było jak galaretka, sprężynki muszą mieć duży współczynnik sprężystości, co oznacza, że mała zmiana położenia jednej z tych mas przekłada się na dużą zmianę siły. To powoduje, że jest to podatne na wzmacnianie błędów i niestabilność, więc trzeba bardzo zmniejszać krok czasowy symulacji. Poza tym, gdy mamy interakcje między ciałami (zderzenia), to punkty styku niekoniecznie odpowiadają wybranym masom składowym, więc pewnie trzeba dodać więcej małych mas. Przypuszczalnie ta metoda "sprężynkowa" do przybliżania brył sztywnych jest na ogół mniej efektywna obliczeniowo od metody klasycznej, ale może mieć sens, gdy celowo chce się mieć te efekty sprężystości a nawet plastyczności. Chyba np. to jest zrobione w podobny sposób.

0
zz napisał(a):

Ta metoda, o której pisałem, jest dość uniwersalna - można dodawać prawie dowolne siły (tarcie, opór powietrza).

Do symulacji żyroskopu pewnie potrzeba 6 punktów, nie trzy.

Precesja jest chyba jednoznacznie określona tylko przez momenty główne bezwładności,
zatem robimy najprościej jak można, czyli odtwarzamy te momenty: Ixx, Iyy, Izz, ustawiając po dwie masy punktowe na każdej z osi - tak symetrycznie.
Powinno wystarczyć.

Kolizje bryły musimy obliczać z oryginalnego kształtu, rzecz jasna, no ale to i tak musi być robione osobno.

Kiedyś widziałem opis schematu obliczeń używany w Working Modelu, ale nie mogę tego teraz znaleźć.
Może było to w pracach Udwadia:
http://phys.org/news11345.html

0

Odnośnie błędów obliczeń, no to ja nie widzę takiego problemu.
Pewnie wystarczy metoda rzędu 4, i dla takich typowych układów mechanicznych błędy będą poniżej precyzji double.

Tu wystarczy krok na poziomie 1/100 s, nawet dla dużych prędkości, a w takim czasie można obliczyć system nawet z tysiącem zmiennych.

Mam super metodę całkowania równań Newtona z ustawianym rzędem, więc mogę sobie ustawić np. rząd 8 albo i 18 gdyby była tak potrzeba.
Robiłem to symulacji Układu Słonecznego, i błędy są tam na poziomie milimetrów dla orbit na setki lat symulacji, czyli praktycznie zerowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1