2017-09-25 17 views
0

編集1:フレーズ付きの質問。
私は2つの座標フレームAとBと点Ptを持っています。フレームAはベースフレームです。フレームBは、フレームAに関して何らかの平行移動および回転をする。ポイントPtはフレームBに固定される。
すべての反復フレームBはフレームAのZ軸に沿って「DEG」度だけ回転される。私は各回転の後に点Aの点wrtの座標を見つける必要があります。固有座標:共座標フレーム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

:最後の製品は同等です

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

:2つの座標フレーム、または反復ごとに2つの座標フレームを持っていますか? 'A'は何を回転させるのでしょうか?また、 'Pt'は' B'ごと、あるいは最初の 'B'だけに固定されていますか? PtがBに固定され、BがAに固定されている場合、PtはAに固定される。 – chtz

答えて

0

私が正しくあなたの質問を得た場合、それはつまるところ:私は完全にあなたの質問を理解してないと思う

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

あなたはほとんどそれを正しく得ました。したがって、Aの点Ptは、A =(A-BからA-B *への回転からA-Bへの回転)* DEGT *(ptのB)による回転でAの点の でなければなりません。 私はこのための正しい構文を理解できません。 – surajmshanbhag

+0

私は以下のコードを使用してx、y座標を取得することができました。すべての3D点はz = 0で1つの平面にスカッシュされます。 'Eigen :: Quaternion quat; quat = Eigen :: AngleAxis (DEG、Eigen :: Vector3f(0、0、1)); Eigen :: Transform t = static_quat * Eigen :: Translation (翻訳)* current_angular_quat; Eigen :: Vector3f newPoint(Pt_x、Pt_y、Pt_z); newPoint = t * newPoint; ' – surajmshanbhag

+0

角度は放射光でなければならないことに注意してください。 – ggael