Eigen combine rotation and translation into one matrix

前端 未结 3 1113
野趣味
野趣味 2021-02-02 02:32

I have a rotation matrix rot (Eigen::Matrix3d) and a translation vector transl (Eigen::Vector3d) and I want them both together in a 4x4 transformation

3条回答
  •  南旧
    南旧 (楼主)
    2021-02-02 03:05

    You didn't post the compilation errors, nor what are rot and transl. Below is a working sample showing, how you can create a 4x4 transformation matrix.

    #include 
    
    Eigen::Affine3d create_rotation_matrix(double ax, double ay, double az) {
      Eigen::Affine3d rx =
          Eigen::Affine3d(Eigen::AngleAxisd(ax, Eigen::Vector3d(1, 0, 0)));
      Eigen::Affine3d ry =
          Eigen::Affine3d(Eigen::AngleAxisd(ay, Eigen::Vector3d(0, 1, 0)));
      Eigen::Affine3d rz =
          Eigen::Affine3d(Eigen::AngleAxisd(az, Eigen::Vector3d(0, 0, 1)));
      return rz * ry * rx;
    }
    
    int main() {
      Eigen::Affine3d r = create_rotation_matrix(1.0, 1.0, 1.0);
      Eigen::Affine3d t(Eigen::Translation3d(Eigen::Vector3d(1,1,2)));
    
      Eigen::Matrix4d m = (t * r).matrix(); // Option 1
    
      Eigen::Matrix4d m = t.matrix(); // Option 2
      m *= r.matrix();
      return 0;
    }
    

提交回复
热议问题