Вот что означают list () и set (). Здесь оба кажутся пустыми.
Эти аргументы являются историческими артефактами и почти никогда не являются тем, что вы хотите использовать. Я бы рекомендовал оставить их пустыми, как в приведенном вами примере. Первый ограничивает ограничение, чтобы рассматривать только тела, указанные в active_bodies_idx
. Второй ограничивает ограничение, чтобы рассматривать только группы столкновений, имена которых содержатся в active_group_names
. Обратите внимание, что концепция «группы столкновений» для аргумента active_group_names
имеет вид , а не , как и концепция «группы фильтров столкновений».
Есть ли способ установить эту функцию, чтобы она не проверяла
для столкновений во всех телах в пункте 1, но только для
столкновения между пунктом 1 и пунктом 2?
Вы были на правильном пути. Вы хотите добавить группу фильтра столкновений, которая содержит все тела в элементе 1, а затем настроить эту группу столкновений на игнорирование себя. Для следующего кода требуется привязка AddCollisionFilterIgnoreTarget()
, добавленная PR # 10085 .
tree.DefineCollisionFilterGroup("1_filtergroup")
tree.AddCollisionFilterGroupMember("1_filtergroup", "base_link", 1_model_id)
# Repeat the previous line for all bodies in item 1.
tree.AddCollisionFilterIgnoreTarget("1_filtergroup", "1_filtergroup")
Затем вы можете создать ограничение с желаемым поведением, вызвав ik.MinDistanceConstraint(tree, collision_tol, list(), set())
.
Наконец, в настоящее время у меня возникает следующая ошибка при использовании этого
функция: [2018-11-14 19: 39: 20.812] [консоль] [предупреждение] Попытка
вычислить расстояние между двумя элементами столкновения, по крайней мере один из которых
невыпуклый. ... есть ли другая причина этой ошибки
всплывет?
Как упомянул @ Russ Tedrake , все элементы столкновения сетки, прикрепленные к закрепленным (приваренным к миру) телам, преобразуются в невыпуклые объекты сетки в бэкэнде Bullet, независимо от выпуклость исходной сетки. Это прискорбно, но, скорее всего, не будет решено, так как весь код, связанный с RigidBodyTree
, подходит к концу. В целях IK вы можете обойти это, прикрепив сетку к фиктивному телу, которое соединено с миром призматическим или вращающимся соединением, верхний и нижний пределы которого равны 0. Это заставит сервер работать с выпуклой оболочкой. из сетки обеспечивают. Затем вам нужно будет удалить элемент, соответствующий фиктивному соединению, из конфигурации, возвращенной IK.