Wymiarowanie Manipulatora Explained

Czas czytania: 10 minut

manipulatory

Mechaniczne ramię (lub po prostu manipulator) to potężne narzędzie. Pozwala człowiekowi m. in. na pracę w wielu niedostępnych miejscach, jednak ceną za to jest jego złożoność, która przejawia się już na etapie schematu kinematycznego (patrz powyżej), gdyż do opisania jego ruchu nie można zastosować jednego, zwykłego układu współrzędnych.

 

Z pomocą przychodzi jednak notacja Denavita – Hartenberga, która, przez powiązanie ze sobą kolejnych ogniw, pozwala nam analizować ruch manipulatorów. Wymiarowanie nie należy jednak do najprostszych ze względu na ilość zasad, których musimy się trzymać. Dzisiaj spróbujemy temu podołać.

 

Zasada nr 1

Osie Z rysujemy wzdłuż osi obrotu (pary obrotowe) lub wzdłuż kierunku przesuwu (pary przesuwne).

manipulatory

Zasada nr 2

Nie możemy zapomnieć o osi Z dla chwytaka. Dla ułatwienia rysujemy go równoległe do osi Z która go poprzedza (u nas – równolegle do Z2).

manipulatory

Zasada nr 3

Osie X rysujemy tak aby były prostopadłe nie tylko do odpowiednich osi Z (np. X0 do Z0, X1 do Z1 itd.) ale także do osi Z które je poprzedzają (tzn. X1 ma być prostopadłe nie tylko do Z1 ale też do Z0, X2 ma być prostopadłe nie tylko do Z2 ale też do Z1 itd.).

 

manipulatory

Zasada nr 4

Jeżeli zgodnie z zasadą nr 3 mamy dwie opcje narysowania osi X (patrz oś X3) to wybieramy tą, która pozwoli nam dokładniej zwymiarować manipulator, czyli po prostą tą, która przechodzi wzdłuż ogniwa.

manipulatory

Zasada nr 5

Po narysowaniu osi nie można zapomnieć o zaznaczeniu środków lokalnych układów współrzędnych.

manipulatory

Zasada nr 6

Kąty theta zaznaczane są wokół osi Z zgodnie z zasadą śruby prawoskrętnej. Oznacza to, że obejmujemy kolejno każdą z osi Z prawą ręką, tak aby kciuk wskazywał kierunek tej osi a następnie zaznaczamy kąt theta w kierunku, który wskazują pozostałe palce. Indeks kąta jest zawsze o jeden większy niż osi Z dla, której ten kąt jest wyznaczany. Punkt zaczepienia kątów theta znajduje się zawsze na osi X o mniejszym indeksie. Punkt końcowy natomiast na osi X o indeksie o jeden większym (np. theta1 to kąt pomiędzy X0 i X1, kąt theta2 to kąt pomiędzy X1 i X2). Pamiętajmy, że (dla ułatwienia) osie możemy przenosić (przy zachowaniu ich równoległości).

manipulatory

Zasada nr 7

Kąty alfa to kąty również zaznaczane zgodnie z zasadą śruby prawoskrętnej jednak tym razem wokół osi X. Zaczynamy od X1, a kąt jest skierowany od osi Z0 do Z1 itd. Indeks tym razem zgadza się z indeksem danych osi X. Pamiętajmy również o możliwości równoległego przesuwania osi.

manipulatory

Zasada nr 8

Ostatnim krokiem będzie wyznaczenie przesuwów. Najpierw wzdłuż osi Z, pomiędzy osiami X. Oznaczenie – lambda. Indeks zawsze większy o jeden niż indeks osi Z wzdłuż, której odbywa się dany przesuw.

 

manipulatory

Zasada nr 9

Przesuwy wzdłuż osi X. Oznaczenie – l. Indeksy – równe indeksom osi X. Przesuwy te stanowią (w przeciwieństwie do lambda) odległości pomiędzy osiami Z (przesuwy lambda były po prostu odległościami pomiędzy X).

manipulatory

W ten sposób zwymiarowaliśmy cały manipulator używając notacji Denavita – Hartenberga. Teraz wystarczy odczytać ze schematu wielkości stałe oraz zmienne i już możemy przystąpić do rozwiązywania zadania prostego lub odwrotnego kinematyki.

Napór Hydrostatyczny Na Ściany Płaskie Explained

Czas czytania: 6-7 minut

Podstawą do obliczenia naporu hydrostatycznego i jego nieodłącznego towarzysza, czyli środka działania naporu, są dwa wzory. Zacznijmy od łatwiejszego:

 

CodeCogsEqn(65)

1) CodeCogsEqn(66)

Nasza wielka niewiadoma (choć nie w każdym zadaniu) – napór lub inaczej parcie hydrostatyczne, czyli siła jaką ciecz wywiera na daną powierzchnię. Warto przypomnieć sobie wzór wprowadzony już w szkole średniej, czyli CodeCogsEqn(67) i szukać w dalszym opisie analogii do niego.

 

2) CodeCogsEqn(68)

Ten zlepek trzech wielkości to ciśnienie hydrostatyczne. Mnożymy tutaj gęstość cieczy i przyspieszenie ziemskie (co często określamy mianem ciężaru właściwego CodeCogsEqn(69)), a także współrzędną geometrycznego środka ciężkości CodeCogsEqn(70). Poniżej zaznaczyłem tą współrzędną na paru przykładowych figurach:

srodek

3) CodeCogsEqn(71)

Po prostu powierzchnia. Zauważ analogię do CodeCogsEqn(67).

 

 

Wzór nr 2 – środek naporu:

CodeCogsEqn(72)

1) CodeCogsEqn(73)

Pomimo, że dla niektórych może się to wydawać nieintuicyjne to jednak jest to prawda – siła naporu nie jest przyłożona w środku ciężkości figury lecz odrobinę niżej, w punkcie CodeCogsEqn(73), który stanowi środek naporu.

 

2) CodeCogsEqn(71) i CodeCogsEqn(70)

Wielkości tych używaliśmy już w poprzednim wzorze, gdzie zostały dokładniej opisane.

 

3) CodeCogsEqn(74)

Moment bezwładności figury zanurzonej, względem osi równoległej do płaszczyzny zwierciadła, leżącej na tej figurze i przechodzącej przez jej geometryczny środek ciężkości. Rozłóżmy to na czynniki pierwsze i pokażmy na rysunku o co chodzi:

 

dasj

otk

trety

gry

polej

Nie aż tak skomplikowane, prawda? Jaki jest więc ten moment bezwładności? Odpowiedź znajdziemy we wzorach na momenty dla podstawowych figur płaskich:

 

hulllllk

Pójdźmy za ciosem dodając do rysunku parę wymiarów i obliczając ze wspomnianego wcześniej wzoru środek naporu CodeCogsEqn(73):

 

zadanko

Zacznijmy od momentu:

CodeCogsEqn(75)

Teraz pole:

CodeCogsEqn(76)

Na koniec współrzędna CodeCogsEqn(70):

CodeCogsEqn(77)

Podstawiamy!

CodeCogsEqn(72)

CodeCogsEqn(79)

Formalnością w takim przypadku pozostaje policzenia naporu:

 

CodeCogsEqn(65)

CodeCogsEqn(80)

CodeCogsEqn(81)

Elementarne Transformacje Explained

Czas czytania: 5 minut

W dzisiejszym artykule zajmiemy się manipulacją punktów i figur oraz formalnym zapisem tych manipulacji. Pomimo tego, że żyjemy w świecie 3D poniższe wzory i przekształcenia będą odnosić się do płaszczyzny (2D), ponieważ ułatwia to zrozumienie. Po przeczytaniu tego artykułu dodanie zależności związanych z transformacjami w trzecim wymiarze będzie tylko formalnością. Zaczynamy!

 

1. Skalowanie

transformacjaIntuicyjnie wiemy, że zmniejszając powyższy kwadrat ABCD dwukrotnie (skalując go) otrzymalibyśmy A’B’C’D’ :

transformacja

Wybierzmy punkt A (oraz A’) i zobaczmy co dokładnie się stało.

 

CodeCogsEqn(31)

CodeCogsEqn(32)

CodeCogsEqn(34)

CodeCogsEqn(33)

Z powyższego możemy zapisać zatem:

 

CodeCogsEqn(35)

CodeCogsEqn(36)

Uogólniając, skalowanie możemy zapisać wzorem:

 

CodeCogsEqn(37)

CodeCogsEqn(38)

gdzie CodeCogsEqn(39) i CodeCogsEqn(40) to współczynniki skalowania (w naszym przykładzie oba wynosiły 0,5).

 

2. Translacja

ppp

W tym podpunkcie naszym celem będzie przesunięcie (translacja) punktu M w miejsce zaznaczone niebieskim krzyżykiem. Zrobimy to w dwóch etapach. Najpierw współrzędna “x”:

ppp

CodeCogsEqn(41)

CodeCogsEqn(42)

CodeCogsEqn(43)

CodeCogsEqn(44)

A potem współrzędna “y”:

ppp

CodeCogsEqn(44)

CodeCogsEqn(46)

CodeCogsEqn(45)

CodeCogsEqn(47)

Domyślasz się już jaki będzie ogólny wzór na translację?

 

CodeCogsEqn(48)

CodeCogsEqn(49)

gdzie CodeCogsEqn(50) i CodeCogsEqn(51) to współczynniki translacji ( u nas wynosiły one kolejno -2 i -3).

 

3. Rotacja

rotacja

Problem w tym podpunkcie polega na określeniu współrzędnych punktu P dla układu {x’, y’}, który został obrócony o pewien kąt. Użyjemy tutaj wielokrotnie funkcji trygonometrycznych, więc bierzmy się za narysowanie paru trójkątów prostokątnych!

 

rotacja

Zauważ, że jedna z przyprostokątnych powyższego niebieskiego trójkąta jest równoległa do osi x’ a druga do osi y’. Równość dwóch kątów (czarnego i niebieskiego) wynika z zasad podobieństwa dwóch figur.

 

rotacja

Bądź skupiony podczas szukania cosinusów i sinusów dla zielonego trójkąta. Musisz zdać sobie sprawę, że jest on ustawiony odwrotnie, więc jego przeciwprostokątna jest na dole (na osi x) a kąt prosty u góry. Na koniec zaznaczmy na rysunku współrzędne dane (x i y) i szukane (x’ i y’).

 

rotacja

Aby znaleźć wartość szukanej współrzędnej x’ względem danej x musimy skorzystać z przyprostokątnych obu trójkątów pomocniczych:

 

ogorek

Zapiszmy:

CodeCogsEqn(52)

CodeCogsEqn(56)

CodeCogsEqn(59)

CodeCogsEqn(58)

Podobnie postępujemy dla współrzędnej y’. Korzystamy z pozostałych dwóch przyprostokątnych obu trójkątów i tym razem odejmujemy:

 

rotacja

Ponownie zapiszmy:

CodeCogsEqn(60)

CodeCogsEqn(61)

CodeCogsEqn(62)

CodeCogsEqn(64)

Podsumowując:

Skalowanie:

 

CodeCogsEqn(37)

CodeCogsEqn(38)

Translacja:

 

CodeCogsEqn(48)

CodeCogsEqn(49)

Rotacja:

 

CodeCogsEqn(58)

CodeCogsEqn(64)

Sortowanie Bąbelkowe (w Javie) Explained

Czas czytania: 3 i pół minutki

Jednym z klasycznych przykładów problemów w algorytmice jest sortowanie. Załóżmy, że musimy uszeregować w kolejności rosnącej poniższe liczby:

 

SORTOWANIE

Algorytm sortowania bąbelkowego zaczyna od pierwszych dwóch elementów, czyli w naszym przypadku od 3 i 1…

 

SORTOWANIE

…i sprawdza czy są one uporządkowane rosnąco, tzn. czy pierwszy jest mniejszy od drugiego. W naszym przypadku tak nie jest – dochodzi więc do zamiany:

 

SORTOWANIE

Następnie algorytm bada kolejne dwa elementy i postępuje z nimi tak samo. Zauważ, że w tym przypadku 3 i 5 są już w dobrej kolejności:

 

SORTOWANIE

Kolejna para:

 

SORTOWANIE

I kolejna:

 

TYS

Algorytm w jednym przejściu przez listę zrobił co mógł. Sortowanie nie powiodło się w stu procentach, ale na pewno jest lepiej niż wcześniej. Co robimy? Powtarzamy całą procedurę:

 

drugaproba

Druga powtórka nic nie dała? Co powiesz na trzecią?

 

FGH

Uff! Nareszcie. Lista posortowana. Widzimy, że kolejne przejście przez nią według tego samego algorytmu nic by nie zmieniło:

 

ok

Spróbujmy zaimplementować teraz Sortowanie Bąbelkowe w Javie. Zwróć uwagę na komentarze:

 

java

Przykładowy wynik działania powyższego programu:

 

KONIECkkkk

A na koniec wizualizacja:

NB

Wartość Średnia Funkcji (CAŁKA) Explained

Czas czytania: 3 minutki

Jeżeli zawędrowałeś aż tutaj chcąc obliczyć wartość średnią funkcji, wiesz pewnie już czym jest całka i jak łatwo można ją sobie wyobrazić, dzieląc pole pod wykresem na prostokąty o nieskończenie małej szerokości (jeżeli nie – patrz tu).

 

Wykorzystamy to przy wyprowadzeniu głównego wzoru tego artykułu, ale na razie przypomnij sobie czym jest wartość średnia.

 

Oceny na koniec roku Jasia wyglądały w ten sposób:

 

Polski: 3

Matematyka: 5

Fizyka: 4

WF: 3

Biologia: 5

 

Jaka jest średnia jego ocen? 3 + 5 + 4 + 3 + 5, czyli 20 podzielone przez liczbę przedmiotów, czyli 5. Średnia ocen Jasia to 4. Łatwe dla danych dyskretnych, prawda? Spróbujmy w podobny sposób podejść do problemu policzenia średniej poniższej funkcji w przedziale [a, b]:

 

jjjkoijoijoij

Jasiu miał pięć przedmiotów, więc my wybierzemy 5 wartości jednakowo odległych od siebie na przedziale [a, b] i z nich policzymy średnią. Lepsze to niż nic, co nie?

 

jui

Średnia z naszych pięciu wartości funkcji to 2 + 3 + 2 + 2.5 + 4, czyli 13.5 podzielone przez 5. W wyniku dostajemy 2.7.

 

Spróbujmy uogólnić to co przed chwilą zrobiliśmy używając matematycznego znaku sumy:

 

CodeCogsEqn(14)

Myślę, że do tego momentu wszystko powinno być jasne. Teraz czas na odrobinę algebry. Pomnóżmy nasz wzór na średnią przez pewną specyficzną wartość:

 

CodeCogsEqn(15)

 

Zauważ, że  CodeCogsEqn(16) to po prostu jedynka. Mnożąc coś przez jeden, nic się nie zmienia (a jednak pomaga). Zauważ, że nie dobraliśmy tych dwóch literek bez powodu. Są to granice przedziału naszej funkcji. Ich różnica to po prostu długość przedziału na którym liczymy naszą średnią wartość. Uogólnijmy teraz trochę bardziej nasz wzór. W końcu nie musimy brać tylko 5 wartości “n”, może ich być nieskończenie wiele:

 

CodeCogsEqn(17)

I w końcu rozdzielmy nasz ułamek  CodeCogsEqn(16):

 

CodeCogsEqn(18)

Przyjrzyjmy się wielkości CodeCogsEqn(19). Jest to długość przedziału podzielona przez liczbę wartości, których użyliśmy do liczenia średniej. Zobacz poniższą graficzną interpretację tego ułamka (interpretacja całki jako sumy malutkich prostokącików z tego artykułu, bardzo się teraz przyda):

 

kokokokokhhhhh

gh

gh

Wyobraź sobie teraz, że a = 0 i b = 10. Wybraliśmy 5 wartości w celu przybliżenia naszej średniej, a więc wielkość “n” jest równa 5. Czym jest więc nasz kluczowy ułamek CodeCogsEqn(19)?

 

Ten ułamek to właśnie deltakjjjj, czyli szerokość jednego prostokącika, zbudowanego na wybranej wartości funkcji! ZMIENIAMY WZÓR:

 

CodeCogsEqn(18)

CodeCogsEqn(20)

Formalnością jest teraz pytanie, co się stanie gdy będziemy tą szerokość zmniejszać i zmniejszać i zmniejszać (CodeCogsEqn(21))? TAK, otrzymamy całkę (CodeCogsEqn(23)) w granicach naszego przedziału, czyli [a, b]. Jest to właśnie wzór na wartość średnią funkcji w przedziale:

 

CodeCogsEqn(20)

CodeCogsEqn(22)

Objętość Paraboloidy Explained

Czas czytania: ogarniesz po paru minutach

Słowo paraboloida brzmi bardzo podobnie do znanej nam już paraboli.

 

parabola

Różnica między tymi dwoma pojęciami leży w wymiarze. O ile parabola to obiekt płaski (dwuwymiarowy), o tyle paraboloidę otrzymujemy poprzez obrót paraboli wokół jej osi symetrii (otrzymując obiekt trójwymiarowy).

 

paraboloida

Spróbujmy narysować uproszczenie paraboloidy w układzie współrzędnych x,y,z.

 

ladnie

Zauważmy jakimi wielkościami można opisać paraboloidę. “H” to po prostu jej wysokość, a “R” to największy promień. Dlaczego największy? Sprawdź poniżej jakie wartości promienia może jeszcze przyjmować paraboloida i przyjrzyj się zależnościom między nimi. Maleją im bliżej wierzchołka, co nie?

 

hhjhjhjhjh

Na powyższych 4 promieniach zbudujmy teraz walce o jednakowej wysokości delta_zet w celu dość niedokładnego przybliżenia objętości paraboloidy (mimo wszystko lepsze to niż nic).

 

maslo

Z podstawowych wzorów na objętość:

 

obbbbb

A więc w naszym przypadku:

 

dllll

Uogólniając (przy założeniu, że wielkość kkkll możemy zastąpić symbolem klkjlkjlkj):

 

askadpoakpok

 

Zauważmy, że im więcej walców (im większa liczba nio) tym większa dokładność w wyniku objętości paraboloidy. Czas na odrobinę algebry.

 

Promienie walców, które budowaliśmy na naszej figurze były po prostu współrzędnymi na osi x i zależały od położenia na osi z. Domyślasz się już może w jaki sposób? Tak! Według poniższego równania paraboli:

 

pojpojpojpojjjj

Liczba pojpokkkk to współczynnik, który może być dowolną liczbą rzeczywistą, dlatego wolelibyśmy wiedzieć o nim trochę więcej. Co powiesz na taką informację:

 

opjpjj

Oczywiście jest to bardzo pomocny fakt. Jeżeli za “z” podstawimy maksymalną wysokość “H” to jaka będzie odpowiadająca jej wartość “x”? Oczywiście maksymalny promień “R”! Wyłączmy z tego “a” i podstawmy do ogólnego wzoru:

 

opjpjj

uh

pojpojpojpojjjj

bjbjbjbjbjbj

Powiedzieliśmy już, że wartość na osi x to promień i że zmienia się on razem z wartościami na osi z, a więc:

 

jjiojoihjoih

Uogólnijmy więc trochę bardziej nasz poprzedni wzór:

 

askadpoakpok

joijoijoi

Wyrzućmy stałe przed znak sumy:

 

joijoijoijhhh

Teraz czas na moment kulminacyjny i kluczowe pytanie! Jeżeli nio będzie dążyło do nieskończoności czym będzie można zastąpić mlmlkmlkm? Odpowiedź brzmi…

 

..CAŁKĄ😦

 

Całkujemy po “z” więc granice całkowania wynoszą od zera do “H”, pamiętajmy też o zastąpieniu delta_zet symbolem “dz”:

 

oijoijoijjhhhh

Odrobina znajomości podstawowych wzorów na całki i:

 

nuuuu

jkjkjllllllllll

Podsumowując, czym jest tak naprawdę objętość paraboloidy oprócz prostej całeczki i nieskończonej ilości malutkich walców nałożonych na siebie w jej obrębie? Otóż, objętość paraboloidy to także połowa objętości walca opisanego na niej!

 

koniechhhh

 

Różniczka Zupełna Explained

Czas czytania: 3 minutki

Koncepcja różniczki zupełnej znajduje swoje zastosowanie między innymi w mechanice płynów, gdzie opisuje bardzo złożony ruch elementarnych części cieczy. Jednak, jak wiele skomplikowanych zagadnień, różniczka zupełna może zostać sprowadzona do prostej analogii.

 

Wyobraźmy sobie strumień przy której stoi stado krów:

 

strumien_krowy

Krowy robią swoje krowie rzeczy, których zapach przenosi wiatr:

 

strumien_krowy

W rejonie oznaczonym na brązowo (nie ma co ukrywać) jest najgorzej. Zapach staje się mniej intensywny w strefie pomarańczowej i ledwo wyczuwalny w żółtej. Jeżeli oznaczymy tą intensywność literą “p”, możemy stwierdzić, że jej wartość zależy od współrzędnych x i y:

 

strumien_krowy

Kładąc się na wodzie z prawej strony i pozwalając strumieniowi na “porwanie” doświadczymy zmiennych doznań:

 

strumien_krowy

Na początku – świeże powietrze. Potem w punkcie A lekki aromat, w punkcie B czujemy, że będzie źle, w punkcie C jest fatalnie, ale na szczęście w punkcie D zapach jest mniejszy a w punkcie E znowu ledwo wyczuwalny. Przedstawmy to na wykresie smrodu od czasu:

 

wykres_smrod

Spróbujmy teraz znaleźć tempo zmiany wielkości “p”, którą wyczuwamy dryfując w czasie “t”:

 

iiiiiiiiii

To co czujemy (“p”) jest zależne od tego gdzie się znajdujemy (od “x”  i od “y”), a więc:

 

rownanko

To gdzie się znajdujemy zależy od czasu (dając się ponieść strumieniowi, w pierwszej sekundzie możemy mieć współrzędne [5, 2], a w drugiej [2, 1] itd.), a więc:

 

aha

Pomyśleliśmy o wszystkim? Nie do końca. Wiatr działający na pole zapachu również może się zmieniać (oczywiście w czasie). Uwzględnijmy też tę zmianę, uniezależniając ją od położenia względem osi x i y – w końcu na pogodę nie mamy wpływu:

 

jkjkjkj

Gratulacje – oto różniczka zupełna. Doprowadźmy ją do trochę ładniejszej postaci mnożąc obustronnie przez opomm i zakładając, że wiatr jest stały. Wiatr jest stały = wyczuwalny zapach nie zależy bezpośrednio od czasu (zależy jednak pośrednio, gdyż w czasie przemieszczamy się wzdłuż strumienia)  =  jjkjkjllkj. Spójrz:

 

konieciiiii

Na koniec zastanów się nad różnicą pomiędzy różniczką zupełną a cząstkową.

 

W przypadku różniczki zupełnej bierzesz pod uwagę szereg czynników, które wpływają na wartość Twojej funkcji. U nas był to pewnego rodzaju łańcuch zależności: zapach zależy od położenia, a położenie od czasu.

 

Licząc natomiast pochodną cząstkową, dokonujesz założenia, że wszystkie pozostałe czynniki Cię nie obchodzą. To znaczy różniczkując cząstkowo po czasie t funkcje f(x, y, t) jednocześnie uniezależniasz od czasu zmienne x  i y, a więc x i y są stałe.