ПрограммированиеФорумФизика

Процедурная анимация (3 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#30
18:57, 19 янв 2010

Suslik
> ты предлагаешь составить выражение для функционала искомой функции, котрый мы
> будем минимизировать. думаю, бессмысленно спорить с тем, что искать его имеет
> смысл только численно. следовательно, только с некоторой погрешностью. нетрудно
> заметить, что искомая функция имеет очень резкие переломы, хотя бы при касании
> лапой земли. функции с разрывными производными плохо аппрокисимируются по
> фурье, а ты предлагаешь взять десяток первых гармоник.

Эти функции F представляют собой не координаты ног, а напряжения в мышцах. Это совсем другое. Их можно позволить себе сделать достаточно гладкими. Но даже, если и не гладкие, ну и что? Что не видел разложение пилообразного сигнала в ряд Фурье. Его можео представить с очень приличной точностью даже небольшим количеством коэффициентов.

> заметим, опять же, что результат, близкий к оптимальному, у нас изначально есть
> - природа. так откуда уверенность, что функция, описанная "примерно как в
> природе" будет менее энергетически выгодной, чем функция, найденная численно,
> но с существенно погрешностью?

Во пеервых в природе не все оптимально (пьяного не видел?), во вторых найденное итерационно не означает автоматически низкую точность. Точность в основном зависит от принятой модели расчета, исходны предположений.

> я бы с радостью зацепился за твою идею, если бы её было сколько-то удобно
> приспособить к задаче, которую я перед собой поставил. прежде всего это -
> игровая механика, всё требуется считать в реалтайме, все внешние условия
> постоянно меняются, нужно к ним быстро адаптироваться и единственное требование
> - чтобы результат выглядел убедительно.

Это да. То, что я предложел - это возможность обкатать использование принципа минимума для расчета кинематики, причем на самой простой задаче. Если бы оказалось, что он действительно дает правдоподобные результаты, его можно было бы обобщить и для более сложных условий движения.

#31
7:18, 20 янв 2010

О. Федор
> Во пеервых в природе не все оптимально (пьяного не видел?)
блин, если бы я написал алгоритм, который пытается держать равновесие хотя бы как пьяный, я бы сейчас скакал от радости. речь вообще идёт о совершенно других порядках точности, куда более низких.

О. Федор
> во вторых найденное итерационно не означает автоматически низкую точность.
> Точность в основном зависит от принятой модели расчета, исходны предположений.
в случае, если ты итерационно подбираешь коэффициенты для десятка гармоник, то точность в любом случае не может быть выше, чем погрешность, вносимая оставшимися членами ряда. а это вполне себе существенная поправка. принципиально то, что даже десяток гармоник у меня пока нет никакого чёткого плана, как подобрать.

если интересует, могу поподробнее описать практическую часть:
каждая конечность состоит из двух суставов: для руки это плечо и локоть. у плеча две степени свободы, у локтя - одна. для задних лап - то же самое. в качестве входных параметров можно считать что угодно, ограничений нет, в качестве выходных - крутящий момент вокруг каждой из осей степеней свободы суставов.
если есть желание, можешь описать в двух словах/в псевдокоде алгоритм, я с радостью реализую и потестю, просто я не полностью себе представляю, как его можно воплотить в жизнь.

причём для начала можно взять какую-нибудь более простую задачу, например, приземление. минимизируемым критерием можно считать потраченную на гашение удара энергию, эксперимент считать успешным, если корпус опустился не ниже некоторой пороговой величины(помимо условия на минимум энергии этот факт обязательно должен выполняться для искомой функции). так как будем подбирать итеративно, придётся подряд проводить много экспериментов. можешь считать, что в секунду окспериментов реальной протяжённостью порядка пары секунд можно провести около десятка с большой точностью и около сотни с обычной.

#32
11:32, 20 янв 2010

Какие тут все умные то...

#33
13:28, 20 янв 2010

Suslik
В принципе твоя модель не сильно тличается от того, что я изобразил, но моя все-таки чуть лучше:)
Я тут между делом посмотрел у Ландау, его механику, поэтому должен несколько скоррегировать свои воззрения.

1. Функция действия на самом деле рассчитывается для консервативных систем, т.е. систем сохраняющих энергию в процессе эволюции. Эту проблему можно решить тем, что считать на протяжение интервала интегрирования (одного шага по времени) энергию системы постоянной.

2. Проблему столкновения с землей можно решить (для сферических тел) введением потенциала

grad fi = i*0 + j*(-g+exp(-K*(y-R)))+k*0

fi - потенциал поля (гравитационного + некая добавка)
i,j,k - орты
g - ускорение свободного падения
K - коэффициент добавки, его нужно подбирать таким образом, чтоб с одной стороны граница поверхности земли была не слишком податливой, а с другой стороны, чтоб шаг получившейся системы диффуров не оказался слишком малым.
R - радиус сферического тела.

Обрати внимание, что здесь не нужно рассчитывать ни столкновения, ни удары и все функции непрерывны.

3. Определим скалярную функцию затрат S как интеграл h*|F| для всех F (h здесь возможный ход мышцы).

4. Определим скалярную целевую функцию Z = S*D, где D отклонение координат корпуса от его целевой координаты M (той координаты, в которой должно оказаться тело после завершения цикла телодвижений).

Таким образом задача сводится к миниманизации целевой функции Z.

#34
18:18, 20 янв 2010

О. Федор
> Функция действия на самом деле рассчитывается для консервативных систем, т.е.
> систем сохраняющих энергию в процессе эволюции. Эту проблему можно решить тем,
> что считать на протяжение интервала интегрирования (одного шага по времени)
> энергию системы постоянной.
точно не помню, но, вроде, там можно было вводить правую часть. посмотрю потом в Журавлёве.

> 2. Проблему столкновения с землей можно решить (для сферических тел) введением потенциала
во-первых, в том виде, в каком ты сейчас представил сферический потенциал, он будет слишком "мягким". нужно, чтобы действие обращалось в бесконечность при попытке погрузить сферическое тело сквозь землю. но тогда возникнет другая проблема с неустойчивостью из-за дискретности перемещения

>Обрати внимание, что здесь не нужно рассчитывать ни столкновения, ни удары и все функции непрерывны
всё-таки по-моему в том или ином виде от какого-нибудь sgn() или max() в формулах избавиться не удастся. следовательно, прощай радиус сходимости.

> 3. Определим скалярную функцию затрат S как интеграл h*|F| для всех F (h здесь
> возможный ход мышцы).
да уж, это - самая простая часть, согласен :)

> 4. Определим скалярную целевую функцию Z = S*D, где D отклонение координат
> корпуса от его целевой координаты M (той координаты, в которой должно оказаться
> тело после завершения цикла телодвижений).
не понял. почему произведение? почему не сумма с некоторыми коэффициентами? в таком виде испытание будет успешным(его Z может стать минимумом), даже если тело упало ниже критической точки. такого допускать нельзя.

#35
20:24, 20 янв 2010

Интересный у вас диалог выходит =)

Suslik
> Сейчас занимаюсь попытками заставить животное держать равновесие, если его
> толкнуть. Выглядит смешно, но кое-что получается :)


Не знаю как для четвероногих, но я вот где то читал, что для человека ходьба это и есть постоянное сохранение равновесия тела. Начиная идти, человек прежде всего наклоняет свой корпус вперед, и как только проекция центра масс выходит за границы трапеции которая образуется между его ступнями, равновесие нарушается и для его сохранения человеку приходится сделать шаг. Продолжая движение по инерции, человек делает следующий и т.д. При этом мышцы толкают тело не вперед а вверх. При беге наклон получается еще больший - выше скорость. Рискну предположить что для четвероногих процесс примерно выглядит так же.

#36
20:37, 20 янв 2010

Aneroun
> Не знаю как для четвероногих, но я вот где то читал, что для человека ходьба
> это и есть постоянное сохранение равновесия тела. Начиная идти, человек прежде
> всего наклоняет свой корпус вперед, и как только проекция центра масс выходит
> за границы трапеции которая образуется между его ступнями, равновесие
> нарушается и для его сохранения человеку приходится сделать шаг.
не поверишь, именно так и сделал :) очень хорошее замечание, жаль, что раньше его не подкинул - все выложенные мувики сделаны не по такому принципу.

#37
20:45, 20 янв 2010

main
> Может стоит сначала сделать постоянно прыгающее одноногое существо.
принципы удержания равновесия на одной ноге и на четырёх несколько разные. на четырёх существуют устойчивые положения, если животное немного сдвинуть с этого положения, оно вернётся назад, не упав. на одной ноге таких положений нет. поэтому для четырёх ног сразу алгоритм разрабатывать проще.

#38
21:15, 20 янв 2010

Suslik
> очень хорошее замечание, жаль, что раньше его не подкинул
Пардон =) только сегодня тему увидел.

#39
21:33, 20 янв 2010

Suslik
> во-первых, в том виде, в каком ты сейчас представил сферический потенциал, он
> будет слишком "мягким". нужно, чтобы действие обращалось в бесконечность при
> попытке погрузить сферическое тело сквозь землю. но тогда возникнет другая
> проблема с неустойчивостью из-за дискретности перемещения

Потенциал не сферический, а плоский. Его жесткость регулируется параметром K, она может быть очень высокой.
Насчет неустойчивости это да. Но здесь есть возможность на интервале шага решать аналитически (при константных F).

#40
21:44, 20 янв 2010

Suslik
> > Функция действия на самом деле рассчитывается для консервативных систем, т.е.
> > систем сохраняющих энергию в процессе эволюции. Эту проблему можно решить тем,
> > что считать на протяжение интервала интегрирования (одного шага по времени) энергию системы постоянной.
> точно не помню, но, вроде, там можно было вводить правую часть. посмотрю потом
> в Журавлёве.

Эта проблема решается на самом деле гораздо элегантней. Дело в том, что систему можно разбить на две взаимодействующие S1 и S2 и при этом считать, что в S1 энергия сохраняется, а в S2 определить подсистему обмена энергией (ввода-вывода через мышцы, трение).

> всё-таки по-моему в том или ином виде от какого-нибудь sgn() или max() в
> формулах избавиться не удастся. следовательно, прощай радиус сходимости.

Не вижу причин.

> > 4. Определим скалярную целевую функцию Z = S*D, где D отклонение координат
> > корпуса от его целевой координаты M (той координаты, в которой должно
> > оказаться
> > тело после завершения цикла телодвижений).

> не понял. почему произведение? почему не сумма с некоторыми коэффициентами? в
> таком виде испытание будет успешным(его Z может стать минимумом), даже если
> тело упало ниже критической точки. такого допускать нельзя.

Это действительно проблематично, первоначально я думал целевую функцию определить как
Z = S/|P2-P1|

где P1, P2 - начальная и конечная координата тела.
Но вообще, этот вопрос нужно решить в экспиременте, там есть и другие варианты выбора Z.

#41
21:51, 20 янв 2010

main
> Может стоит сначала сделать постоянно прыгающее одноногое существо. ( как
> тренажер "Кузнечик" )
> И научить его сохранять равновесие.
> Потом научить двигаться вперед.
> Потом добавить еще ногу.
> Ну и далее постепенно усложнять.

На самом деле, если система будет создана, то она будет пригодна для управления любым би- три- тетра и прочим подом. Лично мне было бы интересно, какой метод движения она соптимизирует для змей. В природе пока известно
- горизонтальный изгиб
- вертикальный (гусеницы)
- продольные сокращения (черви)
- поперепечное качение (некоторые пустынные).

#42
22:13, 20 янв 2010

main
> Пока это лишь твое мнение. Может и проще, но вообще говоря это не очевидно.
реализовывать-то мне, и я слабо представляю, как сделать прыгающего на одной ноге парня достаточно устойчивым. четыре ноги позволяют делать достаточно серьёзные ошибки(из-за допущений), одна нога такого не позволит.

> Правка:
> И даже если для четвероногого.
> Сначала может быть стоит сделать чтоб оно было постоянно прыгающее и
> сохраняющее равновесие.
как я уже написал Aneroun'у, сейчас я именно так и делаю. могу выложить видео, но демка ещё сыровата. технические проблемы с инверсной кинематикой(можете заметить, заминка в конце)

#43
6:41, 23 янв 2010

Всё упёрлось в одну, казалось бы, не слишком сложную задачу:
Изображение
два рычага в невесомости, верхний шарнирно приделан к потолку, нижний - к верхнему. массы, моменты инерции и ориентации(направляющий вектор) в пространстве заданы. во втором шарнире возникает крутящий момент, M, можно считать, что просто к первому рычагу приложен момент M, ко второму -M(минус эм, векторно). требуется найти вектор мгновенного ускорения, который получит нижний конец второго рычага. всё двумерное.

я задачу решил приближённо, но иногда неточность становится фатальной, поведение - неверным. кому не жалко десять минут, буду очень признателен, ответ, вроде, должен быть представлен в виде M * (alpha * r1.perpendicular() + beta * r2.perpendicular), требуется найти alpha и beta.

#44
23:17, 23 янв 2010

Suslik
Посмотри, вот решение более общей задачи.
suslik - Lagrange3 | Процедурная анимация
Здесь я взял многошарнирный маятник, с определенными для каждого шарнира (узла)
fii - угол порота рычага в i шарнире , используется как обобщенная координата
ri - разность координат i и i-1 шарнира
si - длина i рычага
Pi - координатa i шарнира
mi - масса, связанная с i шарниром
Mi - внешний момент действующий на i рычаг
Ji - момент инерции, связанный с i рычагом
Fi - сила на i шарнире
L - функция Лагранжа системы

Последнее уравнение, это на самом деле это система линейных дифференциальных относительно искомой обобщенной координаты fii, эту систему нужно решать для всех шарниров k.
Да, и пожалуйста, не перепутай индексы i,j с ортами i,j.

Исправил замеченные ошибки и продифференцировал последнию систему.

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумФизика

Тема в архиве.