我想使用scipy.optimize
包来解决一个刚体优化问题(寻找对象的最佳平移和旋转)。参数化这个问题的一种方法是通过李群理论和李代数se(3)(通常称为扭曲坐标)。这意味着状态向量由6个参数组成(即pose = [rho_x, rho_y, rho_z, theta_0, theta_1, theta_3]
),通过所谓的“wedge”或“hat”算子和矩阵幂运算,可以从SE(3)变换矩阵(平移向量和旋转矩阵的组合)获得SE(3)变换矩阵。(我发现this cheat-sheet是一个很好的概述)
我的问题是scipy能否用于优化由扭曲坐标参数化的3D姿势?我在某个地方读到过这样的问题需要“流形优化”方法。那么我可以使用scipy的least_square()
或minimize(method="BFGS")
吗?还是说这些只适用于平坦的欧氏空间
另外,如果有人知道scipy用于解决3D姿势优化问题的任何例子,这也会对我有很大帮助。过去几天我一直在寻找例子,但没有太大的成功。
这个问题是我在robotics stackexchange here上发布的一个更一般的问题的具体实现部分。
1条答案
按热度按时间7dl7o3gd1#
我假设你对李群和李代数有很好的理解。如果使用se(3)作为变量,通过计算损失将其转化为SE(3),则问题是无约束的,易于通过Scipy优化。那么,你的主要困难是什么?
要将se(3)(李代数)转换为SE(3)(李群),您也可以使用以下代码:
验证: