1. 程式人生 > >變換矩陣理解

變換矩陣理解

T_{BC}

今天就來理解這個表示。這個表示一般有兩種叫法(假設B代表body,C代表camera)。

  1. 相機座標系到載體座標系的變化。
    1. 本質意思是如果有一個點的座標是在camera座標系中表示的,如果我們要將其在body座標系中表示。可以左乘這個變換矩陣。
  2. Camera pose respect with body。
    1. with的意思其實是在什麼座標系下的。所以對於T_{BC}都最右邊一列直接提取出來的三維座標,正好是camera的中心座標,在body座標系下的表示。
    2. 也相當於把camera座標系中的原點乘以T_{BC},就能得到camera在body座標系下的位置的表示。
    3. 也表示camera在body座標系中的位置和camera自己的朝向無關(不需要使用旋轉資訊就能得到位置)。

上面主要在說位置和平移,關於旋轉可以這樣理解:

  1. T_{BC}表示的旋轉是把camera座標系的三個軸,在body座標系中表示出來。也就是把camera座標系中的(0,0,1),(0,1,0),(0,0,1)三個點使用T_{BC}轉換到body座標系中。
  2. 如果把座標系看作一個有三條線的模型,T_{BC}可以把body座標系對應的模型旋轉成對應的camera模型。
    1. 具體旋轉的方式可以借用尤拉角,ZYX的尤拉角旋轉,可以使用座標軸模型,按照zyx順序做三次旋轉。每次都畫一個新的座標系,這樣整個旋轉可以手動完成。
    2. https://www.andre-gaschler.com/rotationconverter/這裡可以互動的研究旋轉的幾種表示的關係。

如果你在一個世界座標系中,把一個模型從A pose,變換為B pose。這樣的一個變換矩陣等於是把A座標系中的點(模型的頂點),在B座標系中表示出來。而在世界中可視化出來的A和B的關係是把A和B模型的頂點都表示在世界座標系中。

T_{BC}可以分為旋轉和平移兩次操作。

  1. 正向操作是先旋轉在加上平移。(C中的點在B中表示)
  2. 反向操作是先減去平移在乘以旋轉的轉置。(B中的點在C中表示)

當你要使用集合資訊來手動計算T_{BC}的時候。

  1. 先在B中寫出C的座標,這對應T_{BC}
    的平移部分。
  2. 畫出B和C的座標軸模型。
  3. 看怎麼使用zyx的順序,把B的座標軸模型旋轉為C。從而計算出尤拉角。
  4. 把尤拉角寫成旋轉矩陣。

在SLAM中,經常世界座標系就是第一幀的座標系。如果第一幀和物體移動方向不一致,就會出現計算的點雲傾斜。這個時候可以把感測器的座標系進行一些旋轉後再送入SLAM中計算。這等價於強制讓物體的移動方向在感測器座標系中是和軸對齊的。