Я работаю над проектом, в котором мне нужно смоделировать систему, которая в основном состоит из серии шаровых шарнирных соединений, прикрепленных к основанию, которое, в свою очередь, прикрепляется к призматическому соединению (рельсу).
Я прочитал « Алгоритмы динамики твердого тела» Роя Фезерстоуна , а также прочитал раздел « Динамика » в « Руководстве по робототехнике Спрингера» (также написанном Фезерстоуном).
Мне потребовалось много времени, чтобы привыкнуть к использованию его нотации «пространственный вектор» и «пространственная матрица», но после воссоздания всей его нотации вручную в качестве упражнения это просто хороший способ объединения 3х3 и Матрицы и векторы 3x1 на матрицы и векторы 6x6 и 6x1. Математика, которую он изобретает для выполнения операций, может быть немного утомительной для чтения, поскольку он перехватывает некоторые стандартные обозначения, но в целом все очень компактно, и его очень легко реализовать в MATLAB.
Моя проблема заключается в следующем: как добавить приводы в модель? Он проходит через явную настройку определений соединений, определений связей и т. Д., Но когда дело доходит до приводов или прикладываемых сил, он говорит что-то вроде: «Просто добавьте здесь и Боб станет вашим дядей!» - это вообще не обсуждается. В « Руководстве по робототехнике» он предлагает ввести ложное ускорение в неподвижное основание, чтобы добавить член силы гравитации, но не показывает, как добавить его в локальные координаты, и при этом он не упоминает, как добавить вход привода.
Любая помощь будет принята с благодарностью. Я подумал начать с другой книги, но это будет большим расходом моего времени, чтобы заново привыкнуть к другой системе обозначений. Я хотел бы двигаться вперед с этим, но я чувствую, что я всего в нескольких дюймах от финиша.
Если вы еще не сталкивались с библиотекой динамики твердого тела (RBDL), вы можете посмотреть, как они ее реализуют, и / или связаться с автором Мартином Фелисом.
источник
G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));
. Итак, что делает функцияapply
? Ну, я должен пойти в файл заголовка для любого классаbase_to_body
, но это соединение или тело? Кроме того, такие вещиmodel.base[j].inverse().apply(model.S[j])
не особенно понятны.