SVD求解Ax=0(外参求解)

源于计算机视觉life的LiDAR+视觉+IMU多传感器融合SLAM:原理推导+源码逐行详解+项目实战

SVD求解Ax=0

首先,我们需要了解四元数的基本概念。四元数是由三个虚部和一个实部组成的复数扩展,可以用来表示三维空间中的旋转。四元数的乘法规则如下:

q 1 ⊗ q 2 = [ q 1 ] L q 2 = [ q 2 ] R q 1 q_1 \otimes q_2 = [q_1]_L q_2 = [q_2]_R q_1 q1q2=[q1]Lq2=[q2]Rq1

其中,

  • [ q 1 ] L [q_1]_L [q1]L 是左乘矩阵:
    [ p w − p x − p y − p z p x p w − p z p y p y p z p w − p x p z − p y p x p w ] \begin{bmatrix}p_w & -p_x & -p_y & -p_z\\p_x & p_w & -p_z & p_y\\p_y & p_z & p_w & -p_x\\p_z & -p_y & p_x & p_w\end{bmatrix} pwpxpypzpxpwpzpypypzpwpxpzpypxpw
  • [ q 1 ] R [q_1]_R [q1]R 是右乘矩阵:
    [ q w − q x − q y − q z q x q w − q z q y q y q z q w − q x q z − q y q x q w ] \begin{bmatrix}q_w & -q_x & -q_y & -q_z\\q_x & q_w & -q_z & q_y\\q_y & q_z & q_w & -q_x\\q_z & -q_y & q_x & q_w\end{bmatrix} qwqxqyqzqxqwqzqyqyqzqwqxqzqyqxqw

化简一下,即:

  • [ q 1 ] L = q w I + [ 0 − q v → q v → [ q v → ] × ] [q_1]_L = q_w I + \begin{bmatrix}0 & -\overrightarrow{q_v}\\ \overrightarrow{q_v} & [\overrightarrow{q_v}]_{\times}\end{bmatrix} [q1]L=qwI+[0qv qv [qv ]×]
  • [ q 1 ] R = q w I + [ 0 − q v → q v → − [ q v → ] × ] [q_1]_R = q_w I + \begin{bmatrix}0 & -\overrightarrow{q_v}\\ \overrightarrow{q_v} & -[\overrightarrow{q_v}]_{\times}\end{bmatrix} [q1]R=qwI+[0qv qv [qv ]×]

其中,

  • [ a ] × ≜ [ 0 − a z a y a z 0 − a x − a y a x 0 ] [\mathbf{a}]_{\times} \triangleq \begin{bmatrix}0 & -a_z & a_y\\a_z & 0 & -a_x\\-a_y & a_x & 0\end{bmatrix} [a]× 0azayaz0axayax0

对于SVD求解Ax=0,举个例子,如lidar和IMU的外参标定,有以下关系

Q b h + 1 b k L q i l = Q l h + 1 l i R q l b Q^{b_k L}_{b_h+1} q^l_i = Q^{l_i R}_{l_{h+1}} q^b_l Qbh+1bkLqil=Qlh+1liRqlb

合并之后为:

( Q b h + 1 b k L − Q l h + 1 l i R ) q l b = 0 (Q^{b_k L}_{b_h+1} - Q^{l_i R}_{l_{h+1}}) q^b_l = 0 (Qbh+1bkLQlh+1liR)qlb=0

通常来说,我们会收集若干个IMU和lidar的相对旋转和平移,则可以联立如下:

[ Q b n − 1 b n L − Q l n − 1 l n R Q b n − 2 b n − 1 L − Q l n − 2 l n − 1 R ⋮ Q b 0 b 1 L − Q l 0 l 1 R ] q l b = A 4 n × 4 q l b = 0 (1) \begin{bmatrix} Q^{b_n L}_{b_{n-1}} - Q^{l_n R}_{l_{n-1}} \\ Q^{b_{n-1} L}_{b_{n-2}} - Q^{l_{n-1} R}_{l_{n-2}} \\ \vdots \\ Q^{b_1 L}_{b_0} - Q^{l_1 R}_{l_0} \end{bmatrix} q^b_l = A_{4n\times 4} q^b_l = 0 \tag{1} Qbn1bnLQln1lnRQbn2bn1LQln2ln1RQb0b1LQl0l1R qlb=A4n×4qlb=0(1)

相当于已知一个 4 n × 4 4n\times 4 4n×4的小矩阵,求出一个 4 × 1 4\times 1 4×1向量的最优解,通常 n > 4 n > 4 n>4,因此,这是一个基本的超定方程组求解问题,通常使用SVD方法求解。

即将A矩阵进行SVD分解,得

U D V T x = 0 UDV^T x = 0 UDVTx=0

这里U矩阵和V矩阵都是正交矩阵(类比旋转矩阵,不改变大小),D是奇异值由大到小的对角矩阵,因此等价求解

D V T x = 0 DV^T x = 0 DVTx=0

然后,我们令 V T x = y V^T x = y VTx=y,y仍然是一个四元数,所以 ∣ ∣ y ∣ ∣ = 1 ||y||=1 ∣∣y∣∣=1

当仅当 y = [ 0 , 0 , 0 , 1 ] T y=[0,0,0,1]^T y=[0,0,0,1]T时, D y Dy Dy取得最小值,则 x = V ∗ [ 0 , 0 , 0 , 1 ] T x=V*[0,0,0,1]^T x=V[0,0,0,1]T

此时对应的 x x x即为V矩阵中最小奇异值对应的列向量,然后将其转换成四元数即为所求的旋转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值