Я пытаюсь решить задачу Inverse Kinematics (IK) как задачу оптимизации, используя Python
и SciPy
.В 2D-среде существует рука робота, и я хочу достичь определенной цели в декартовом пространстве.Я сформулировал свою проблему, используя метод ограничения области доверия , и он работает.Однако я хотел бы сравнить его с SLSQP .
. При использовании SLSQP
я формулирую проблему с помощью целевой функции constant (например, 1
) и достигающая задача в виде ограничения равенства (где функция ограничения соответствует прямой кинематике (FK) текущих положений соединения робота).
ThisФормулировка приводит к следующей ошибке:
Singular matrix C in LSQ subproblem (Exit mode 6)
Current function value: 0.0
Iterations: 1
Function evaluations: 6
Gradient evaluations: 1
После значительных усилий по поиску этой проблемы в Интернете, я нашел менее горстки людей, имеющих подобные проблемы [4] [5] [6] .И, к сожалению, все темы, которые я нашел в Переполнение стека или GitHub , имеют очень плохие обсуждения и не имеют окончательных ответов.
Сначала я подумал, что, возможно, это былоиз-за того, что мой Jacobian не был квадратным:
>>> print(J)
[[-2.51189432 -1.81188199 -0.83828558]
[ 0.39717558 -0.31695518 -0.5452314 ]]
Но затем я проверил документацию и учебник для использования SLSQP и, как вы можете видеть, равенство примераограничение также имеет неквадратичный якобиан, и это не приводит к этой ошибке Singular matrix C in LSQ subproblem
.
Кроме того, я исследовал формулировку ограничения равенства как двух ограничений неравенства, и это действительно сработало.Тем не менее, я, должно быть, делаю что-то в корне неправильно, и, конечно, использование равенства, скорее всего, будет правильным способом постановки проблемы.
Итак, я думаю, мой вопрос действительно сводится к:
- Чтодействительно ли эта ошибка означает?
- Что я делаю не так?
- В какой момент в формулировке проблемы я могу ввести ее?