Как найти положение в моделировании динамики твердого тела с помощью кинетической энергии

Я пытаюсь реализовать динамику твердых тел для своего моделирования. Я пытаюсь смоделировать тенсегрити, как в прикрепленной статье.

Я следую статье: Динамические уравнения движения для 3- мобильный робот на базе тенсегрити

Согласно этой статье и тому, что я прочитал до сих пор, общий процесс таков:

Для каждой панели:

  • A) определить положение стержня (q): для этого мне нужен вектор положения и вектор ориентации. У меня есть это, так как это моя начальная позиция.
  • B) Примените начальную скорость: которая равна 0
  • C) Найти кинетическую энергию
  • D) Найти потенциальную энергию
  • E) Найдите крутящий момент

Для всей системы:

  • А) Найти кинетическую энергию
  • Б) Найти потенциальную энергию
  • C) Найти крутящий момент

Мой вопрос заключается в том, как найти новую позу (положение и ориентацию) каждого стержня в соответствии с кинетической энергией, потенциальной энергией и Крутящий момент?

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

Я просматривал эти книги и читал некоторые записи, но практически не понимал, как это сделать.

  1. Алгоритмы динамики твердого тела, Рой Фезерстоун
  2. Физика для разработчиков игр, Дэвид М. Бург
  3. Физическое моделирование, Дэвид Барафф

Дополнительное пояснение, если возможно:

1) По сути, матрица W, которая требует углов φ, θ,, будут ли эти углы углами базовой системы отсчета для всей конструкции? Не углы для каждого бара, потому что это не φι, я полагаю, это для всей системы?

2) По поводу матрицы инерции подвижной системы отсчета, я так понимаю это должно относиться к каждому бару? Но поскольку dM/dq для всей системы, какой должна быть матрица  Imb?

3) Как факторизовать M(q)

4) В документе это описано через uCoв кабелях. Я хотел бы попробовать что-то еще, стержни соединены вместе в центре, и каждый из них можно было бы перемещать только в осевом направлении. Итак, я думаю, мне придется добавить силу для каждого бара и повлиять на это?

Если у вас есть какая-либо информация, не могли бы вы сообщить мне?


person Apollon1954    schedule 20.08.2015    source источник
comment
Извините, у меня сейчас мало времени, я уточню позже. Кратко о ваших разъяснениях: 3) поскольку вы можете факторизовать каждый диагональный блок отдельно, вы можете использовать прямой метод, попробуйте разложение LU или QR. 1) и 2), каждая W предназначена для разных стержней, а общая форма выражается через 2 угла φ, θ, которые вы, в свою очередь, должны выразить через углы в si (рисунок поможет, я думаю). ϕi, скорее всего, будет бесполезным, так как это продольное вращение стержня. I‹sub›MB‹/sub› определяется соотношением (4), а I‹sub›FB‹/sub› = W‹sup›T‹/sup›I‹sub›MB‹/sub›W   -  person Cimbali    schedule 28.08.2015
comment
Я не уверен, что вы спрашиваете в 4) но давайте сначала решим начальную проблему, а затем только изменить ее.   -  person Cimbali    schedule 28.08.2015


Ответы (1)


Ответом на ваш вопрос является уравнение 12 в вашей статье, которое дает вам ускорение в момент времени t.

Ускорение вычислений

Если вы внимательно посмотрите на уравнение 12, то увидите, что каждый член определен ранее (за исключением, может быть, гравитационных сил, которые -g * mi вдоль оси z для каждого узла i, таким образом, f gi = [0, 0, -g * mi]). Я рекомендую вам начать строить/вычислять каждый из этих терминов (с учетом замечаний об изменении базиса для I).

Чтобы дифференцировать M(q), помните, что все mi, li, r1i и r2i постоянны, поэтому только W имеют ненулевую производную:

отличие M от q

Затем просто различайте каждый термин внутри

Остается только неизвестное, то есть ускорение, записанное в статье как q с двумя точками сверху

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

Интеграция

Это упущено из бумаги, но не слишком сложно. Поскольку вам нужны скорости для вычисления ускорения, вам придется использовать интегратор первого порядка, такой как Semi-Implicit метод Эйлера например.

Таким образом, скорость и положение должны быть обновлены следующим образом:

простая интеграция первого порядка

person Cimbali    schedule 26.08.2015
comment
Спасибо за ваш ответ, это было действительно полезно! Я реализовал и закодировал большую часть процесса, и я пытаюсь понять некоторые части более подробно. Я добавил те, что по вопросу. - person Apollon1954; 27.08.2015
comment
Чтобы уточнить то, что я объяснил выше, в том, что мне интересно делать. По сути, я хотел бы иметь стержни, центр масс которых находится в том же положении, что и другие, но имеют другую ориентацию. Система отсчета всей системы устанавливается в том же положении, что и центр. Динамика стержней должна заключаться в том, что после приложения силы к любому из стержней он будет двигаться линейно по своей оси. - person Apollon1954; 27.08.2015
comment
Однако их ориентация в системе отсчета стержня не изменится. Любое движение в любом из стержней вместе с внешними силами (т.е. силой тяжести) воздействует на систему отсчета системы (вращая или изменяя ее положение). Если у вас есть какие-либо ссылки для чтения по этому поводу или какие-либо предложения о том, как я могу сообщить свой код, пожалуйста, дайте мне знать. Еще раз спасибо за ваш ответ, очень полезно! - person Apollon1954; 27.08.2015