如何计算李群SO(3)上的雅可比?推导与basalt代码不符原因咨询
SO(3)累积B样条雅可比推导与basalt实现不一致问题
问题场景
- 计算李群SO(3)相关雅可比过程中出现结果偏差,参考CVPR 2020累积B样条李群导数相关论文推导
- 自行推导目标偏微分表达式后,结果与basalt库
so3_spline.h中的对应实现不匹配 - 库中核心实现代码如下:
J_helper = coeff[i + 1] * res.matrix() * Jl_k_delta * Jl_inv_delta * p0.inverse().matrix();
常见偏差原因
- 扰动约定不统一:SO(3)雅可比推导分左扰动、右扰动两套约定,若推导时用的扰动方向和代码实现的约定相反,结果会差一个伴随变换项,这是该类问题最高发的诱因。
- B样条系数类型误用:代码中
coeff[i+1]是累积B样条的递推专属系数,若推导时直接套用普通均匀B样条的基函数系数,没有按累积形式做递推修正,会出现系数数值不匹配。 - 雅可比项顺序/类型错误:代码中
Jl_k_delta * Jl_inv_delta是k阶左雅可比与逆左雅可比的乘积项,若推导时搞反矩阵乘法顺序、误用右雅可比替代左雅可比,中间旋转关联项的结果会完全错位。 - 坐标系转换遗漏:代码末尾的
p0.inverse().matrix()作用是把全局坐标系下计算的雅可比转换到对应控制点的局部坐标系,若推导时直接输出全局雅可比、省略这步变换,结果会和代码输出的局部雅可比存在固定偏差。 - 近似阶数不匹配:若推导过程中对大旋转角场景用了小角度一阶近似省略高阶项,而代码实现用了无近似的精确左雅可比计算,旋转量较大时数值差异会非常明显。
内容的提问来源于stack exchange,提问作者milin
相关产品推荐
相关产品推荐

