【问题标题】:Point Cloud Library: How to use pcl::addCoordinateSystem(double scale, const Eigen::Affine3f & t, int viewport = 0))点云库:如何使用 pcl::addCoordinateSystem(double scale, const Eigen::Affine3f & t, int viewport = 0))
【发布时间】:2013-08-26 11:34:17
【问题描述】:

我不明白如何在函数中设置转换 t:

pcl::addCoordinateSystem(double scale, const Eigen::Affine3f & t, int viewport = 0))

所以问题是:如何定义Eigen::Affine3f

我有旋转矩阵和平移向量。

【问题讨论】:

    标签: c++ transformation eigen coordinate-systems point-cloud-library


    【解决方案1】:

    已知旋转和平移矩阵后,可以将它们组合成 Affine3f。

    Eigen::Affine3f tt;
    tt = Eigen::Translation3f(100.,300.,0.) * Eigen::AngleAxis<float>(theta,axis);
    

    注意Eigen::Translation3fEigen::AngleAxis3f 在这里不是矩阵,而是抽象类型Transform。

    【讨论】:

      【解决方案2】:

      如果您在单独的对象中进行旋转和平移,您可以这样做:

      Affine3f t;
      t.linear() = ...;
      t.translation() = ...;
      

      或:

      t.fromPositionRotationScale(pos, rot, Vector3f::Ones());
      

      【讨论】:

      • 好的,非常感谢,我被阻止了,因为 kdevelop 解析器和自动完成没有给我 Affine3f 名称和对象方法,但只有黄色警告 :( 但是当我编译和运行时,一切没问题!
      • 这样,翻译工作正常,但不能旋转
      • 轮换不起作用是什么意思?方法fromPositionRotationScale 构建了一个转换T 将点从局部空间(即平移/旋转的)转换到世界空间(即定义了位置和方向的空间)。
      猜你喜欢
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多