问题标签 [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 投票
1 回答
144 浏览

javascript - 如何确定一个点当前位于椭圆路径的哪一半?

这是我在 JavaScript 中处理的原子动画的静态帧,以该图像为模型。

在此处输入图像描述

这是用于根据时间确定电子在其轨道上的位置的代码:

我想做的是在路径的橙色部分将电子放在原子核上方,在绿色部分将电子放在原子核下方。

当 时this.timer.delta() == 0,电子位于最右端,然后逆时针移动。

我正在寻求以下两件事的帮助:

1) 找出电子在其轨道最左侧的时间点。

2)确定在任何给定时间内电子当前在哪一半路径上。

理想情况下,无论 的值如何,解决方案都应该起作用this.speed(这是用于加速或减慢动画的数字乘数)。

0 投票
1 回答
453 浏览

static - Box2d 无力边界框

目前,Cocos2d-Box2d 项目正在使用 b2Vec2 为游戏的边缘创建一个 Bounding Box。因此,bounding Box 不会影响运动学体,运动学体是不受力影响的体(这意味着体通常会飞出屏幕)。我想看看是否有办法让运动体与屏幕连接。如果没有,如果有人向我解释我应该如何在屏幕角落周围制作一个带有静态物体的边界框,我将不胜感激。

0 投票
1 回答
1473 浏览

matlab - 使用默认 Simulink 库模块的 DCM 到四元数转换中的歧义

我正在模拟一个需要将方向余弦矩阵转换为四元数的系统。我使用 simulink 中提供的默认 DCM 到四元数转换块。然而,在模拟的某些点,输出四元数分量的符号相反。

不幸的是,我无法附上情节图像。

尽管这在数学上是正确的,但我希望进行平稳的更改。关于如何避免这种情况并为四元数提供平滑曲线的任何想法?

更新 1: http ://tinypic.com/view.php?pic=33dayap&s=6

上图是模拟图。第一个图是输出四元数。第二个图是方向余弦矩阵。如您所见,即使 dcm 分量变化平稳,四元数也会突然改变符号。

0 投票
3 回答
4260 浏览

python - 正向运动学数据建模

我使用 3 个 RC Servos 和一个 Arduino 构建了一个简单的机械臂。我只是想玩弄它并学习一些有关机器人的知识。

目前,我正在尝试使用伺服系统的三个角位置来计算机械臂尖端的位置。我认为“正向运动学”是这个的技术术语。顺便说一句,手臂的尖端是一支笔,我想我以后可能会尝试用它来画点什么。

在手臂的运动范围内,我建立了笛卡尔坐标系并记录了 24 个(角度 => 位置)样本。pastebin.com/ESqWzJJB

现在,我正在尝试对这些数据进行建模,但我在这里有点超出我的深度。到目前为止,这是我的方法:

我使用维基百科 en.wikipedia.org/wiki/Denavit–Hartenberg_parameters 上的 Denavit–Hartenberg 方程。然后我尝试使用最小二乘优化来确定参数。

我还在模型的输入和输出中添加了线性项,以补偿可能的失真(例如伺服角的相移):

我的 Python 代码:pastebin.com/gQF72mQn

但它只是行不通,我的尝试都没有收敛到一个好的解决方案。我还尝试了一个简单的 3x4 矩阵乘法,它作为模型没有多大意义,但奇怪的是,它并没有比上面更复杂的模型差。

我希望那里有人可以提供帮助。

0 投票
1 回答
15326 浏览

java - 如何正确计算 Delta 机器人的直接运动学?

我正在尝试为 delta 机器人组合一个简单的模拟,并且我想使用正向运动学(直接运动学)通过传递 3 个角度来计算末端执行器在空间中的位置。

我从Trossen 机器人论坛 Delta 机器人教程开始,我可以理解大部分数学,但不是全部。当我试图计算 3 个球体相交的点时,我迷失在前向运动学的最后一部分。我一般查看了球坐标,但无法计算出用于旋转的两个角度(到 E(x,y,z))。我看到他们正在求解球体方程,但这就是我迷路的地方。

Delta 机器人直接运动学

Delta 机器人直接运动学

Delta 机器人直接运动学

Delta 机器人是平行机器人(意味着底座和末端执行器(头部)始终保持平行)。底座和末端执行器是等边三角形,腿(通常)放置在三角形边的中间。

Delta 机器人底座的侧面标有f。delta 机器人的执行器侧面标有e。腿的上部rf和下部有标记re

原点(O)位于基础三角形的中心。伺服电机位于底三角形边(F1、F2、F3)的中间。接头标记为 J1、J2、J3。小腿在点 E1、E2、E3 处连接末端执行器,E 是末端执行器三角形的中心。

我可以轻松计算点 F1、F2、F3 和 J1、J2、J3。这是 E1,E2,E3 我有问题。从解释中,我了解到点 J1 向内平移一点(通过末端执行器中位数的一半)到 J1',它成为具有半径re(小腿长度)的球体的中心。对所有关节执行此操作将导致 3 个球体在同一位置相交:E(x,y,z)。通过求解球面方程,我们找到 E(x,y,z)。

还有一个公式解释:

dk 方程 1

dk 方程 2 但这是我迷路的地方。我的数学能力不是很好。对于我们这些不太懂数学的人,有人可以用更简单的方式解释一下吗?

我还使用了提供的示例代码(如果您有启用 WebGL 的浏览器),您可以在此处运行。单击并拖动以旋转场景。要控制三个角度,请使用 q/Q、w/W、e/E 来减少/增加角度。

完整代码清单:

问题是,在可视化时,下部会改变长度(正如您在打印的 message0 中看到的那样,它不应该,这进一步增加了我的困惑。

我在 Java/Processing 中使用了提供的 C 代码,但编程语言最不重要。

[由 spektre 编辑]

我只需要添加这张图片(出于教学原因)。

  • 排版的废话不是掌握运动学能力的最佳方式
  • 据我了解,带有电机的底座位于上三角形平面上的这张图片上
  • 并且工具在底部三角形平面上

三角洲机器人

0 投票
2 回答
1638 浏览

c# - Kinect 身体方向检测

我如何判断一个人是面对 Kinect 还是背对着 Kinect?

我正在使用 Microsoft Kinect SDK v1.7。

0 投票
1 回答
2079 浏览

c# - Kinect SDK - Transform the rotation of an angle by degrees

I am reasonably new to Kinect development and I am trying to build a component that allows rotations of Kinect joints. The purpose of this is to manually "fix" any skeleton data I've captured, post capture, where the skeleton starts jumping around.

I am displaying the Kinect skeleton in 3D space using the helix toolkit. I can pause the skeleton stream at any given point and see the matrix values held in the BoneRotations object for the AbsoluteRotation and the HierarchicalRotation.

I've created three sliders which represent an X-axis, Y-axis and Z-axis. I have set their min/max values to something which is relevant to bone's natural movement that is to be manipulated (e.g on the Yaxis, the shoulder doesn't move above roughly 40 degrees). If we take the shoulder (right) joint as an example, I want to be able to apply rotations on each of the axis so that I can change the position of the bone in 3D space. I believe the terminology that relates to this sort of action is forward kinematics.

My questions are:

a) The Kinect SDK gives an absolute and hierarchical matrix for the joint. Which one should I be looking at to manipulate?

b) What does the Quaternion give you that the matrix doesn't?

c) How do I take the 4x4 matrix information and find the angle (either in degrees or radians) for the X-axis, Y-axis and Z-axis?

d) I've seen how to transform 3x3 matrices by multiplying them using a calculation like this:

How do I transform the 4x4 matrix that is given by the Kinect SDK?

More specifically, can I transform the 4x4 matrix on each axis so that I can have a slider for each axis? So how do I apply an X-axis rotation of 10 degrees? I've seen rotations done on 3x3 matrices as follows:

Thanks for help in advance!

0 投票
2 回答
1333 浏览

java - 根据用户输入计算运动学方程(更短的方法?)

我目前正在编写一个程序,该程序将计算物理学中简单运动学方程的剩余变量。我需要有 4/6 个变量,然后我可以计算其他两个变量的结果。就目前而言,我正在使用布尔类型的数组来检测是否输入了哪个变量,并且我必须比较每种情况并重新编写三个公式中的一个来求解该变量。这最终会导致大量臃肿的代码。

这是我的代码中仅一个方程式的示例:

我使用的三个方程是: Vf = Vi + a(tf - ti) Xf = Xi + Vi(tf - ti) + (1/2)a(tf - ti)2 Vf2 - Vi2 = 2a(Xf - Xi)

有什么方法可以缩短它或使它更容易实现吗?使用数组列表会以某种方式工作吗?

0 投票
1 回答
3740 浏览

java - libgdx - 实现移动运动体

项目:我正在做一个简单的项目,我希望能够制作一个运动体并将其从点 x 移动到 y。“创建运动体”似乎没有太多直接的内容。我一直在关注一些关于实现运动机构的不同教程,因为我找不到一个指定如何正确执行的教程。

问题:这似乎是一个简单的修复,但我无法弄清楚问题是什么,因为我不完全了解如何实现运动体。我相信问题出在这段代码上kinematicBody.setLinearVelocity(0.0f, 1.0f);,因为我在"setLinearVelocity"声明“方法 setLinearVelocity(float,float)对于 BodyDef 类型未定义”时出现错误,我觉得我在这里做错了

我想要的结果:我希望能够创建一个从 x 点移动到 y 点的运动体。

这是我的相关代码:

0 投票
2 回答
570 浏览

matlab - 两种看似有效的速度计算方法得出不同的答案

我正在尝试根据其 X 和 Y 坐标的向量来计算对象的速度。最初,我使用了两个分量速度,然后使用勾股定理将它们加在一起。mdcxmdcy分别是 x 和 y 坐标的向量。

一位朋友提到这是多么愚蠢,我意识到有一种更好的方法:

这一切都很好,除了这两种方法得到不同的答案,我不知道为什么。方法号的结果示例。1个是:

  • 3.39676316513232
  • 1.69387130561921
  • 1.21490740387897
  • 1.40071410359145
  • 0.702281994643187
  • 1.02703456611744
  • 0.933380951166206

以及方法号中的等效部分。2:

  • 3.00324976888577
  • 1.41904819171419
  • 0.473028796076438
  • 0.772429851826608
  • 0.126083801997687
  • 1.02574816428026
  • 0.541889676174012

我的问题

我在这里做错了什么?为什么这些没有得出相同的结果?这可能是一个愚蠢的错误,但我似乎无法弄清楚它来自哪里。我使用hypot正确吗?

提前致谢!