变换矩阵左乘与右乘的区别和应用

一,变换矩阵左乘的应用

点P在坐标系A下进行了两次位姿变换。第一次变换矩阵为T1,第二次变换矩阵为T2。求点P两次连续变换矩阵的结果,以及最终位置。

要计算点 P 在坐标系 A 下经过两次位姿变换后的最终位置,可以按照以下步骤进行:

  1. 计算两次变换矩阵的组合变换矩阵。
  2. 将组合变换矩阵应用于点 P。

假设点 P 的初始位置为 P,第一次变换矩阵为 T1,第二次变换矩阵为 T2,最终位置可以通过以下步骤计算:

  1. 计算组合变换矩阵:T_combined = np.dot(T2, T1)
  2. 将组合变换矩阵应用于点 P:P_final = np.dot(T_combined, P)

注意这里的组合变换矩阵的计算,第二次变换T2左乘第一次变换T1。这里的关键是,点P在"同一坐标系"下进行了两次连续的变换,将后一次的变换左乘前一次的变换。如果还有第三次的变换,则第三次先左乘第二次变换,输出结果再左乘第一次变换。

以下是示例代码:

python 复制代码
import numpy as np

# 定义初始位置 P (假设 P 是一个齐次坐标)
P = np.array([x, y, z, 1])  # 请替换 x, y, z 为实际坐标

# 定义变换矩阵 T1 和 T2
T1 = np.array([
    [-0.992543, -0.0985432, -0.0717491, 1.81161],
    [0.0928758, -0.992582, 0.0784536, 4.71046],
    [-0.078948, 0.0712048, 0.994332, 0.126783],
    [0, 0, 0, 1]
])

T2 = np.array([
    [1.002, 0.005, -0.005, -0.034],
    [-0.005, 1.002, -0.013, -0.039],
    [0.005, 0.013, 1.002, -0.041],
    [0, 0, 0, 1]
])

# 计算组合变换矩阵
T_combined = np.dot(T2, T1)

# 计算 P 在 A 坐标系下的最终位置
P_final = np.dot(T_combined, P)

print("点 P 在 A 坐标系下的最终位置:")
print(P_final)

请将 P 的初始坐标 x, y, z 替换为实际的坐标值。

如果连续三次变换

点P在坐标系A下进行了两次位姿变换。第一次变换矩阵为T1,第二次变换矩阵为T2,第三次变换矩阵为T3。求点P三次连续变换矩阵的结果,以及最终位置。

要计算点 P 在坐标系 A 下经过三次位姿变换后的最终位置,可以按照以下步骤进行:

  1. 计算三次变换矩阵的组合变换矩阵。
  2. 将组合变换矩阵应用于点 P。

假设点 P 的初始位置为 P,三次变换矩阵分别为

T1

T2T3,最终位置可以通过以下步骤计算:

  1. 计算组合变换矩阵:T_combined = np.dot(np.dot(T3, T2), T1)
  2. 将组合变换矩阵应用于点 P:P_final = np.dot(T_combined, P)

以下是示例代码:

python 复制代码
import numpy as np

# 定义初始位置 P (假设 P 是一个齐次坐标)
P = np.array([x, y, z, 1])  # 请替换 x, y, z 为实际坐标

# 定义变换矩阵 T1, T2 和 T3
T1 = np.array([
    [-0.992543, -0.0985432, -0.0717491, 1.81161],
    [0.0928758, -0.992582, 0.0784536, 4.71046],
    [-0.078948, 0.0712048, 0.994332, 0.126783],
    [0, 0, 0, 1]
])

T2 = np.array([
    [1.002, 0.005, -0.005, -0.034],
    [-0.005, 1.002, -0.013, -0.039],
    [0.005, 0.013, 1.002, -0.041],
    [0, 0, 0, 1]
])

T3 = np.array([
    [0.999, -0.010, 0.020, 0.050],
    [0.010, 0.999, -0.030, 0.060],
    [-0.020, 0.030, 0.999, 0.070],
    [0, 0, 0, 1]
])

# 计算组合变换矩阵
T_combined = np.dot(np.dot(T3, T2), T1)

# 计算 P 在 A 坐标系下的最终位置
P_final = np.dot(T_combined, P)

print("点 P 在 A 坐标系下的最终位置:")
print(P_final)

请将 P 的初始坐标 x, y, z 替换为实际的坐标值。

二,变换矩阵右乘应用

以多传感器标定为例,激光A相对于激光O的变换矩阵为TA->O,激光B相对于激光A的变换矩阵为TB->A,求激光B相对于激光O的变换矩阵为多少?

要计算激光 B 相对于激光 O 的变换矩阵,可以将两个变换矩阵相乘。假设激光 A 相对于激光 O 的变换矩阵为 TA->O,激光 B 相对于激光 A 的变换矩阵为 TB->A,那么激光 B 相对于激光 O 的变换矩阵 TB->O 可以通过以下步骤计算:

  1. 计算组合变换矩阵:TB->O = np.dot(TA->O, TB->A)

注意这里每个变换矩阵的参考坐标系都不一样。TA->O是以激光O为参考系,TB->A是以A为参考系, TB->O 是以O为参考系。计算 TB->O 本质是激光B在O参考系下的变换矩阵。为了求激光B相对于激光O变换矩阵,需要在O参考系下,以激光A为过渡,计算TB->A右乘 TA->O,实现B激光参考坐标系转换的计算。

以下是示例代码:

python 复制代码
import numpy as np

# 定义变换矩阵 TA->O 和 TB->A
TA_O = np.array([
    [a11, a12, a13, a14],
    [a21, a22, a23, a24],
    [a31, a32, a33, a34],
    [0, 0, 0, 1]
])

TB_A = np.array([
    [b11, b12, b13, b14],
    [b21, b22, b23, b24],
    [b31, b32, b33, b34],
    [0, 0, 0, 1]
])

# 计算激光 B 相对于激光 O 的变换矩阵
TB_O = np.dot(TA_O, TB_A)

print("激光 B 相对于激光 O 的变换矩阵:")
print(TB_O)

请将 TA_OTB_A 替换为实际的变换矩阵值。

相关推荐
程序媛-徐师姐15 分钟前
基于 Python Django 的校园互助平台(附源码,文档)
开发语言·python·django·校园互助·校园互助平台
大数据追光猿39 分钟前
【深度学习】Pytorch项目实战-基于协同过滤实现物品推荐系统
人工智能·pytorch·python·深度学习·ai编程·推荐算法
师范大学生1 小时前
基于CNN的FashionMNIST数据集识别2——模型训练
python·深度学习·cnn
web137656076431 小时前
纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
python·django·fastapi
大模型铲屎官1 小时前
哈希表入门到精通:从原理到 Python 实现全解析
开发语言·数据结构·python·算法·哈希算法·哈希表
qq4054251971 小时前
基于python的旅客游记和轨迹分析可视化系统设计(新)
开发语言·python
m0_594526302 小时前
基于 PyQt5 实现分组列表滚动吸顶效果
开发语言·python·qt
thinkMoreAndDoMore3 小时前
深度学习(3)-TensorFlow入门(常数张量和变量)
开发语言·人工智能·python
kngines3 小时前
【Python量化金融实战】-第1章:Python量化金融概述:1.4 开发环境搭建:Jupyter Notebook、VS Code、PyCharm
python·量化金融
kngines3 小时前
【Python量化金融实战】-第1章:Python量化金融概述:1.2 Python在量化金融中的优势与生态
python·量化金融