物体6D位姿的含义

6D是指6个自由度,代表了3个自由度的位置(也叫平移(Translation)),以及3个自由度的空间旋转。那么具体是如何变换的呢?

如果了解相机的内外参,就可以得到下面的表示: T c = R c w ∗ T w + t c w T_c = R_{cw} * T_w + t_{cw} Tc=RcwTw+tcw,其中 R c w R_{cw} Rcw代表由世界系到相机系的旋转, t c w t_{cw} tcw代表由世界系到相机系的平移。

而物体的6D位姿,是指相机系下物体的 R t Rt Rt,也即将物体本身的坐标系当成世界系,变换到相机系的 R t Rt Rt,则可以得到下面的表示: T c = R c m ∗ T m + t c m T_c = R_{cm} * T_m + t_{cm} Tc=RcmTm+tcm,其中 R c m R_{cm} Rcm代表由物体的世界系到相机系的旋转, t c m t_{cm} tcm代表由物体的世界系到相机系的平移。

具体一个例子,数据来自preprocessed LineMod dataset数据集,物体本身的坐标系,当成世界系,其坐标值为 T m T_m Tm
物体6D位姿的含义_第1张图片
相机坐标系,此时物体的坐标为 T c T_c Tc
物体6D位姿的含义_第2张图片
基于给定的GT的物体6D位姿:
cam_R_m2c: [0.09630630, 0.99404401, 0.05100790, 0.57332098, -0.01350810, -0.81922001, -0.81365103, 0.10814000, -0.57120699],
cam_t_m2c: [-105.35775150, -117.52119142, 1014.87701320],
使用 T c = R c m ∗ T m + t c m T_c = R_{cm} * T_m + t_{cm} Tc=RcmTm+tcm,将物体变换到相机系下如下图:
物体6D位姿的含义_第3张图片
此时可以看到,根据物体的位姿 R c m R_cm Rcm t c m t_cm tcm将物体由本身的世界系变换到了相机系下,叠加在一起的效果如下:
物体6D位姿的含义_第4张图片
此时,也可以结合相机的内参K, cam_K: [572.4114, 0.0, 325.2611, 0.0, 573.57043, 242.04899, 0.0, 0.0, 1.0],将物体投影到2d,如下图,可以看到也是正确的。
物体6D位姿的含义_第5张图片

因此,物体的位姿是和物体本身的坐标系相关的,同一个相机系下,不同物体的位姿是不一样的;如果保持物体和相机的相对位置不变,则物体的位姿是不变的;如果物体不动,相机系发生了移动,则新的物体位姿需要在原来的基础上再叠加相机系的相对移动位姿 △ R △R R △ t △t t

p.s.上文中使用的是preprocessed的LineMOD数据集,物体的3D模型中心在 ( 0 , 0 , 0 ) (0,0,0) (0,0,0)位置,这里把原始的LineMOD数据集也测试一下。

同样是ape类别,其3D模型如下图。
物体6D位姿的含义_第6张图片
可以看到其与上文的3D模型差别了绕y轴旋转180°,也即旋转矩阵 R m m o = [ − 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , − 1 ] R_{mm_o}=[-1,0,0,0,1,0,0,0,-1] Rmmo=[1,0,0,0,1,0,0,0,1],并且旋转后的重心需要向坐标原点平移。原始物体的中心为 c m o = ( 4.5445 , 4.6495 , − 44.5433 ) c_{m_o}=(4.5445,4.6495,-44.5433) cmo=(4.5445,4.6495,44.5433),因此 T m = R m m o ∗ T m o + t m m o T_m=R_{mm_o}*T_{m_o}+t_{mm_o} Tm=RmmoTmo+tmmo,其中 t m m o = c m − R m m o ∗ c m o t_{mm_o}=c_m-R_{mm_o}*c_{m_o} tmmo=cmRmmocmo,而 c m = ( 0 , 0 , 0 ) c_m=(0,0,0) cm=(0,0,0)为preprocessed后的物体的中心坐标,由此可得 t m m o = ( 4.5445 , − 4.6495 , − 44.5433 ) t_{mm_o}=(4.5445,-4.6495,-44.5433) tmmo=(4.5445,4.6495,44.5433)

按照原始LineMOD提供的真值,有 T c = R c m o ∗ T m o + t c m o T_c = R_{cm_o} * T_{m_o} + t_{cm_o} Tc=RcmoTmo+tcmo,其中 R c m o R_{cm_o} Rcmo代表了由原始物体向相机系物体的旋转, T m o T_{m_o} Tmo代表原始物体的坐标点, t c m o t_{cm_o} tcmo代表原始物体向相机系物体的平移。可以进行变换:
T c = [ R c m o t c m o ] ∗ T m o T_c = [R_{cm_o} t_{cm_o}] * T_{m_o} Tc=[Rcmotcmo]Tmo
= [ R c m o t c m o ] ∗ [ R m m o T − R m m o T t m m o ] ∗ [ R m m o t m m o ] ∗ T m o = [R_{cm_o}t_{cm_o}]*[R_{mm_o}^T -R_{mm_o}^Tt_{mm_o}]*[R_{mm_o} t_{mm_o}]*T_{m_o} =[Rcmotcmo][RmmoTRmmoTtmmo][Rmmotmmo]Tmo
= [ R c m o t c m o ] ∗ [ R m m o T − R m m o T t m m o ] ∗ T m =[R_{cm_o}t_{cm_o}]*[R_{mm_o}^T -R_{mm_o}^Tt_{mm_o}]*T_m =[Rcmotcmo][RmmoTRmmoTtmmo]Tm
其中第二项是第三项的逆。

根据原始LineMOD提供的真值:
R c m o R_{cm_o} Rcmo为:
-0.0963063 0.994044 -0.0510079
-0.573321 -0.0135081 0.81922
0.813651 0.10814 0.571207 r
t c m o t_{cm_o} tcmo为:
-111.814 -78.3622 1036.12
代入上式得到最终的preprocessed后的物体的 R c m R_{cm} Rcm t c m t_{cm} tcm,和preprocessed提供的真值是一致的。

你可能感兴趣的:(3D视觉,物体姿态估计,机器人抓取,计算机视觉)