... или как страдать фигнёй на выходных. В тексте сумбур. Сразу говорю.
Навеяно вот этим постом и вот этим комментарием:
Концепт шагающего танка
#comment_207631296
Решил я похожую конструкцию протестировать в физическом движке.
Получилось следующее.
Собсно, что это.
Это 3д модель впихнутая со страшным треском в физический движок. Ноги переставляются процедурно, управляются физическими силами. Т.е. это не заранее посчитанная анимация, в каждой ноге как бы серва, которой мы отдаём команды.
Вес получился 55 тонн (поэтому движку так плохо), масса частей посчитана приблизительно на основе объёма. Т.е. большие части весят больше. Танк тупой, и просто переставляет ноги в фиксированной последовательности как советский заводной игрушечный луноход, т.е. это хоть и не анимация, под окружающую среду он не подстраивается. Можно научить. Но мне уже влом.
Ноги управляются инверсной кинематикой через CCD скрипт, который управляет напрямую соединениями. Как выяснилось, соединения между телами можно настроить так, что они будут вести себя как сервы.
А теперь почему не падает.
Для того чтобы тело упало проекция центра тяжести должна выйти за пределы опоры.
В данном случае проекция центра тяжести на пол между треугольниками образованными проекциями ног на землю, хотя и довольно близко к краю. Центр тяжести между трёх опорных ног - танк стоит. (и пошатывается потому что физ движку плохо из за огромных сил и маленьких деталей).
Похожий принцип используется дальше, когда эта махина начинает чапать в неизвестном направлении навстречу приключениям и падению в бездну с края карты. В этом случае танк плавно перемещает центр тяжести по кругу так, чтобы он всегда был отдалён от поднимаемой в данный момент ноги.
^^^ Задняя нога поднимается, центр тяжести между трёх остальных.
Это не единственный вариант ходьбы. Ещё можно сделать так:
Что я называю "метод Асимо". Аккуратно-аккуратно, чтоб не перевернуться, в стабильном положении поднимаем одну ногу, с осторожностью увидевшего огурец кота переставляем её вперёд, и смещаем центр тяжести в следующую позицию. Получается очень осторожно, и очень неэффективно. Никогда не упадём, и никуда не доберёмся.
Среди других возможных вариантов медленного движения ходьбой четырёхлапой машины балансирование на двух ногах. Либо на диагоналях, например, стоим на правой передней и левой задней ноге держим две вторые в воздухе и перемещаем вперёд, либо помещаем центр тяжести между передней или задней пары ног и балансируем. Поскольку 55 тонная махина не очень стабильна и бултыхается, я на это плюнул.
Наиболее эффективный вариант без создания бега и попыток конкурировать с Boston Dynamics, скорее всего будет тот, который реализовал - движение по синусоидам, когда центр тяжести плавно движется по кругу, а синусоидальный пульс по очереди подаётся для поднятия одной из ног для управления подъёмом ноги. Преимущества синусоидальных сигналов в том, что резкое включение "сервы" со всей дури спокойно может подбросить конструкцию и запустить её на орбиту.
^^^Вот так будет если на замедлять вставание в начале.
Избежать создания резких импульсов можно либо замедлив движение, либо используя движения по кривым и синусам/косинусам, которые позволяют плавно разгонять/замедлять объекты не расшатывая модель без нужды.
Синусы и синусоиды проскакивали в том числе в различных демках на сайте Кена Перлина. Того самого, который создал шум перлина и работал над "Трон"ом. Как выясняется включения плавных кривых позволяет создать более "органическое", что ли, движение в ряде случаев.
Из забавных моментов выяснилось, что в выбранной мной конструкции проблематично поднять ступни высоко, так как ступни упираются в колено. Но зато можно очень высоко задрать башню, за счёт складных многозвенных ног.
И на этом всё. Тема мне показалась интересной, поэтому и копнул.