Полностью соединенная многотельная система?

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

При создании одномерной системы сфер, например системы 1x1x4, я не сталкиваюсь с ошибками, и система ведет себя так, как ожидалось.

Пытаясь создать систему из восьми сфер в ориентации 2x2x2, я сталкиваюсь с ошибками мобилизации. Вот как выглядит система:

Система 2x2x2, где бирюзовые сферы являются центрами, а желтые сферы - соединяющими телами

И ошибка:

terminate called after throwing an instance of 'std::runtime_error'
  what():  This mobilizer is creating a closed loop since the outboard body already has an inboard mobilizer connected to it. If a physical loop is really needed, consider using a constraint instead.
Aborted (core dumped)

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


person Joaquin Giraldo-Laguna    schedule 11.05.2020    source источник


Ответы (1)


Одним из способов решения этой проблемы является использование элемента Drake втулки (по сути, жесткой пружины и демпфер) для имитации ограничения «сварки». В Drake есть хороший пример такого подхода — см. examples/multibody /four_bar.

Общая идея состоит в том, чтобы разорвать топологические петли, распилив одно или несколько тел, а затем снова сварив их вместе с помощью втулки (которая не считается топологической петлей).

person Sherm    schedule 11.05.2020
comment
Возможно, это было именно то, что я искал, так как я все равно хотел немного соответствия между этими телесными связями! Я посмотрю, как это пойдет. - person Joaquin Giraldo-Laguna; 13.05.2020
comment
Я попытался сделать это с одним соединением в той ориентации, которая у меня была, но столкнулся с некоторыми странными ошибками. Это попытка соединить коннекторы из двух разных сфер по оси Z, которые нужно сварить между собой. Установка k_z выше ~210 приводит к сбою визуализатора или исчезновению задействованных тел. С d_z есть аналогичный лимит. Есть также другие необъяснимые явления, такие как суставы, которые, кажется, игнорируют ограничения суставов и т. д. - person Joaquin Giraldo-Laguna; 13.05.2020
comment
Интересно, у вас проблемы со стабильностью? Посмотрите, работает ли он при меньшем размере шага. Если вы выполняете непрерывную интеграцию, вы также можете попробовать неявный интегратор. Если вы еще этого не сделали, я бы предложил создать очень маленькую простую систему для отладки, а затем создать полную систему после того, как маленькая система будет работать удовлетворительно. - person Sherm; 14.05.2020
comment
Я нашел константы, которые работали для моей системы, и теперь она ведет себя намного лучше! Да, я сначала тестировал только "сварку" двух тел, а потом расширил до остальных. Проверьте это: i.imgur.com/ewKbyX8.png К сожалению, я до сих пор не решил мою проблему с совместными ограничениями и поместил ее здесь: вопросы/61788760/ - person Joaquin Giraldo-Laguna; 14.05.2020