lvODE
Opis
lvODE jest zestawem tzw. wrapperów, interfejsem do napisanej w C++ biblioteki ODE (Open Dynamics Engine) służącej do symulacji dynamiki układów brył sztywnych (rigid body simulation). W obecnym stanie lvODE pozwala na wykorzystanie niemal pełnej funkcjonalności ODE w środowisku LabVIEW przy wykorzystaniu programowania zorientowanego obiektowo (LVOOP), czyli przeprowadzania symulacji fizycznych układów brył sztywnych, także interaktywnych i w czasie rzeczywistym. Symulacje takie mogą być wykorzystywane m. in. podczas programowania układów sterowania robotów i manipulatorów (jak i w samych układach sterowania), do programowania i testowania systemów sztucznej inteligencji, do modelowania złożonych mechanizmów i innych układów fizycznych, itp.
lvODE nie jest ścisłym odwzorowaniem ODE. Pomimo, że wykorzystane zostały te same koncepty, używana jest identyczna terminologia i większość funkcji ODE ma swoje odzwierciedlenia, to wiele z nich zostało pogrupowanych, struktury danych zostały uproszczone, a wszystko to w przyjazny dla użytkownika LabVIEW sposób i z uwzględnieniem specyfiki tego środowiska. Dodanych zostało też kilka elementów nie występujących w oryginalnej bibliotece, a w znaczny sposób ułatwiających programowanie – m. in. menedżer obiektów. Planowane są też kolejne rozszerzenia (m.in. integracja z 3D Picture Control)
W chwili obecnej nie cała funkcjonalność biblioteki ODE jest zaimplementowana w lvODE. Do najważniejszych różnic należą: brak obsługi geometrii typu trimesh, heighfield i convex, brak więzu typu 2D Plane, brak trybu żyroskopowego dla ciał, wyłącznie pojedyńcza precyzja liczb zmiennoprzecinkowych.
Film ilustrujący funkcjonalność biblioteki:
Krótko o ODE
ODE jest darmową i szeroko znaną biblioteką przeznaczoną do symulacji układów brył sztywnych. Programista definiuje układ ciał, ich parametry fizyczne i rodzaje połączeń pomiędzy nimi, zadaniem biblioteki jest obliczenie sił występujących w układzie i wyznaczenie położeń i prędkości wszystkich ciał w kolejnym kroku czasowym, przy zachowaniu wszystkich zdefiniowanych relacji. Programista może w pełnym zakresie ingerować w symulację w czasie jej trwania, co umożliwia zarówno dokładną analizę jej przebiegu (dostęp do wszystkich parametrów fizycznych) jak i zaprogramowanie dowolnego stopnia interaktywności. ODE zaprojektowane jest w szczególności do symulacji w czasie rzeczywistym – wykorzystywany jest integrator (procedura rozwiązująca układ równań różniczkowych) pierwszego rzędu, co jest pewnym kompromisem pomiędzy szybkością i jakością. Generowane przez niego wyniki nie są tak dokładne jak byłyby przy wykorzystaniu integratorów wyższego rzędu, jest za to stabilny, szybki i elastyczny.
Poniżej wymieniono podstawowe cechy ODE:
- Ciała jako bryły sztywne z dowolnym rozkładem masy
- Typy par kinematycznych: przegub kulowy, para obrotowa, para posuwista, para typu zawieszenie, przegub Cardana, połączenie sztywne, siłowniki liniowe i obrotowe, oraz inne typy będące kombinacjami już wymienionych
- Typy geometrii używanej do wykrywania kolizji: sfera, prostopadłościan, walec, kapsułka, płaszczyzna, półprosta, dowolna bryła w postaci siatki trójkątów, wielokąt, pole wysokości (heighfield)
- Trzy typy przestrzeni kolizyjnych
- Równania ruchu wyprowadzone metodą mnożników Lagrange’a
- Wybór metody całkowania: metoda „pełna” – wolniejsza i dokładniejsza lub metoda iteracyjna
- Zaawansowany model kontaktu i tarcia
Instalacja
Zalecaną formą instalacji jest instalacja pakietu VIP przy użyciu VI Package Manager
Można także zawartość archiwum ZIP (katalog „lvODE”) wypakować do katalogu <LabVIEW xxxx>\user.lib.
Po restarcie LabVIEW na palecie, w dziale User Libraries, pojawi się wtedy sub-paleta „lvODE”, na której sub-paletach znajdują się wszystkie niezbędne funkcje.
Dokumentacja
Dokumentacja biblioteki znajduje się w podkatalogu „doc” i składają się na nią następujące pliki:
- ODE Manual.pdf – oryginalny podręcznik do ODE. Zapoznanie się z nim jest niezbędne do pełnego zrozumienia głównych idei i mechanizmów działania biblioteki. Ze względu na wykorzystywanie tej samej terminologii, może to być też źródło wystarczające do korzystanie z lvODE. Najważniejszą różnicą jest uproszczona względem oryginału konwencja nazw funkcji (pozwoliło na to zastosowanie LVOOP i jego przestrzeni nazw).
- lvODE Class Hierarchy.pdf – graficzna reprezentacja hierarchii klas biblioteki – jej znajomość nie jest niezbędna by zacząć programowanie, może jednak ułatwić zrozumienie pewnych koncepcji.
- lvODE Function Reference.pdf – wykaz wszystkich publicznych funkcji lvODE pogrupowanych ze względu na klasy, wraz z opisami. Opisy funkcji czerpią dużo z oryginalnego podręcznika ODE, uwzględniają jednak wszystkie różnice konwencji i specyfikę LaBVIEW. Dokument ten stanowczo wymaga jeszcze doszlifowania (lepsze grupowanie, szersze opisy poszczególnych sekcji itp.)
- Pliki *.png – mapa wszystkich palet
Integralną częścią dokumentacji są też opisy zawarte w pomocy kontekstowej każdej funkcji. W dużej części pokrywają się one z opisami w pliku „lvODE Function Reference”, dodatkowo opisane są także funkcje prywatne biblioteki.
Przykłady
Znajdują się w podkatalogu „examples”. Jest to kilka przykładów o różnym stopniu skomplikowania, z wyczerpującymi komentarzami w kodzie. Przykłady te wspomagane pomocą kontekstową i (w trudniejszych przypadkach) lekturą kilku rozdziałów oryginalnego podręcznika powinny być wystarczającą pomocą by samodzielnie zacząć programować w lvODE.
Licencja
Oprogramowanie udostępnia się na licencji Creative Commons BY-NC-ND (opis i tekst licencji pod adresem http://creativecommons.org/licenses/by-nc-nd/3.0/pl/ oraz w pliku license.txt)
Biblioteka ODE rozprowadzana jest na licencji BSD