2017-09-25 109 views
0

编辑1:重新表达的问题。
我有2个坐标框架A和B和一个点Pt。框架A是基本框架。框架B相对于框架A进行某种平移和旋转。点Pt在框架B中固定。
每次迭代框架B沿框架A的Z轴旋转“DEG”度。我想在每次旋转后找出点A与点A的坐标。Eigen:协调框架A中一点的坐标,它是协调框架B

这类似于粘在垂直杆一侧的球。杆沿着z轴旋转并且球随着它一起旋转。这里的杆是框架A,球是框架B.我一直在使用Eigen并将A - B的静态转换映射到变量。

// the frame A - Frame B translation and Rotation 
Eigen::Vector3f trans = Eigen::Vector3f(xt,yt,zt); 
Eigen::Quaternionf quat = Eigen::Quaternionf (xr,yr,zr,wr); 
quat.normalize(); 
Eigen::Transform<float,3,Eigen::Affine> static_transform = Eigen::Translation<float,3>(trans) * quat; 
// this the point in the frame A 
Eigen::Vector3f newPoint (xp,yp,zp); 
+0

我不认为我完全明白你的问题:你有2个坐标系,或者每个迭代有2个坐标系(或者只有'A'变化)?相对于“A”旋转的是什么?另外,每个'B',或者仅仅是第一个'B',都是“Pt”吗?如果“Pt”固定为“B”,“B”固定为“A”,则“Pt”固定为“A”。 – chtz

回答

0

如果我正确了你的问题,然后将其归结为:

Vector3f p_in_B(...); 
while(...) { 
    // update static_transform 
    Vector3f p_in_A = static_transform * p_in_B; 
} 

最后的产品相当于:

p_in_A = static_transform.linear() * p_in_B + static_transform.translation(); 
+0

你几乎说得对。因此,A中的点Pt应为 pt,其中A =(从A到B的转换从A到B的转换)*由“DEG”转动*(p在B中)。 我只是无法理解这个正确的语法。 – surajmshanbhag

+0

所以我设法使用下面的代码得到x,y坐标。但是所有的3D点都被挤压到z = 0的一个平面上。 'Eigen :: Quaternion quat; (DEG,Eigen :: Vector3f(0,0,1)); Eigen :: Transform t = static_quat * Eigen :: Translation (translation)* current_angular_quat; Eigen :: Vector3f newPoint(Pt_x,Pt_y,Pt_z); newPoint = t * newPoint;' – surajmshanbhag

+0

请注意,角度必须在光芒四射。 – ggael