Использование матриц трехмерного преобразования - PullRequest
2 голосов
/ 25 февраля 2009

В классе ИИ у нас есть робот, у которого есть рука с 7 суставами. Каждый сустав может вращаться в другом направлении. Мне нужно знать, где будет самый конец. Я пытался сделать 3D матричное умножение, и оно работает для одного соединения, но как только я добавляю в другое, оно не совпадает с моделью, которую я сделал, используя API Java3D. Вот так я пытаюсь вычислить положение второго сустава.

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]);

Я предполагаю, что они применяют умножения. Я точно знаю, что это не мой код создания матемулы или матрицы, я все это проверял по отдельности.

второй перевод, который у меня есть, должен быть на относительной оси х угла первого сустава. Но я понятия не имею, так ли я это делаю ...

Любая помощь или идеи с благодарностью.

1 Ответ

1 голос
/ 25 февраля 2009

Трудно ответить точно, не видя структуры ваших аффинных матриц преобразования и определения угловых переменных. Нормальное определение матрицы перевода предполагает, например, что вектор положения умножается слева, что, по-видимому, противоречит вашему использованию Проверьте также, что b [0] [3] == 1 в конце.

Ваш код, по-видимому, эквивалентен следующему псевдокоду:

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

Это не эквивалентно

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

, поэтому проверьте, какой порядок преобразований вам требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...