2009-02-25 86 views
2

在AI類中,我們有一個機器人,它有一個有7個關節的臂。每個關節都可以旋轉不同的方向。我需要知道最後的結局。我一直在嘗試做3D矩陣乘法,它適用於一個關節,但是一旦我添加到另一個關節中,它就不會與我使用Java3D API做出的模型對齊。這就是我試圖計算第二個關節位置的方法。使用三維變換矩陣

double[][] b = {{0, 0, 0, 1}}; 

// Joint 1 
b = HercMatrix.MatMul(b, HercMatrix.getTranslation(0, 0, -110)); 
b = HercMatrix.MatMul(b, HercMatrix.getRotation(0, arm.getJointAngle(0), 0)); 

// Joint 2 
b = HercMatrix.MatMul(b, HercMatrix.getTranslation(0, 0, -250)); 
b = HercMatrix.MatMul(b, HercMatrix.getRotation(arm.getJointAngle(1), 0, 0)); 

System.out.println("Matrix: " + b[0][0] + ", " + b[0][1] + ", " + b[0][2]); 

我想這是他們應用乘法的方式。我知道一個事實,這不是我的matmul或matrice世代碼,我已經測試過所有這些。

我的第二個翻譯需要在第一個關節角度的相對x軸上。但我不知道這是如何做到這一點...

任何幫助或想法,非常感謝。

回答

1

如果沒有看到仿射變換矩陣的結構和角度變量的定義,就很難準確回答。例如,translation matrix的正常定義假設位置向量是從左邊開始乘,這似乎與您的使用相反。在最後檢查b [0] [3] == 1。

您的代碼似乎是等同於下面的僞代碼:

b = origin.translate(Joint1).rotate(Joint1).translate(Joint2).rotate(Joint2); 

這並不等同於

b = origin.translate(Joint2).rotate(Joint2).translate(Joint1).rotate(Joint1); 

所以請您需要的變換順序。

+0

這實際上是問題所在。感謝您的建議! – Ciph3rzer0 2009-02-25 05:09:11