使用 3d 变换矩阵

2024-04-04

在人工智能课程中,我们有一个机器人,它的手臂有 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 或矩阵生成代码,我已经单独测试了所有这些代码。

我的第二个平移需要位于第一个关节角度的相对 x 轴上。但我不知道这是否是我的做法......

非常感谢任何帮助或想法。


如果不了解仿射变换矩阵的结构以及角度变量的定义,很难准确回答。的正常定义平移矩阵 http://en.wikipedia.org/wiki/Translation_(geometry)#Matrix_representation例如,假设位置向量从左侧相乘,这似乎与您的使用相反。还要检查最后的 b[0][3]==1 。

您的代码似乎相当于以下伪代码:

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

这不等于

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

因此,请检查您需要哪种转换顺序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 3d 变换矩阵 的相关文章

随机推荐