HALCON高级篇:3D位姿

3D位姿

齐次转换矩阵是一种描述转换的简洁方法,但是它们的内容,例如矩阵的元素,通常是读起来比较困难,尤其是旋转部分。这个问题可以通过使用所谓的3D位姿来解决。

3D位姿其本质就是一个刚性转换的很容易理解的表述:不是齐次转换矩阵的12个元素,一个位姿用6个参数来描述这种刚性转换,3个是旋转,3个是平移:(TransX,TransY, TransZ, RotX, RotY, RotZ)。位姿背后的原理就是,即使绕任意轴的旋转也总可以用绕坐标系统轴的3个旋转序列来描述。

在HALCON中,你可以用create_pose来创建一个3D位姿;在位姿和齐次矩阵之间的转换,你可以用hom_mat3d_to_pose和pose_to_hom_mat3d。


旋转序列

但是,这不仅是一种方法通过3个参数去描述任意的旋转。可以通过HALCON算子create_pose反映出来,其可以通过参数OrderOfRotation来在不同的位姿类型之间进行选择。如果你传入值‘gba’,旋转可以通过下面的旋转链来描述:

HALCON高级篇:3D位姿


你可以通过传入值‘abg’来选择相反的顺序:

HALCON高级篇:3D位姿


例如,前面讨论的转换可以通过齐次转换矩阵来描述:

HALCON高级篇:3D位姿


相对应的位姿,用旋转顺序‘gba’则更容易被读取:

HALCON高级篇:3D位姿


HALCON算子

下面有关处理3D位姿的相关算子被简要的描述:

  • Create_pose创建一个位姿
  • Hom_mat3d_to_pose将齐次转换矩阵转化为位姿
  • Pose_to_hom_mat3d将一个位姿转化为齐次转换矩阵
  • Convert_pose_type改变位姿的类型
  • Write_pose将位姿写入到文件中
  • Read_pose从文件中读取位姿
  • Set_origin_pose沿着其新轴平移位姿
  • Pose_invert反转位姿
  • Pose_compose将两个位姿相乘,例如,它顺序地应用两个转换(位姿)

怎么确定坐标系统的位姿

前面部分我们讲解了如果用平移向量,旋转矩阵,齐次转换矩阵,或者位姿去描述已知的转换。但是,有时这有另外的任务:怎么用一个位姿去描述坐标系统的位置和方向。

HALCON高级篇:3D位姿

图:用相机坐标来确定世界坐标系统的位姿

上图展示了一个更加简单的实例。其目标是去确定相对于相机坐标系统,世界坐标系统的位姿。

在这样的情况下,我们建议建立一个从单独的平移和旋转,从左到右的刚性转换。这样,相机坐标系统首先被平移,这样其原点就和世界坐标系统的一致啦。现在,两个坐标系统的y轴是一致的;在绕着(新)y轴旋转(被平移)的相机坐标系统,它具有了正确的方向。


分享到:


相關文章: