Math 累积同质变换:旋转有效,但平移不';T

Math 累积同质变换:旋转有效,但平移不';T,math,offset,registration,point-clouds,homogenous-transformation,Math,Offset,Registration,Point Clouds,Homogenous Transformation,我有3个点云(云0、云1和云2),使用地面激光扫描仪在3个不同位置获得。这些云在它们之间重叠,这意味着存在一个刚体三维体变换T,它正确地将一个云注册到另一个云上。我有两个这样的转换,T10,它将云1移动到云0;T20,将云2移动到云0(选择云0作为全局参考)。问题是,我如何找到云2和云1重叠的转换?我已经找到了旋转,但找不到平移向量。有可能吗 我通过将变换T20乘以T10的倒数得到的旋转,因为T10^(-1)=T01,因此T20*T01=T21。当我将此转换应用于云2时,它会正确地将云2旋转到云

我有3个点云(云0、云1和云2),使用地面激光扫描仪在3个不同位置获得。这些云在它们之间重叠,这意味着存在一个刚体三维体变换T,它正确地将一个云注册到另一个云上。我有两个这样的转换,T10,它将云1移动到云0;T20,将云2移动到云0(选择云0作为全局参考)。问题是,我如何找到云2和云1重叠的转换?我已经找到了旋转,但找不到平移向量。有可能吗

我通过将变换T20乘以T10的倒数得到的旋转,因为T10^(-1)=T01,因此T20*T01=T21。当我将此转换应用于云2时,它会正确地将云2旋转到云1(两个方向相同),但它们之间有一个偏移,我不明白为什么

这些变换只是齐次矩阵T(4x4),它只是旋转矩阵R(3x3)和平移向量T(3x1)的连接,对吗?旋转可以组合。我发现从云2到云1的旋转表明了这一点。但为什么这种转变会出现在翻译中

事实上,我有几个云,为了注册一个远离原点的云,我需要通过乘法累积几个变换(例如:T50=T54*T43*T32*T21*T10),我乘的越多,转换的差异就越大


我想说的是,尽管乘法累积了错误,但它们非常小,因为注册是手动完成的,并由ICP进行细化。事实上,成对应用任何变换都会导致几乎完美的重叠,但累积它们会导致翻译中的巨大偏差。旋转非常好,循环闭合实际上会产生单位矩阵。

你是否忽略了旋转对平移的影响

如果你有一个旋转R和平移v的变换T和另一个旋转Q和平移v的变换S,那么将T和S应用到点x的效果是得到y,其中

y = Q*(R*x+v) + u = Q*R + Q*v + u 
即组合变换具有旋转

P = Q*R
inv(R)
翻译

w = Q*v + u
- inv(R)*v
由此可知,T的逆变换具有旋转

P = Q*R
inv(R)
翻译

w = Q*v + u
- inv(R)*v
我们可以用4x4矩阵来表示这种变换,这是很常见的,通过这种方式,组合和应用变换可以减少矩阵乘法。但请注意,这在效率上是有代价的

上述S和T将由4x4矩阵M和N表示

M = ( Q u)
  = ( 0 1)
N = ( R v)
    ( 0 1)
那么组合变换T的代表L和S是

   L = M*N
将S应用于我们计算的点x

M*(x)
  (1)

结果的前三个组成部分是转换点的组成部分。

伙计,如果有一天你来到巴西,你可以用我的房子和车做任何你想做的事情。你为我节省了很多工作,我在写论文的过程中遇到了这个问题。非常感谢,这是基本的,但线性代数是我的弱点。只需应用旋转和平移。我试图在同一时间内完成所有操作,只是将所有转换相乘,并期望云正确移动。这些操作不是可交换的。在旋转点云之前,是否要将其移动到原点的中心?可能是CloudCompare在应用转换之前会这样做。Matlab和其他图书馆,比如Open3D,都有相应的功能,所以我只能让它们集中起来