首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >手术机器人手臂的运动OpenGL

手术机器人手臂的运动OpenGL
EN

Stack Overflow用户
提问于 2013-05-12 20:49:15
回答 2查看 1K关注 0票数 0

在OpenGL中,我有一个关于外科手术机械臂运动的问题。

我们的手臂由7个部分组成,它们应该是手臂的关节,它们负责弯曲和扭曲手臂。我们这样绘制手臂:首先我们创建负责移动肩膀的元素,比如"up和down“,然后我们使用Translatef”移动“到我们绘制下一个元素的位置,负责扭曲肩膀(我们使用Rotatef控制移动),依此类推,使用下一个关节(肘部,手腕)。

重点是创造出一只能做出类似人类运动的手臂。我们的机制起作用了,但现在我们的导师要我们用手臂的末端画一条线条。我们把负责绘制和移动手臂的代码放在推送和弹出矩阵之间,所以它的工作原理就像在真实中一样,我的意思是,当我们移动灵魂时,arm中的任何其他元素也会移动。

有很多元素在移动,旋转,我们有几个旋转矩阵,它们连接到我们可以控制的不同元素上,现在我们不知道如何精确地找到空间中手臂末端的新位置,以便能够向线条添加新的点。有人能帮上忙吗?

代码语言:javascript
运行
复制
    glGetFloatv(GL_MODELVIEW_MATRIX,mvm2);

     x=mvm2[12];
     y=mvm2[13];
     z=mvm2[14];

     glPointSize(5.0f);
     glColor3f(1.0f, 0.0f, 0.0f);

     glBegin(GL_POINTS);
     glVertex3f(x,y,z);
     glEnd();

当我使用watch检查什么是x,y,z值时,我得到了(0,-1.16-12e,17.222222),这不可能是真的,因为我的手臂长度约为9.0 (在z轴上)。我认为只有模型视图矩阵的最后一列是重要的,我不需要将它乘以顶点的局部坐标,因为我在这里完成了绘制,它们是(0,0,0)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-14 01:54:33

如果您应该使用glGetFloatv,那么这指的是使用GL_MODELVIEW_MATRIX参数调用它,该参数返回当前的模型视图矩阵。然后,您可以使用此矩阵将一个点从手的坐标系转换到世界空间CS。

但是,调用glGetFloatv是一种不好的做法,因为它可能会导致渲染性能降低。我认为你应该和你的导师谈谈教授过时甚至过时的功能,也许他可以让教授更新资料。

编辑:用于检索翻译的代码是正确的。但是,您不能在应用相同的模型视图矩阵的情况下绘制该点。在绘制它之前,您必须使用glLoadIdentity或通过弹出来重置模型视图矩阵。

票数 0
EN

Stack Overflow用户

发布于 2013-05-13 01:26:20

我们不知道如何在空间中精确地找到手臂末端的新位置,以便能够向线条中添加新的点。

您可以通过自己执行矩阵数学和转换来做到这一点。

(来自评论)

为了做到这一点,我们假设将矩阵相乘,并从glGetFloatv中获取一些信息

请不要这样做。特别是如果你想自己构建一个预转换的线条几何图形,就更不会了。OpenGL不是一个矩阵数学库,使用OpenGL的固定函数管道矩阵函数绝对没有任何好处。但它也有很多缺点。最好使用真正的矩阵数学库。

从技术上讲,你的机器人手臂由许多相连的线段组成,其中每个线段由变换层次中向上的线段变换组成。

代码语言:javascript
运行
复制
M_i = M_{i-1} · (R_i · T_i)

其中R_i和T_i分别是每个线段的旋转和平移。因此,对于每个线段,您需要单独的变换矩阵来检索线段的点。

由于您将把每个线段的原点放在前一个线段的顶端,因此您将使用线段的转换矩阵来转换同质点(0,0,0,1),该转换矩阵具有正好是转换矩阵的第4列的良好属性。

这就给您留下了创建转换矩阵链的任务。用OpenGL做这件事很乏味。为此,请使用真正的数学库。如果您的导师坚持要求您使用OpenGL固定函数管道,请让他向您展示当前OpenGL版本( OpenGL -3及更高版本)规范中的函数引用;他找不到这些函数,因为所有的矩阵数学函数都已从现代OpenGL中完全删除。

对于数学库,我可以推荐GLMEigen (带有OpenGL extra模块)和linmath.h (自我广告)。使用这些库中的每一个构建转换层次结构都很简单,因为您可以轻松地创建每个中间矩阵的副本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16507542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档