Прямая коллокация / прямая транскрипция с многотельным растением - PullRequest
1 голос
/ 14 июля 2020

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

Я бы хотел использовать прямое совмещение, но когда я пытаюсь создать MultibodyPlant с time_step = 0.0 У меня ошибка segfault. Он отлично работает, когда я использую дискретное время (например, Multibodyplant (time_step = .005).

Однако, если я использую дискретное время, состояние больше не является непрерывным, поэтому я не могу использовать прямое сопоставление. Поэтому я попытался использовать прямую транскрипцию, и я получаю сообщение об ошибке

SystemExit: Failure at bazel-out/k8-opt/bin/systems/framework/_virtual_includes/context/drake/systems/framework/context.h:111 in num_total_states(): condition 'num_abstract_states() == 0' failed.

Я думаю, причина в том, что DirectTranscription не имеет assume_non_continuous_states_are_fixed, та же проблема, что и в этом вопросе: прямая транскрипция для походки по компасу . Возможно, самое простое решение моей проблемы - запросить эту функцию ..

1 Ответ

0 голосов
/ 24 июля 2020

Выше я рекомендовал сделать добавить assume_non_continuous_states_are_fixed к DirectTranscription. Но причина того, что эта опция еще не реализована, немного тонка, поэтому я добавлю ее сюда.

Фактически не MultibodyPlant добавляет абстрактное состояние, а SceneGraph. Для динамики / планирования вам нужно только SceneGraph, если вы полагаетесь на контактные силы в своей динамике. Для acrobots / cart-poles, et c вы уже можете использовать MultibodyPlant с DirectTranscription, передав только MBP (не SceneGraph) в оптимизацию. А для систем, которые выполняют устанавливают и разрывают контакт, я бы сказал, что DirectTranscription может быть не тем алгоритмом, который вам нужен; хотя нет жестких правил, говорящих, что это не сработает. Просто вы получите жесткие дифференциальные уравнения, которые трудно переписать при разумной оптимизации траектории, которая явно не объясняет контакт.

Думаю, я знаю ваше приложение, в котором используются колеса, которые в контакте и оставайтесь на связи. Это означает, что вам действительно нужен SceneGraph. Это могло быть так, если бы эта в настоящее время отсутствующая комбинация имеет смысл, и мы должны добавить ее.

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