数学概念
1.矩阵乘法
01.两个矩阵A和B相乘,需要满足A的列数等于B的行数
02.单位矩阵 如果A是n×n矩阵,I是单位矩阵,则AI= A, IA = A
03.逆矩阵 矩阵A的逆矩阵 A^-1, A A^-1=A^-1A= I,I是单位矩阵
当一个矩阵没有逆矩阵的时候,称该矩阵为奇异矩阵
04. 转置矩阵 矩阵的转置就是行列互换,用A^T表示A的转置矩阵
05. 对称矩阵: 如果一个矩阵转置后等于原矩阵,那么这个矩阵称为对称矩阵。由定义可知,对称矩阵一定是方阵
06. 若矩阵为方阵且其逆矩阵存在时,矩阵的逆的转置 等于 矩阵的转置的逆 设A为可逆方阵 (A^{-1})^T = (A^T)^{-1}),
07. 矩阵的逆等于矩阵的转置的矩阵称为正交矩阵,满足 ( Q^{-1} = Q^T ) 或等价地 ( Q^T Q = I )(其中 ( I ) 为单位矩阵
2.矩阵乘法结合律
遵循矩阵乘法结合律 最终变换结果相同
数学上等价:Tx × P^T = (P × Tx^T)^T
左乘:点云需要转置
3. 矩阵分块运算--分块上下三角矩阵
P2 =R*P1 + T1 (先旋转再平移)变换矩阵的方式
T1= R*T2 故 T2 = R^T *T1
(先平移再旋转)
P2 = R(P1 + T2) = R*P1 + R*T2
分块矩阵的计算 分块矩阵 上三角矩阵的乘法
[ R,T [ P, = [RP+T,
0,1] * 1] 1]
物理概念
计算机实现
points_h = np.hstack([points, np.ones((points.shape[0], 1),dtypes=np.float32)])
# 左乘:T × P^T
transformed = (transform_matrix @ points_h.T).T
## points_h[:,:3] = np.dot(TX_L_V, points_h.T).T[:.:3]
###左乘 外侧相同,内测从右往左
P_imu = T_vehicle_2_imu * T_lidar_2_vehicle * P_lidar
## 矩阵乘法的顺序是从右向左 从右向左应用变换:先应用 T_lidar_to_vehicle,再应用 T_vehicle_to_imu
相当于:点_imu = T_vehicle_to_imu * (T_lidar_to_vehicle × 点_lidar)
点_imu = T_vehicle_to_imu * T_lidar_to_vehicle * 点_lidar= T__lidar_2_imu * 点_lidar
T_lidar_to_imu = T_vehicle_to_imu × T_lidar_to_vehicle
### 注意:这里使用的是左乘,即变换矩阵依次左乘点坐标
使用 np.dot() 或 @ 运算符进行矩阵乘法
注意矩阵乘法的顺序(从右向左应用变换)