та-даан, добавил ещё две лапы. обновление в шапке :)
Suslik
У тебя безнадежный подход.
Кинематическая система любого животного имеет слишком много степеней свободы. Знаешь анекдот про сороконожку?
У нее спросили, с какой ноги она ничинает движение, она запуталась и не смогла пойти.
Теперь поделюсь как они это делают на самом деле. Эти животины членистоногие, более того, "членистотелые", у них в каждом сегменте тела есть нервные ганлиии, которые и управляют этим сегментом, а вместе управляют движением всего тела. Их "хождение" это на самом деле волна распространяющаяся вдоль тела.
Но не надо думать, что только у примитивных животных такой механизм управления движением. Сокращения нашего сердца или перистилистика кишечника управляются аналогично.
Перейдем теперь по эволюционной лестнице чуть выше. У земноводных и простых пресмыкающихся (о динозаврах я умолчу) узор движения тоже не отличается большим разнообразием, фактически он жестко запрограммирован и почти не использует динамики. Только у теплокровных появляются несимметричные аллюры, типа галопа.
К чему я это все? К тому, что на самом деле бег волка - это некое интеллектуальное действо, которому нужно обучаться достаточно длительное время.
Итак в чем там проблемы? - степеней свободы сильно много. Как их разрешить? Использовать те или иные принципы оптимизации или эвристики (ящерицы или лягушки используют эвристики, ты в своей проге тоже).
Оставим эвристики пока в стороне, посмотрим на оптимизации. Что там можно оптимизировать?
- расход энергии на еденицу времени или пути
- максимальная скорость
- максимально длинный прыжок в длину или высоту
- продолжительность бега (тут все и расход энергии, и равномрная загрузка мышц).
Естественно, бег оптимизированный по какому то параметру и будет аллюром. Для лошади например
оптимизация расхода энергии на время (при возможности одновременного сбора этой энергии с пространства при пастьбе) - это шаг
оптимизация расхода энергии на путь - это рысь
оптимизация на скорость - это галоп.
Оптимизировать что? Функционал от функции зависимости напряжений в мышцах от входных параметров по времени? это ж убиться, он получается слишком многомерный, численно это посчитать практически невозможно.
Нейросеть по сути именно тем и занимается, что раскладывает функцию многих переменных в полином. Варьируя нейросеть, мы варьируем искомую функцию, при надобности минимизируя функционал над ней. Но это неинтересный способ, мне хочется аналитически просчитать, какой характер движений будет наиболее выгоден.
Suslik
> Оптимизировать что? Функционал от функции зависимости напряжений в мышцах от
> входных параметров по времени? это ж убиться, он получается слишком
> многомерный, численно это посчитать практически невозможно.
Распиши лагранжиан. Будет не сильно сложно.
> Нейросеть по сути именно тем и занимается, что раскладывает функцию многих
> переменных в полином. Варьируя нейросеть, мы варьируем искомую функцию, при
> надобности минимизируя функционал над ней. Но это неинтересный способ, мне
> хочется аналитически просчитать, какой характер движений будет наиболее
> выгоден.
Строго аналитически конечно по любому не получится, более того, и с лагранжианом придется использовать те или иные эвристики (связанные в основном с параметрами мышц как нелинейных элементов), но это все же более перспективный путь.
Дело в том, что и наша скелетно-мышечная система отнюдь не жестко управляется, как управляются роботы или пресмыкающиеся. Можно сказать, что походка - это некий колебательный процесс, который поддерживается и управляется очень дозированным вводом энергии. Но в основном энергия все же сохраняется в системе, причем в форме как кинетической (движения частей тела), так и потенциальной (положение тела, напряжения в сухожилиях).
О. Федор
>Распиши лагранжиан. Будет не сильно сложно.
ты пошутил? он те то что нелинеен, он просто супернелинеен с разрывами на всех производных по времени(лапы постоянно то касаются земли, то отрываются). можно пытаться расписывать его в малой окрестности по времени, но примерно этим(очень отдалённо) я и занимаюсь.
> Дело в том, что и наша скелетно-мышечная система отнюдь не жестко управляется,
> как управляются роботы или пресмыкающиеся.
вообще говоря, она управляется именно так, просто система управления очень сложная. учитывается очень много входных данных, причём учитываются очень не тривиально. но есть фишка - в установившемся процессе бега по ровной поверхности входных данных куда меньше, он представляет из себя не слишком сложный циклический процесс, который можно попытаться описать. именно этим я и занимаюсь.
говорить, что этот путь ни на что не годен, думаю, несколько поспешно с твоей стороны - посмотри последнее видео, там волк бежит на всех четырёх лапах и его бег выглядит достаточно оптимально с энергетической точки зрения.
Подстава. Мне почему-то показалось, что то, чем я сейчас занимаюсь, называется инверсной кинематикой. Набрал в гугле и что я вижу на первой странице ссылок? Выстраданные мной за три дня методы её решения! Оказывается, человечеству они уже известны :/
Сейчас занимаюсь попытками заставить животное держать равновесие, если его толкнуть. Выглядит смешно, но кое-что получается :)
Suslik
может будет интересным
http://runevision.com/blog/labels/locomotion.html
но там реконструируют из готовых анимаций
Suslik
> ты пошутил? он те то что нелинеен, он просто супернелинеен с разрывами на всех
> производных по времени(лапы постоянно то касаются земли, то отрываются). можно
> пытаться расписывать его в малой окрестности по времени, но примерно этим(очень
> отдалённо) я и занимаюсь.
Лапы не касающееся земли - это частный случай лап касающихся земли. Сделай функцию
силаНаЛапе(расстояниеДоЗемли)
непрерывной, хоть и бизкой к нулю везде кроме земли. Функция Дирака (дельта-функция) спасет отца русской демократии.
Suslik
> вообще говоря, она управляется именно так, просто система управления очень
> сложная. учитывается очень много входных данных, причём учитываются очень не
> тривиально.
Добавь только то, что в систему управления входят также и собственные био-механические качества системы. Т.е. она не просто нервно-информационная.
> но есть фишка - в установившемся процессе бега по ровной
> поверхности входных данных куда меньше, он представляет из себя не слишком
> сложный циклический процесс, который можно попытаться описать. именно этим я и
> занимаюсь.
Напротив, я совсем не столь опрометчив. Разумеется периодический процесс проще оптимизировать. Детали разверну в следующем посте.
> говорить, что этот путь ни на что не годен, думаю, несколько поспешно с твоей
> стороны - посмотри последнее видео, там волк бежит на всех четырёх лапах и его
> бег выглядит достаточно оптимально с энергетической точки зрения.
Ты знаешь, такие видео, даже лучше, я уже видел, поэтому это и написал. И вместо
"бег выглядит достаточно оптимально с энергетической точки зрения"
лучше было действительно оптимально.
А ты знаешь, что такое оптимальный бег?
О. Федор
> Лапы не касающееся земли - это частный случай лап касающихся земли. Сделай
> функцию
> силаНаЛапе(расстояниеДоЗемли)
> непрерывной, хоть и бизкой к нулю везде кроме земли. Функция Дирака
> (дельта-функция) спасет отца русской демократии.
я знаю, что такое лагранжиан, я знаю, что такое функция дирака, я знаю, что такое уравнение лагранжа. но я слабо представляю, как для этого случая его составить и численно решить. будем считать, что я не обладаю достаточным скиллом и поэтому иду по неоптимальному пути.
> Добавь только то, что в систему управления входят также и собственные
> био-механические качества системы. Т.е. она не просто нервно-информационная.
а ты уверен, что сам догадываешься, как все эти "не просто нервно-информационные" качества учесть в функционале энергии? и ты на полном серьёзе представляешь, как не эвристиками его минимизировать в реалтайме?
> Ты знаешь, такие видео, даже лучше, я уже видел, поэтому это и написал.
несколько удивляет слово "даже". если то, что я написал за два вечера выдерживает хоть какую-то конкуренцию с тем, над чем люди бог знает сколько работают, мне это очень льстит. к тому же что-то мне подсказывает, что все эти исследования по минимизации энергии сводятся к тому, что берётся начальное приближение(грубая анимация) и при помощи вариаций ищутся локальные минимумы энергетического функционала над ней. ну удачи им, их подход, наверное, иногда даёт куда более убедительные результаты, чем мой. зато иногда и мой подход даёт достаточно убедительные результаты, следовательно, он имеет право на жизнь и его я ещё планирую какое-то время поразвивать. ты меня пока не убедил, что этот путь тупиковый.
Рассмотрим периодический тип движения (бег, прыжки, ползанье и т.п.).
Очевидно, что в этом случае все "приводные функции" (т.е. функции напряжения мышц F, которыми и управляет нервная система) будут периодичными, и более того, их период T во времени будет совпадать.
Поэтому эти функции можно разложить в ряд Фурье и таким образом свести задачу оптимизации движения к поиску минимума функции расхода энергии W(ai), которая зависит от коэффициентов Фурье ai как от параметров.
При расчете нужно однако иметь в виду, что у человека и животных есть два типа мышечных волокон: быстрые и медленные.
Для первых характерно то, что быстро развивают нужную силу, но в них расход энергии пропорционален времени х сила, а "медленные" в состоянии развивать силу (без движения) без расхода энергии. Именно поэтому, для животных имеющих запас мощности, выгоден режим загрузки (быстрых) мышц короткими импульсами.
Рассмотрим упрощенную модель тетрапода ("волка")

Здесь считается, что бедренные и плечевые шарниры сферические, т.е. имеют по три степени свободы, две поворота и одну вращения.
"Колена" - цилиндрические шарниры по одной степени свободы.
Шея и хвост могут поворачиваться только вокруг точки прикрепления к корпусу, т.е. имеют по две степени свободы.
Таким образом всего (3+1)*4+2*2=20 степеней свободы.
Если ограничиваться только симметричными аллюрами, то коэффициенты Фурье парных органов (ног) будут совпадать (будет только сдвинута на 180 начальная фаза) и таким образом задачу можно будет свести к поиску (3+1)*2+2*2=12 функций F.
Если для представления каждой функции ограничится 5 коэффициентами Фурье, то при поиске минимума функции расхода энергии W достаточно ограничится 60 параметрами.
В правой части рисунка показана модель "мышцы", которая состоит из последовательно включенных актуатора, представляющего мышцу, и пружинного упругого элемента, имитирующего упругость сухожилия и собственно мышцы.
Suslik
> я знаю, что такое лагранжиан, я знаю, что такое функция дирака, я знаю, что
> такое уравнение лагранжа. но я слабо представляю, как для этого случая его
> составить и численно решить. будем считать, что я не обладаю достаточным
> скиллом и поэтому иду по неоптимальному пути.
Отложим пока это. Но без лангранжиана не обойтись, если придется рассматривать не периодические движения.
Suslik
> а ты уверен, что сам догадываешься, как все эти "не просто
> нервно-информационные" качества учесть в функционале энергии? и ты на полном
> серьёзе представляешь, как не эвристиками его минимизировать в реалтайме?
Проблема-то как раз в том, что их нужно не учитывать, а рассчитывать, причем исходя из конкретных механических особенностей системы и неких общих принципов миниманизации.
О. Федор
> При расчете нужно однако иметь в виду, что у человека и животных есть два типа
> мышечных волокон: быстрые и медленные.
> Для первых характерно то, что быстро развивают нужную силу, но в них расход
> энергии пропорционален времени х сила, а "медленные" в состоянии развивать силу
> (без движения) без расхода энергии. Именно поэтому, для животных имеющих запас
> мощности, выгоден режим загрузки (быстрых) мышц короткими импульсами.
> Рассмотрим упрощенную модель тетрапода ("волка")
вот это оказалось очень полезно. у меня было сделано именно так, но я вообще не имел понятия, почему с такой моделью получаются самые удобоваримые
результаты
> Очевидно, что в этом случае все "приводные функции" (т.е. функции напряжения
> мышц F, которыми и управляет нервная система) будут периодичными, и более того,
> их период T во времени будет совпадать.
периодичны по чему? по времени? ну так время для этих функций - всего лишь один из туевой хучи параметров.
>Если для представления каждой функции ограничится 5 коэффициентами Фурье, то при поиске минимума функции расхода энергии W достаточно ограничится 60 параметрами.
опять же, с чего вдруг ты рассматриваешь только функции времени? мало того, что эти функции зависят от кучи внешних параметров(ориентация, текущая скорость, наклон поверхности), так они зависят ещё и друг от друга, причём достаточно прямо: именно эту зависимость и пытается разрешать инверсная кинематика.
это я к тому, что даже если рассматривать установившийся процесс бега, где тело находится примерно в одном положении, период постоянный, возможно даже удастся найти каким-нибудь градиентным спуском численное решение аналитического уравнения на минимизацию энергии, но это будет мало того, что очень частый случай(если существо запнётся за камень, начнёт происходить просто что-то неведомое), так ещё и вовсе не факт, что это получится точнее, чем то, какой подход использую я.
но всё же главное, на мой взгляд, преимущество моего метода, которого лишён твой - адаптация к внешним возмущениям. во втором видео показано, что будет, если на животное сверху сильно надавить - оно не теряется, а идёт, прогибаясь.
на мой взгляд, если решение можно, пусть и грубо, задать в явном виде, зато в общем случае, то толку будет больше, чем найти чуть более точно решение в частном случае. применительно к этой задаче в смысле.
Suslik
> периодичны по чему? по времени?
Ага
> ну так время для этих функций - всего лишь один из туевой хучи параметров.
Нет, время - это выделенный параметр.
> опять же, с чего вдруг ты рассматриваешь только функции времени? мало того, что
> эти функции зависят от кучи внешних параметров(ориентация, текущая скорость,
> наклон поверхности), так они зависят ещё и друг от друга, причём достаточно
> прямо: именно эту зависимость и пытается разрешать инверсная кинематика.
Фокус в том, что тебе этого ничего не надо. Эти функции F - это на самом деле функции актуаторов, их координат. Не больше и не меньше.
Suslik
> это я к тому, что даже если рассматривать установившийся процесс бега, где тело
> находится примерно в одном положении, период постоянный, возможно даже удастся
> найти каким-нибудь градиентным спуском численное решение аналитического
> уравнения на минимизацию энергии, но это будет мало того, что очень частый
> случай(если существо запнётся за камень, начнёт происходить просто что-то
> неведомое), так ещё и вовсе не факт, что это получится точнее, чем то, какой
> подход использую я.
Никакие случайности конечно не учитываются. Процесс строго периодичен и предсказум.
Suslik
> но всё же главное, на мой взгляд, преимущество моего метода, которого лишён
> твой - адаптация к внешним возмущениям. во втором видео показано, что будет,
> если на животное сверху сильно надавить - оно не теряется, а идёт, прогибаясь.
К постоянным или даже к периодичным известным воздействиям мой метод (если уж ты его так назвал) тоже сможет адаптироваться.
Suslik
> на мой взгляд, если решение можно, пусть и грубо, задать в явном виде, зато в
> общем случае, то толку будет больше, чем найти чуть более точно решение в
> частном случае. применительно к этой задаче в смысле.
В явном виде решения не будет. Это определенно.
Решение возможно тольько как некий найденный в итерационном процессе экстремум.
О. Федор
ты предлагаешь составить выражение для функционала искомой функции, котрый мы будем минимизировать. думаю, бессмысленно спорить с тем, что искать его имеет смысл только численно. следовательно, только с некоторой погрешностью. нетрудно заметить, что искомая функция имеет очень резкие переломы, хотя бы при касании лапой земли. функции с разрывными производными плохо аппрокисимируются по фурье, а ты предлагаешь взять десяток первых гармоник.
заметим, опять же, что результат, близкий к оптимальному, у нас изначально есть - природа. так откуда уверенность, что функция, описанная "примерно как в природе" будет менее энергетически выгодной, чем функция, найденная численно, но с существенно погрешностью?
я бы с радостью зацепился за твою идею, если бы её было сколько-то удобно приспособить к задаче, которую я перед собой поставил. прежде всего это - игровая механика, всё требуется считать в реалтайме, все внешние условия постоянно меняются, нужно к ним быстро адаптироваться и единственное требование - чтобы результат выглядел убедительно.
Тема в архиве.