2015-01-19 4 views
1

Я построил простой симулятор с помощью JBox2D, который включает в себя персонаж, построенный из коллекции тел и четырех револьверных суставов. У меня возникла проблема: мне нужно точно восстановить «позу» этого персонажа, учитывая список совместных углов, скоростей суставов и положения туловища/вращения/скорости/угловой скорости.Как настроить угол и скорость RevoluteJoint точно?

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

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

Любая помощь приветствуется. Благодарю.

ответ

0

Суставы не имеют собственного угла или скорости. Это относительный угол и скорость двух тел, которые они соединяют, что определяет, что вы получаете, когда вызываете GetJointAngle и GetJointSpeed ​​(see the source).

Из этого следует, что существует такое прямое средство для установки этих вещей в суставе. Вам нужно установить угол и скорость, угловую скорость и т. Д. Тел, которые связаны с этим суставом.

+0

Учитывая одно полностью определенное тело (положение, скорость, угол, угловая скорость, т. Е. [X, v, \ theta, \ omega]) и совместные свойства (угол, угловая скорость) всех связанных тел, кажется I должен быть способен решить для кортежа [x, v, \ theta, \ omega] для всего остального. Будет ли использование setTransform() и других сеттеров вызвать проблемы с суставами при следующем тикеровании тика? – amm

+0

Нет, до тех пор, пока то, что вы устанавливаете, имеет смысл (это необходимо, если вы восстанавливаете значения из ранее запущенного симулятора). – iforce2d

Смежные вопросы