Эта ошибка обычно возникает из-за того, что наш дискретный решатель не работает. Как следует из сообщения, пытались ли вы сократить дискретный период (также известный как временной шаг) при создании MultibodyPlant? Я предполагаю, что здесь происходит то, что ваши маленькие ссылки приводят к быстрой динамике, и поэтому вам нужны меньшие временные шаги для ее решения.
Исчезновение ссылки, скорее всего, связано с тем, что визуализатор уже отображает плохое состояние (разошлись, возможно, с большим количеством NaN). Так что визуализатор сам по себе мало что вам скажет.
При настройке дискретного решателя вам всегда нужна оценка шкалы времени вашей системы, исходя из физических свойств, которые вы хотите решить. В вашем случае и только потому, что я не знаю, приложили ли вы силы, представление о каждом звене как о простом маятнике позволит вам оценить масштаб времени, например, вычислив период этого маятника.
С вашими числами для физического маятника с инерцией Iyy = 0,001 (около конца звена движение вокруг z кажется ограниченным вашими суставами), m = 0,3, R = 0,05 (расстояние до COM), я получаю эффективную длину составного маятника L = I / (м * R) = 0,0667 м. С этим я получаю период T = 2 * pi * sqrt (L / g) = 0,52 секунды. Скажем, я бы сделал 500 шагов за период, тогда я бы оценил временной шаг dt = 1 мс.
Это очень приблизительная оценка, учитывая, что я ничего не знаю о вашей системе или внешних силах. Но резюмируя, я считаю, что ваша проблема - это временной шаг установки.
Edit
А как насчет допуска на проникновение? (MultibodyPlant::set_penetration_allowance()
). При наличии контакта MultibodyPlant::get_contact_penalty_method_time_scale()
даст вам приблизительную оценку времени контакта. Обычно вам нужно установить временной шаг, который позволяет комфортно разрешить эту динамику.