



























下面给你最小、正确且高效的 numpy 实现,把t11 时刻的 87 个目标齐次矩阵对齐到 t0 坐标系。
重点:齐次矩阵变换的顺序。
ego 坐标 → world 坐标
R_prevel2wld[t]
shape: [200, 4, 4]
object local → ego 坐标
R_curpt2curvels[obj, t]
shape: [87, 200, 4, 4]
你要把 t=11 的所有目标坐标 变换到 t=0 的坐标系。
对象坐标 → world → 另一 ego → 另一对象坐标
具体:
目标 @ t11 → ego11 → world → ego0 → 目标在 t0 坐标
设:
T_pt2ego[t] = R_curpt2curvels[:,t]T_ego2world[t] = R_prevel2wld[t]则:
T_object_11_in_ego0 =
inv(T_ego2world[0]) @
T_ego2world[11] @
T_pt2ego[11]
import numpy as np
t = 11
obj_num = R_curpt2curvels.shape[0]
T_e0_w = R_prevel2wld[0] # (4,4)
T_e11_w = R_prevel2wld[t] # (4,4)
T_obj11_e11 = R_curpt2curvels[:, t] # (87,4,4)
# world->ego0
T_w_e0 = np.linalg.inv(T_e0_w)
# 87 × 4 × 4
T_obj11_e0 = T_w_e0 @ T_e11_w @ T_obj11_e11
输出 shape = (87,4,4)
以后继续对齐到 t0,只需把 t 换掉:
t = k
T_obj_k_e0 = inv(T_e0_w) @ T_e_k_w @ T_objk_ek
不要这样:
inv(inv(A)@B)inv(A@B)@C@inv() 这种高成本操作会造成数值不稳定,而且会慢。
如果你希望一次性把所有 t 下的目标对齐到 t0:
T_w_e0 = np.linalg.inv(R_prevel2wld[0]) # (4,4)
# (200,4,4)
T_e_t = R_prevel2wld
# (87,200,4,4)
T_obj = R_curpt2curvels
# broadcast → (87,200,4,4)
T_all = T_w_e0 @ T_e_t @ T_obj
T_w_e0 @ T_e_t @ T_obj 是 batched broadcast → 不需要循环如你需要 torch 向量化版本或把旋转从 4×4 降为 SE2(3×3),我可以直接给成完整函数 👍
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。