ПредишенСледващото


Превод извършва Павел А. Chuvanov, участник на Всемогъщия.

Кинематика - метод за изчисляване на позицията в пространството за края на свързаната структура на предварително определени ъгли на въртене на звената за шарнирна връзка (става). Това е лесно да се направи, ако има само едно решение. Обратна кинематика прави точно обратното. За тази крайна точка изчислява ъгъла на въртене на пантите, така че да са постигнали тази крайна точка. Това може да се окаже трудно, ако има много или безкрайно много решения.

Този процес е изключително полезна в роботиката. Например, искате да Роботът се протегна и взе обекта. Ако програмата не знае местонахождението на обекта по отношение на раменната става, то е достатъчно, за да се изчислят ъглите на завъртане на ставите, за да се постигне целта. Също така, обратна кинематика е полезно за 3D игри. Вземете за пример на дракон с много дълга шия. Dragon трябва реалистично огъната врата и погълне играчът стои на пода. Или играчът иска да се повиши на пода един обект или натиснете бутона. Потребителите ще видят на екрана на играча ще бъде изтеглен и се допря до обекта, а не просто да се откажат от някъде в близост до обекта (като в Alone In The Dark).

Написах една малка демонстрация за DOS, илюстрираща механизма на обратна кинематика. Снимката показва как една змия се опитва да се докосне до малък въртящ куба. Можете да преместите на целта за използване на клавиатурата. В демонстрацията, за змия влиянието на гравитацията и има малко еластичност, така че това ще бъде възможно да се движи и да се намери, след като вратата, опитвайки се да се постигне по-удобна позиция. змия модел е в tail.cfg файл. Можете да го оправя да се създаде някакъв друг обект.

Има много случаи, когато свързаната структура не е в състояние да се постигне целта. Например, не може да се докосне един лакът китката на една и съща страна. Или да слезе на земята до върха на високо дърво.

Ако има две решения, а след това трябва да има техника за подбор, кое решение е по-последователен с текущото състояние на конструкцията.

Когато повече от две панти, често се случва, че има много решения на проблема. Въпреки това, някои решения са по-добри от други. Ако вашата структура е, например, една ръка някои решения са по-удобни, а други са много неестествени. Често има оптимално решение.

Аз дойдох с метода на обратна кинематика, след обсъждане на пробата и грешката. Няма съмнение, че има много алгоритми за решаване на проблемите обратна кинематика, но тук ще опиша само един.

Този алгоритъм не веднага се намери решение. Това не е проста функция, където можете определяте местоположение и да получите ъглите. Това е един повтарящ се алгоритъм, който прави алгоритъма по-реалистични програми, особено в игри, където ще naveryaka искат обекта, за да се движат загладени.

Решението се дължи на виртуален използването на сила от страна на края на веригата и плъзнете края на веригата в крайна позиция. Силата действа от всяка съвместна структура и се движи малко по-близо до крайната точка. Така че, дори ако няма решение, веригата по-близо до крайната точка възможно най-близо. Тъй като фугите се изчисляват отделно, можете да ги зададете на различни свойства, като твърдост, еластичност и т.н. Всяка една от фугите може да има оптимално положение, че алгоритъмът ще се опита да достигне до възможно най-близо.

Обратна кинематика в 2D

Да започнем с една от пантите. В този случай може да се върти около само по една ос (в обратна посока като положителен изберете). R вектор действа под прав ъгъл към костта. сила вектор F се действа от крайната точка по посока на вратата. Ъгълът между F и R е. Сега всичко е съвсем проста. Скоростта, с която трябва да се завърти на пантата, е пропорционална на скаларен продукт (точка на продукта) на вектори R и F. Поддържане гледна точка, че скаларен продукт на два вектора е положително число, и разбира се ставата трябва да се върти в положителна посока, така че в близост до целта , Ако ъгълът между R и F линия, след това се обърна пантата, така че костта е най-близо до целта и, следователно, пантата не трябва да се завърти повече. В този момент, дот продукт на два вектора дава нула.

Е, дойде. Case-тежък. Отсега нататък всичко ще бъде само един вид случай. Когато имате повече от една кост, просто трябва да се повтаря по-горе описаната алгоритъм за всяко съвместно от своя страна.

Нека започнем с съвместната най-близо до целта:
1. изчисляване на вектора сила (от крайната точка на целта)
2. Ние изчисли скаларен продукт на вектора на сила и вектора, перпендикулярна на костта.
3. Умножете скаларен продукт на малък брой (например 0.01)
4. Добавете го към пантата на ъгъла.

Правим това за всички фуги в серия.

Обратна кинематика в 3D

В триизмерното пространство, изчисления няма да е много по-сложно. Възможни са три ос, около която фугата могат да се въртят. Опитах се да се използва по-горе метод в триизмерното пространство, но резултатите не са много добри. Аз не разбирам напълно защо. Независимо от това, тази математика е определено работи. Има нещо, което изисква много промени в настройките, така че всичко работи, разбира се, нали.

Е, тогава нека да преминем нататък.

оста на пантата е перпендикулярна на костта

Първо, нека да се опитаме примера по-горе, но този път в 3D. Това е система с две стави, а за първи път направи първата панта.

Нека дадем името на векторите
а - вектор по протежение на оста на пантата.
б - вектор заедно костта.
R - вектор, перпендикулярна и б.
F - сила вектор (действащ от крайната точка на целта).

Ако вектор сила е успоредна на, пантата не се върти. Ако тя е успоредна на В, след това просто плъзнете в костите, ставите, няма да се върти. Въоръжени с постулат данни, реших, че въртящият момент трябва да бъде пропорционална на синуса на ъгъла между а и е и синуса на ъгъла между б както е.

Ако крайната точка е дошъл да целева точка, вие не искате да се движат на структурата, но ако крайната точка далеч от целта, която искате да се движи бързо структура. Следователно, въртящият момент трябва да бъде пропорционален на дължината на вектора на сила.

Има само едно нещо, което не може да бъде разбрана от по-горе - посоката, в която трябва да се върти на фугата. Нека панта трябва vraschatsya в положителна посока ако вектор сила е насочена по R, и в обратна посока, ако вектор сила е насочена срещуположно г.

Поставянето на всичко заедно получаваме:

въртящ момент = Mag (е) * SinVect (а, е) * SinVect (Ь, е) * знак (CosVect (R, е)) * Чувствителност

В тази формула SinVect CosVect и връщане съответно синуса и косинуса на ъгъла между векторите. Маг връща дължината на вектора, подпишете и върнете знака на числото. Чувствителност - това е само една малка скаларна постоянна.

Сега можете да преминете към следващото фугата в структурата. Ние изчисляване на новите стойности на векторите A, B, F, и изчисляване на въртящ шарнир 2. Ние изчисляване на въртящ момент за всички стави в структурата и се добавя към ъгъла на всеки шарнир на въртящ момент. Сега Endpoint трябва да бъде по-близо до целта. Непрекъснато повтарят този процес ние ще бъдем в състояние да донесе крайната точка на структурата до целта, като близо или дори докосва обекта.

оста на пантата е насочено по костта

Е, нека да разгледаме по-труден случай. Но няма нищо ново. Тук можете да видите свързана структура, състояща се от четири стави. Съвместно номер две, обаче, може да се върти около оста си на костта. Това е подобно на огъват китката си. И разбира се, това става е най-важното. Както и в предишния случай, вектор ще се проведе по протежение на оста на пантите, но в този случай също така е по костта. Векторът б сега преминава от пантата до крайната точка. Вектор R, както преди, перпендикулярна на двете.

За да се постигне целта за пантата 2 трябва да се обърнат на 90 градуса (вж. Снимката вдясно).

И ние се заключи, че вектор б е различен за стави, чиято ос на въртене е успоредна на костта.

Сега, че сте усвоили основата на обратна кинематика, все още има за задача за адаптиране на системата, за да настроите поведението си в различни ситуации. Както казах и преди, има много различни решения. Някои от тях са по-добре, някои по-лошо. Се различават по това как изглеждат, размер на изразходваните движения или удобство.

Реал змия на недвижими анимация рядко заплете в себе си. Тя има тенденция obrazovvyvat доста гладка повърхност. Змия в демо е направен от двойки шарнирни оси, които са перпендикулярни една на друга. Първоначално написано от змия не се премества твърде реалистично. Така че аз добавя я малко ellastichnogo в ставите. Поради това панти устои огъване. Колкото повече ги огъват, толкова повече те се противопоставят. Ефектът от това е такава, че огъването на ставите й се разпространява.

Нека да разгледаме един динозавър. Той е много дебела в тялото, но тя става все по-тънка и гъвкава шия. Тази функция може да се симулира подобна структура, която е съвместна все ellastichnogo към своя край.

Крайници предпочитат да бъдат в удобна позиция. Това може да бъде постигнато чрез добавяне на нови ellastichnogo панти. Но в този случай той може да бъде най-добре да има определен брой позиции за всяка съвместна в които няма съпротива. Тази серия може да бъде Помислете колко удобно. След пантата оставя удобна позиция, той ще се съпротивлява по-силен и по-силен, докато не се откаже да се върти.

Той може да бъде желателно да се запази крайника толкова ниски, колкото е възможно. Хората рядко дълго държат ръцете си върху по-голяма тежест, отколкото е необходимо. Следователно позицията избран въз основа на времето, необходимо за задържане позиция минимум енергия.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!