我正在尝试使用Python
和SciPy
解决作为优化问题的Inverse Kinematics (IK)任务。在2D环境中存在一个机械臂,我想在笛卡尔空间中达到特定目标。
我已经使用trust-region constrained method提出了问题,并且可以解决问题。
但是,我想将其与SLSQP进行比较。
在使用SLSQP
时,我用恒定目标函数(例如1
)和到达任务作为平等约束来表示问题。 em>(约束函数对应于当前机器人关节位置的Forward Kinematics (FK))。
此公式会导致以下错误:
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]。不幸的是,我在 Stack Overflow 或 GitHub 上找到的所有线程的讨论都非常糟糕,没有定论的答案。
起初,我认为这可能是由于我的 Jacobian 不够方形:
>>> print(J)
[[-2.51189432 -1.81188199 -0.83828558]
[ 0.39717558 -0.31695518 -0.5452314 ]]
但是后来我检查了文档和tutorial是否使用SLSQP,如您所见,该示例的相等约束还具有非平方雅可比矩阵,并且不会产生此Singular matrix C in LSQ subproblem
错误。
此外,我已经研究过将等式约束条件公式化为两个不等式约束条件,并且这种方法确实有效。但是,我必须做一些根本上是错误的事情,当然使用等式很可能是解决问题的正确方法。
所以,我想我的问题可以归结为:
-这个错误的真正含义是什么?
-我做错了什么?
-我可以在问题表述的哪一点介绍它?