问题标签 [inverse-kinematics]

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.

0 投票
2 回答
1332 浏览

algorithm - 帮助理解 2D 逆运动学

我找到了一个解释 2D 逆运动学的网站:

http://freespace.virgin.net/hugo.elias/models/m_ik.htm

所以我的应用程序中骨骼的设计方式是根据关节和角度来设计的。每个“骨骼”都是一个关节、一个角度和一个长度。骨骼的终点是它的起点和角度的单位向量,乘以它的长度。

所以我认为对于第 1 步,我只需生成一个方向指向目标的单位向量,然后将其乘以终点和目标点之间的距离。

第2步是我不确定的地方。我知道如何产生一个点积,但我不确定如何获得他们所说的这个直角矢量。

谢谢

0 投票
1 回答
2793 浏览

c++ - 逆运动学算法帮助

我正在尝试在 2D 中实现 CCD 逆运动学

这个函数应该做 1 次 CCD 迭代

现在作为一个测试用例,我从左脚开始,让它停在骨盆处。

每次调用此函数时,都会更新骨架的骨骼。

我的骨骼工作方式是:getFrameX,Y,Angle 返回骨骼/效应器末端的绝对位置。这些在 CCD 的每一次迭代中都会更新。getAngle,X,Y 返回相对值。

二传手也一样。

现在它永远不会停留在一个位置,每次我咯咯地笑一下鼠标,它都会逆时针随机移动骨骼。

我想知道是否有一些明显的错误可以为我指出正确的调试方向。

谢谢

0 投票
1 回答
439 浏览

c++ - 矢量旋转问题

我正在使用 IK 开发一个程序,并且遇到了我起初认为是一个微不足道的问题,但后来却遇到了麻烦。

背景:

一切都在 3d 空间中。我正在使用 3d 矢量和四元数来表示变换。

我有一个肢体,我们称之为 V1。我想将它旋转到 V2 上。

我得到了V1和V2之间的角度。然后由V1旋转的轴穿过V2。

然后从轴和角度制作一个四元数。

然后我将四肢的当前方向乘以轴角四元数。

我相信这是我想要的肢体局部空间。

该肢体连接到一系列其他链接。为了获得世界空间,我将父本地空间与孩子的本地空间相结合,直到到达根。

如果我正在旋转的矢量包含在 X 和 Y 平面内,或者如果肢体连接到的身体没有被修改,这似乎很有效。如果修改了任何内容,例如旋转根节点,则在第一次迭代时,向量将旋转得非常接近所需向量。在那之后,虽然它会开始在整个地方旋转并且永远不会达到目标。

我已经逐行遍历了所有数学,它似乎都是正确的。我不确定是否有一些我不知道或只是在看的东西。我的逻辑合理吗?还是我不知道什么?任何帮助是极大的赞赏!

0 投票
1 回答
1653 浏览

actionscript-3 - Flash 骨骼工具 actionscript 3 RagDoll

我制作了一个角色,并使用骨骼工具让它在运行时移动。

这很好用,但现在我想添加重力/物理,所以我可以扔我的角色,它像一个真正的布娃娃一样落在地上。如何在 actionscript 3 中执行此操作?是否可以在 fla(无类文件)中执行此操作。

先谢谢了!

0 投票
1 回答
1766 浏览

c++ - C++ 逆运动算法/库,其中包括已知链中多个节点位置时的 IK 方法

我正在寻找理想的 c++ 库/代码(但如果不是至少一个算法),它可以解决给定 n 个节点链的 IK 问题,其中估计链中 k 个节点(其中 k < n)的位置是已知的。

非常感谢任何帮助。

0 投票
3 回答
2139 浏览

javascript - 基本二维人形火柴人的逆运动学原理

作为业余爱好,我做一些动画极客,主要是在 Javascript(基于 DOM 和画布)中,以及在 C# 和其他技术方面做过一些事情。然而,其中大部分都是基于精灵、边界框、简单的像素移动等——现在我对使用矢量图形和实现一个由物理力驱动的具有逼真的移动关节的角色感兴趣。我想在画布元素或 SVG 中进行一些操作。

这里有很多与逆运动学有关的问题,但大多数问题都比较低级,并且需要先了解矢量、力和工程术语。我真正欣赏的是一些关于如何使具有髋关节、膝关节、踝关节等的基本火柴人能够半真实地移动的基本原则的一些指示。

我经常使用 Knockout.js,并且一直想知道是否可以通过 Knockout 的计算函数来实现每个关节的定位,例如膝关节的位置是根据髋关节和踝关节的位置以及作用于它们的力来计算的. 但我很难找到一个起点:我一直在我的房子周围慢动作走,就像一个疯子试图隔离人体的哪些部位实际上首先移动,以及每个部位如何对身体的运动做出反应其他。是否有一种通用的方法来说明人形图形在游戏和动画中的运动方式?

请记住,我习惯于使用像素坐标而不是矢量和力,我是否天真地试图孤立地解决这个问题?我会发现我还需要立即了解重心、动量和所有其他知识吗?

任何帮助表示赞赏,包括新手教程的链接!

0 投票
3 回答
300 浏览

c - 为什么这个程序不起作用?

//这是一个寻找机械臂inv运动学的程序。我的怀疑不在kine:-)。我的程序执行但总是打印“无法实现的位置”,即使对于已知值,它也是如此。在这里,我使用弧度表示角度,因为这就是 c 所理解的。请告诉我如何遇到这个,甚至告诉我更好的方法来实现这个。谢谢。// 现在,这个编辑过的程序可以工作,但是速度很慢.. 有人可以建议一种优化它的方法吗?

}

0 投票
0 回答
304 浏览

actionscript-3 - 逆运动学问题

我有逆运动学的问题。我无法移动触手,我不知道为什么。我实现了许多简单的骨架并成功了,但在这种情况下,一定有我遗漏的东西。希望你能帮我!

这里有详细的解释:

1.- 此图像显示我要移动的触手。*“Flup”是一个包含触手和下方圆圈的影片剪辑。*触手本身是另一个电影剪辑(如前所述在“Flup”内​​)*触手拥有一个电枢

图片

我只想创建一个简单的动作来开始,所以在这种情况下,我只会尝试移动蓝色骨骼。

2.- Flup 是一个类,所以我在一帧中创建一个实例

3.- Flup 类,此时非常简单

4.- 接下来,我们有触手类。这个类是 Flup 将拥有的每条触手的父亲,所以它是“TentacleOne”的父亲

5.- 最后是 TentacleOne 类,它只向其父亲发送信息

很抱歉这篇长文,但我真的很生气,不知道问题出在哪里。感谢所有试图帮助我的人。

PS:当我运行此代码时,骨架位置的 X 和 Y 变量被修改,但在视觉上骨架保持静态。

0 投票
0 回答
625 浏览

robotics - 使用 KDL 确定 Gazebo 中的关节旋转

我正在尝试使用 Gazebo 中的运动动力学库 (KDL) 将其手掌放置在目标模型上的“机械臂”位置。我当前的问题是,当我将关节旋转到计算值时,我的机器人根本不在我期望的位置,也没有接触到目标圆柱体。我曾尝试向 Gazebo 社区寻求答案,但我没有得到回复,所以我希望堆栈溢出的人能提供帮助。下面粘贴的是相关代码:

0 投票
4 回答
1491 浏览

matlab - 如何使用这些约束生成随机 matlab 向量

V在 Matlab 中创建随机向量时遇到了以下一组约束:(给定参数NDLtheta

  1. 向量V必须是N单位长
  2. 元素的平均值必须为theta
  3. 没有 2 个连续元素的差异可能超过 +/-10
  4. D == sum(L*cosd(V-theta))

我对最后一个问题最多。有任何想法吗?

编辑
其他语言或方程式形式的解决方案同样可以接受。Matlab 对我来说只是一个方便的原型设计工具,但最终的算法将在 java 中。

编辑
从评论和初步答案中,我想添加一些澄清和初步想法。

我不是从任何标准发行版中寻求“真正随机”的解决方案。我想要一个伪随机生成的值序列,满足给定参数集的约束。

我试图近似的系统是链长度为 L 的 N 个链,其中链的末端在 theta 方向上远离另一端 D。

我在这里的初步见解是,可以从考虑中删除 theta 直到最后,因为(2)本质上将 theta 添加到 0 均值向量 V 的每个元素(将均值移动到 theta)并且(4)只是再次删除该均值。所以,如果你能找到 theta=0 的解决方案,那么问题就解决了所有的 theta。

根据要求,这是一个合理的参数范围(不是硬约束,而是典型值):
5<N<200
3<D<150
L==1
0 < theta < 360