問題タブ [homogenous-transformation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - スクリーン スペースでドラッグした後、OpenGL オブジェクトが歪む
OpenGLでマウス位置オフセットのあるオブジェクトをドラッグしたかった。レンダリング パイプラインは次のようになります。
だから私は逆(投影*ビュー)し、それらをエイジアンに掛けて、モデルマトリックスに適用される変換を取得する必要があると考えました。
オブジェクトをドラッグすると、オブジェクトがマウスの動きに追従していました。しかし、別の角度から見ると、オブジェクトは大きく歪んでいます。それで、私は何を間違えましたか?(投影 * ビュー) を反転する必要がありますか?
ドラッグ前のダイス:
ドラッグ後のダイス:
他の角度から歪みを見ることができます。
歪みのより明白な例:
更新:位置の変換のみを保持することで、問題を (一種の) 修正することができました。したがって、変換の左上の 3x3 マトリックスに問題があると思われます。デバッグすると、4 行目の最初の 3 列がゼロではないことがわかりました。これはまったく間違っています。しかし、何が原因なのか理解できませんでした..この現象は、glm::perspective を射影行列として使用した場合にのみ発生します。glm::ortho を使用することも、左上の 3x3 行列を破棄する必要のない解決策です。
math - 累積同種変換: 回転は機能するが、平行移動は機能しない?
地上レーザー スキャナーを使用して 3 つの異なる位置で取得した 3 つの点群 (雲 0、雲 1、雲 2) があります。これらの雲はそれらの間で重なり合っています。これは、1 つの雲を別の雲に正しく登録する剛体 3D ボディ変換 T があることを意味します。これらの変換のうちの 2 つ、T10 があります。これは雲 1 を雲 0 に移動します。T20 は雲 2 を雲 0 に移動します (雲 0 がグローバル リファレンスとして選択されました)。問題は、クラウド 2 とクラウド 1 をオーバーラップする変換をどのように見つけるかです。回転は既に見つかりましたが、並進ベクトルが見つかりません。それが可能だ?
T10^(-1) = T01、したがって、T20*T01 = T21 であるため、変換 T20 に T10 の逆数を掛けて得た回転です。この変換を雲 2 に適用すると、雲 2 が雲 1 に正しく回転します (どちらも同じ方向です) が、それらの間にずれがあります。その理由はわかりません。
これらの変換は、単純に回転行列 R (3x3) と並進ベクトル t (3x1) の結合である同次行列 T (4x4) ですよね? 回転を構成できます。雲 2 から雲 1 への回転を見つけたという事実は、これを示しています。しかし、なぜこの変化が翻訳に現れるのでしょうか?
実際、私はいくつかの雲を持っています。原点から遠く離れた雲を登録するには、乗算によっていくつかの変換を累積する必要があります (例: T50 = T54 * T43 * T32 * T21 * T10)。乗算すればするほど、差が大きくなります。翻訳で。
乗算はエラーを蓄積しますが、登録は手動で行われ、ICP によって洗練されているため、エラーは非常に小さいと言いたいです。実際、ペアで変換を適用すると、ほぼ完全にオーバーラップしますが、それらを累積すると、変換に大きな偏差が生じます。回転は非常に良好であるため、ループ クロージャは実質的に恒等行列になります。
c++ - ROS の奇妙な変換動作
LIDAR とカメラの間の剛体変換を見つけようとしています。変換を dx、dy、dz、yaw、pitch、roll (rad) として見つけたら、ROS 静的変換パブリッシャーを起動ファイルと共に使用して、次のように変換をパブリッシュします。
次に、その変換を聞きます。
出力は次のとおりです。
私の最初の質問は、翻訳値が互いに異なるのはなぜですか?
2 番目の質問: 同じ 6DoF から 4x4 変換行列を取得するために以下のコードを使用する場合
出力行列は次のとおりです。
この時点で、平行移動も真ですが、ROS tf static transform publisher が提供する行列と回転値が異なるのはなぜですか?
coordinate-systems - 同じ 3D フレーム内の別のポイントに対するポイントの実際の位置
エゴ車両とターゲット車両の位置を表すx、y、zヨー、ピッチ、ロールの6つの値を持つ2つの座標があります。ターゲット車両とエゴ車両の相対位置を見つけたいと思います。両方とも同じ座標フレームにあります。これを解決するための私の方法論が適切かどうかを明確にしたいと思います。T_ego と T_targ など、各アクターの個々のポーズを取得します。各ポーズは 4*4 の同次変換行列であり、Unreal ワールド フレームに対するアクターの移動と回転を記述します。自我車両に対するターゲットの相対ポーズは、T_rel = inv(T_ego) * T_targ によって与えられます。相対位置は T_rel[:3, 3] です。相対回転 (ターゲット軸から自車軸まで) は T_rel[:3, :3] です。これが適切な方法であるかどうかを教えてください。均一なマトリックスを準備する方法を知りたいです。