[摘译] IK: 操纵关节式物体的反向动力学和几何约束
原文: INVERSE KINEMATICS AND GEOMETRIC CONSTRAINTS FOR ARTICULATED FIGURE MANIPULATION
http://graphics.ucsd.edu/courses/cse169_w04/welman.pdf
译者: crazii
http://www.cnblogs.com/crazii/p/4662199.html
[译者: 根据个人需要, 只仔细阅读了部分内容, 所以只翻译 基本概念(3.1)和 CCD相关(4.2, 4.3) 的部分. 后面如果有空的话, 可能选择翻译一下第5章 约束(Incorporating Constraints)的问题.
p.s.本人渣数学, 很多术语可能翻译不准确. 还有一些句子是意译.
为什么只翻译CCD, 而不翻译雅克比转置法? 因为首先阅读了4.3章, 两者的比较, 发现CCD实现更简单, 收敛速度更快(效率高), 没有奇点等优点, 所以就选定了CCD.]
第三章 反向动力学 (逆向運動學) - Inverse Kinematics (IK)
反向运动学的问题, 在机器人技术的文献中已经得到了广泛研究, 目前仍然是该技术领域内最好的信息源. 在这一章里我们会正式的提出这个问题, 并回顾最常用的IK解决方法, 并描述在此之前这些方法在计算机图形学中的一些用例.
The inverse kinematic problem has been studied extensively in the robotics literature, which remains the best source of information on the subject. In this chapter we formally state the problem and review the most common approaches to solving it. Previous applications of these approaches to computer graphics are also described.
3.1 反向动力学问题 - The Inverse Kinematic Problem
第2.1.2章节(骨骼建模)中, 描述了一个骨架可以这样建模: 由一些被关节连接的刚体, 按一定的层次集合而成. 我们把骨骼中的由各段组成的一个运动链称作操纵器(manipulator), 并假定这个运动链中, 连接两段之间的关节是只能绕一个轴旋动的旋转关节. 操纵器链条的一端, 即基座(base), 是固定的无法移动; 链条的末梢一端可以自由移动. 末端效应器(end-effector, 下称末端器)位于最末端关节的坐标系(coordinate frame)中; 末端器的坐标是该坐标系中的一个点, 末端器的朝向(旋转)与该坐标系的朝向一致.
Section 2.1.2 showed that a skeleton can be modelled as a hierarchical collection of rigid objects connected by joints. We will refer to a kinematic chain of segments within a skeleton as a manipulator, and will assume that the joints connecting segments within this chain are revolute joints rotating about a single axis. One end of the manipulator, the base, is fixed and cannot move; the distal end of the chain is free to move. The end effector is embedded in the coordinate frame of the most distal joint in the chain; the end-effector position is a point within this frame and the end-effector orientation refers to the orientation of the frame itself.
对于这个运动链中的每一个关节点, 用一个关节变量来表示这个节点处的两个相邻坐标系的空间变换M, 在每个旋转关节i处的变换 Mi 由位移和旋转构成, 这两个量是相对于父节点坐标系的相对值, 即
Mi = T(xi, yi, zi) R(θi) (3.1)
其中T(xi, yi, zi) 是从父关节节点i-1到当前节点i的位移矩阵, R(θi)是绕着关节i的旋转轴旋转了θi的旋转矩阵.
At each joint in the chain a joint variable determines a transformation M between the two adjacent coordinate frames sharing the joint. The transformation Mi at a rotation joint i is a concatenation of a translation and a rotation, both of which are relative to the coordinate frame of joint is parent. That is,
Mi = T(xi, yi, zi) R(θi) (3.1)
where T(xi, yi, zi) is the matrix that translates by the offset of joint i from its parent joint i, and R(θi) is the matrix that rotates by θi about joint is rotation axis
这个运动链中, 任意两个关节的坐标系i和j的关系,可以由从i遍历到j时,遇到的所有节点的变换相乘求得:
Mij = MiMi+1...Mj-1Mj (3.2)
所以与基座坐标系相关的末端器的位置和朝向, 可以简单的由每个节点的变换相乘求得. [译注: 若基点处的变换为M0, 末端器的变换为Mn, 则由上式可得 M0n=M0M1...Mn-1Mn 即所有节点局部变换的乘积.]
The relationship between any two coordinate systems i and j in the chain is found by concate nating the transformations at the joints encountered during a traversal from joint i to joint j:
Mij = MiMi+1...Mj-1Mj (3.2)
So the position and orientation of the end-effector with respect to the base frame is found by simply concatenating the transformations at each joint in the manipulator.
如果一个链中的的已知节点变量组成的向量为q [译注: q = (M0, M1, ... Mn)], 那么前向运动学(forward kinematic)中, 计算末端器的坐标和旋转的向量x的问题 [译注: x = (T, R)], 是一个简单的矩阵乘法的问题, 格式如下:
x = f(q) (3.3)
然而如果目标是将末端器放置在给定的位置和朝向 x, 那么计算合适的节点变换向量q来达到目标的问题, 需要解决(3.3)的逆,
q = f-1(x) (3.4)
解决这个逆向动力学的问题就没有那么简单了. 函数f是非线性的, 而且如果存在一个x到q的方程(3.3)的唯一的一个解, 那么逆向的q到x映射(3.4)未必只有一个 - 对于给定的x, 可能有多个q的解存在 [译注: 直观的表现是抵达同一个点可能有不同弯曲的方式, 比如"<"形和">"形,两种]. 解决这个问题的最直接的方式可能是求出方程(3.4)的解析解(closed-form solution). 但是解析解使的场合非常有限, 只适用于那些具有特定特点的操纵器[译注: 比如旋转的角度/自由度受限, 比如, 所有节点只有1个自由度DOF], 甚至这种情况仍然需要解非线性方程[Pau81]. 对于任意的一个操纵器, 通用的分析解法是不存在的; 相反, 问题需要通过非线性方程的解法中的数学方法. 最常用的解法是基于矩阵求逆或者优化技术(optimization techniques).
Given a vector q of known joint variables, then, the forward kinematic problem of computing the position and orientation vector x of the end-effector, is a simple matter of matrix concatenation, and has the form
x = f(q) (3.3)
But if the goal is to place the end-effector at a specied position and orientation x, then determining the appropriate joint variable vector q to achieve the goal requires a solution to the inverse of(3.3)
q = f-1(x) (3.4)
Solving this inverse kinematic problem is not so simple. The function f is nonlinear and while there is a unique mapping from q to x in equation(3.3), the same cannot be said for the inverse mapping of(3.4) - there may be many qs for a particular x. The most direct approach for solving the problem would be to obtain a closed-form solution to (3.4). But closed-form solutions can only be derived for a restricted set of manipulators with specfic characteristics, and even these result in a set of nonlinear equations to be solved[Pau81]. A general analytic solution for arbitrary manipulators does not exist; instead the problem must be solved with numerical methods for solving systems of nonlinear equations. The most common solution methods are based on either matrix inversion or optimization techniques.
第四章 直接操纵的有效算法 Efficient Algorithms for Direct Manipulation
4.1 一个简化的动态模型 A Simplied Dynamic Model
4.1.1 雅可比转置法 The Jacobian Transpose Method
[以上暂不翻译...]
4.2 一个补充的启发式解法 - A Complementary Heuristic Approach
上述的基于力(force-based)方法, 对于互交式操纵来说有着比较吸引人的一些特点.然而有些情况下,这种方法的表现并不能尽如人意. 图4.2说明了其中的一种情况. 左边是一个奇异构形(singular configuration)的操纵器, 黑点表示的是末端的新的期望目标位置. 右边的形态显示了对该IK问题的一个合理的解, 可能也反映了用户所期望的, 将末端向内拖至目标的结果. 然而当用户尝试将末端向内拖动时, 在末端施加的力直接指向奇异方向(singular direction); 这个力会被抵消而毫无效果, 而末端并不会移动. 考虑到雅可比转置法作的物理类推, 这个结果是合理的, 但实际上它可能并不符合用户的期望.
The force-based approach of the preceding method has some appealing characteristics for interactive manipulation. There are some cases, however, for which the method does not perform well. Figure 4.2 illustrates one such case. On the left is a manipulator in a singular conguration with a new desired position for the tip shown as a black dot. The conguration on the right shows a reasonable solution to this inverse kinematic problem, and probably reflects what a user expects to get by dragging the tip in towards the goal. However as the user attempts to drag the tip inwards the applied force exerted on the tip points straight down the singular direction it is in effect cancelled out and the tip will not move. This behaviour is reasonable given the physical analogy of the Jacobian transpose method, but may not really match the users expectation.
图4.2: 一个雅可比转置法不能很好处理的情况. 左图向内拉动操纵器的末端并不能生成如右图所示的期望结果.
这里展示一个替代的IK算法, 适合于互交定位, 而且对于图4.2的情况, 能够提供合理的结果. 它基于一种启发式方法, 这种方法的提出, 是用来为一个标准的基于最小化的算法快速地找到一个初始可行解(initial feasible solution) [WC91]. 然而它可以独立作为一个IK定位的工具, 像雅可比转置法一样, 这种方法既简单又有效, 而且可以解决带有奇点的问题. 然而它的行为与前面演示的算法差别比较大, 这里建议将它作为雅可比转置法的一个补充, 而不是替代.
An alternative inverse kinematic algorithm is presented here, suitable for interactive positioning and capable of providing reasonable behaviour in cases such as that in Figure 4.2. It is based on a heuristic method which has been proposed to quickly find an initial feasible solution for a standard minimization based algorithm[WC91]. However it can stand on its own as an inverse kinematic positioning tool. Like the Jacobian transpose method the technique is efficient, simple, and immune to problems with singularities. However its behaviour is quite different from that exhibited by the previous algorithm, and it is suggested here as a complement to, rather than a replacement for, the Jacobian transpose method.
4.2.1 循环坐标下降法 The Cyclic Coordinate Descent Method
循环坐标下降法是一个迭代的启发式搜索技术, 它尝试通过每次修正单个关节, 将位置和朝向的误差最小化. 每次迭代都需要对操纵器进行一次从末端关节到基座的遍历. 为了将目标函数最小化, 每个关节变量qi会按顺序被修改. 单个关节上的最小化问题是足够简单的, 可以构造出一个分析解, 所以每次迭代都很快.
The cycliccoordinate descent (CCD) method is an iterative heuristic search technique which attempts to minimize position and orientation errors by varying one joint variable at a time. Each
iteration involves a single traversal of the manipulator from the most distal link inward towards the manipulator base. Each joint variable qi is modied in turn to minimize an objective function. The minimization problem at each joint is simple enough that an analytic solution can be formulated, so each iteration can be performed quickly.
由于对于每个关节都得到一个解, 末端器的坐标和朝向就可以立即更新以反映出这些变化. 因此在当前迭代中, 任何一个关节上的最小化问题, 都包含了对末端那些节点的修改, 对它们产生影响. 这与之前描述的方法不同, 之前的方法实际上是同一时刻确定每个节点的变化2 [2:原作者注: 虽然每个节点的变化是按顺序计算的, 但是父节点不对子节点产生影响, 迭代过程中操纵器的状态不变].
As a solution is obtained at each joint the end-effector position and orientation are updated immediately to reect the change. Thus the minimization problem to be solved at any particular joint incorporates the changes made to more distal joints during the current iteration. This differs from the previously described method, which in eect determines the changes to each joint simultaneously2 (2: ie although the changes are computed sequentially, the state of the manipulator remains constant during the iteration).
[译注: CCD是将末端效应器与目标的距离作为启发函数, 通过每次迭代时, 通过调整旋转, 不断逼近目标, 将与目标的旋转和位移误差最小化, 最后达到目标. 由于每次迭代是从末端开始到基座, 靠近基座的关节会对靠近末端的节点产生影响, 在处理每个关节点之前, 其子节点的误差已经最小化. 下面是对每次个关节上问题的分析, 实际使用中可以根据原理, 作出各种应用和工程的算法.]
假定当前的末端器坐标是
Pc = (xc, yc, zc)
而末端器的朝向, 是由旋转矩阵Oc的三个正交向量确定
Oc = [ u1c, u2c, u3c]T [译注: 原文中是列向量, 这里不好表示, 故写作行转置]
要想使末端器离目标位置Pd和目标朝向Od尽可能的接近, 需要找到一个关节向量q, 使得下面的误差最小化:
E(q) = Ep(q) + Eo(q) (4.13)
它是位置误差
Ep(q) = ||(Pd - Pc)||2 (4.14)
和朝向误差
Eo(q) = ∑j=13 ((ujd·ujc) - 1)2 (4.15)
两者之和.
这个方法在计算时每次只考虑一个节点, 从末梢开始计算, 直到基座. 计算到下个节点i-1之前, 每个节点变量qi会被修改以是的公式(4.13)的误差最小化. 在每个节点上, 最小化问题成了一个简单的1维的优化问题, 因为只有qi允许被改变而向量q中的其他元素是固定的. 由于关节点i可能是一个旋转关节, 或者是一个位移关节, 有两种情况需要考虑.
Suppose that the current end-effector position is
Pc = (xc, yc, zc)
and that the current orientation of the end-effector is specified by the three orthonormal rows of the rotation matrix Oc
Oc = [ u1c, u2c, u3c]T
The end-effector can be placed as close as possible to some desired position Pd and orientation Od by finding a joint vector q which minimizes the error measure
E(q) = Ep(q) + Eo(q) (4.13)
which is just the sum of a positional error measure
Ep(q) = ||(Pd - Pc)||2 (4.14)
and an orientation error measure
Eo(q) = ∑j=13 ((ujd·ujc) - 1)2 (4.15)
The method proceeds by considering one joint at a time, from the tip to the base. Each joint variable qi is modified to minimize equation (4.13), before proceeding to the next joint i -1. At each joint, minimizing (4.13) becomes a simple onedimensional optimization problem, since only qi is allowed to change while the other elements of q are fixed. Since joint i is either a rotation or a translation joint, there are two cases to be considered.
旋转型关节 Rotation Joint
图4.3演示了迭代过程中旋转型节点i的情况. 向量Pic是从节点位置Ji指向效应器位置的向量, Pid是从Ji指向期望的末端器位置的向量. 我们可以绕着世界空间的关节轴 axisi, 自由旋转向量Pic, 角度为Φ. 旋转后的向量为
P'ic(Φ) = Raxisi(Φ)Pic
随着Φ的改变, P'ic(Φ)划出一个以Ji为中心的圆圈. 圆上距离目标点Pd最近的点是圆与向量Pid的交点, 所以我们最好的做法是只偏移变量Ji偏移, 把P'ic(Φ)向Pid对齐. 这意味着我们需要找到一个Φ值, 使以下表达式的值最大
g1(Φ) = Pid·P'ic(Φ) (4.16)
用同样的方法 , 可以通过使下面的表达式最大化, 而朝向误差得到最佳矫正
g2(Φ) = ∑j=13 ujd·u'jc(Φ) (4.17)
合并(4.16)和(4.17)这两个表达式, 得到节点i的一个聚合对象函数, 需要将它最大化,
g(Φ) = wpg1(Φ) + wog2(Φ) (4.18)
这里wp和wo是任意的位置和朝向加权因子, 他们的引入与雅可比转置法中, 为得到矩阵K而引入的因子类似. 为这两个因子设置的特殊值建议如下[WC91]
wo = 1
wp = α(1+ρ)
其中, α是一个缩放参数, 与世界缩放W按比例求反
α = k / W
这是为了这个算法的行为与缩放无关.因子ρ是一个任意的权重值, 与操纵器的配置相关. 虽然没有特别的原因, Wang[WC91]建议其取值为
ρ = min ( ||Pid||, ||Pic|| ) / max( ||Pid||, ||Pic|| )
这个值在实际使用中结果还算可以.
通过一些代数的计算, 在关节i处需要最大化的目标函数(4.18)可以简化为
g(Φ) = k1(1-cosΦ) + k2cosΦ + k3sinΦ (4.19)
其中常量k1, k2, k3 的值分别为:
k1 = wp(Pid·axisi)(Pic·axisi) + wo∑j=13(ujd·axisi)(ujc·axisi) (4.20)
k2 = wp(Pid·Pic) wo∑j=13(ujd·ujc) (4.21)
k3 = axisi·[wp(Pic x Pid) + wo∑j=13(ujc x ujd)] (4.22)
根据初等微积分, 我们知道目标函数(4.19)在-π≤Φ≤-π的区间时, 在其一阶导数为0, 二阶导数为负数时, 可以达到最大值. 第一个条件
(k1 - k2)sinΦ + k3cosΦ = 0
意味着
Φ = tan-1(k3/(k2-k1)) (4.23)
这样可以确定候选值Φc的取值范围是-π/2<Φc<-π/2. 然而由于tan是一个周期性函数, 需要考虑另外两个潜在的候选值Φc+π和Φc-π. 这些候选值之中, 位于-π<x<-π区间的, 通过二阶导数的那些, 可以将目标函数(4.19)最大化. 如果候选值有多个, 要用每个值带入目标函数, 看最后那个值生成的结果最大. 一旦Φ由这种方式唯一确定下来, 就被累加到当前的关节变量qi上, 这里我们可以引入一个任意的权重因数 wi, 0≤wi≤1, 来控制这个关节的"硬度", 所以更新方式就成为
qi = qi + wiΦ
旋转末端器的坐标系, 以反映这个变化, 然后使用这个更新过的末端器, 来向下一个关节i-1迭代.
Figure (4.3) illustrates the situation for rotation joint i during an iteration. The vector Pic is the vector from the joint position ji to the current end-effector position and, Pid is the vector from ji to the desired end-effector position. We are free to rotate the vector Pic about the world spac joint axis axisi by some amount. This rotated vector is
P'ic(Φ) = Raxisi(Φ)Pic
As Φ varies, P'ic(Φ) sweeps out a circle centered at ji. The point on this circle closest to the desired position Pd is the point at which the circle would intersect the line along Pid, so the best we can do by varying joint variable ji alone is to align the two vectors P'ic(Φ) and Pid. This implies that we seek a value for Φ which maximizes the expression
g1(Φ) = Pid·P'ic(Φ) (4.16)
Reasoning along similar lines, an orientation error is best corrected by making sure that Φ also maximizes the expression
g2(Φ) = ∑j=13 ujd·u'jc(Φ) (4.17)
Combining both (4.16) and (4.17) gives an aggregate objective function to be maximized for joint i
g(Φ) =wpg1(Φ) + wog2(Φ) (4.18)
Here wp and wo are arbitrary position and orientation weighting factors, respectively, and are introduced to play a role similar to that of the gain matrix K of the Jacobian transpose method. The following ad-hoc values for these factors are suggested [WC91]wo = 1
wp = α(1+ρ)
Here is a scaling factor inversely proportional to the overall world scale W
α = k / W
and is required to make the algorithm's behaviour scale-invariant. The factor is an arbitrary weight which depends on the configuration of the manipulator; Wang[WC91] suggests, without justication, that
ρ = min(||Pid||, ||Pic||) / max(||Pid||, ||Pic||)
which seems to be adequate in practice.
With some algebraic manipulation, the objective function (4.18) to be maximized at joint i can be reduced to
g(Φ) = k1(1-cosΦ) + k2cosΦ + k3sinΦ (4.19)
with the constant coefficients k1, k2, and k3 given by
k1 = wp(Pid·axisi)(Pic·axisi) + wo∑j=13(ujd·axisi)(ujc·axisi) (4.20)
k2 = wp(Pid·Pic) wo∑j=13(ujd·ujc) (4.21)
k3 = axisi·(wp(Pic x Pid) + wo∑j=13(ujc x ujd)) (4.22)
From elementary calculus, we know that the objective function (4.19) is maximized over the interval -π≤Φ≤-π, when its first derivative is zero and its second derivative is negative. The first condition
(k1 - k2)sinΦ + k3cosΦ = 0
implies that
Φ = tan-1(k3/(k2-k1)) (4.23)
which determines a candidate value Φc in the range -π/2<Φc<-π/2. However, since tan is periodic there are potentially two other candidate values to consider: Φc+π and Φc-π. Of these candidate values, those which lie in the interval -π<x<-π and which pass the second derivative test are maximizing values for the objective function (4.19). If there is more than one of these, the objective function is evaluated with each to determine which yields the true maximum. Once Φ has been uniquely determined in this way it is added to the current joint value qi .At this point we can introduce an arbitrary weighting factor wi, 0≤ wi ≤1, which controls the perceived "stiffness" of the joint, so that the update becomes
qi = qi + wiΦ
The end-effector frame is then rotated to reflect this change, and the iteration continues on to the
next joint i-1 using the updated end-effector.
位移型关节 Translation Joint
如果关节i是一个位移型关节, 那么它只能减少位置误差(4.14), 不难看出 [WC91], 使位置误差最小化的最好方式是改变关节的位移(displacement), 变化量为
λ = (Pid - Pic)·axisi (4.24)
跟前面一样, 这个值也加上权重wi, 然后累加到当前的关节变量qi, 末端器的位置会被更新, 然后继续下一个关节.
If joint i is a translation joint, then it can only reduce the position error (4.14). It is not difficult to show [WC91] that the best that can be done to minimize the position error is to change the joint displacement by
λ = (Pid - Pic)·axisi (4.24)
This is weighted by wi, as before, and added to the current value of joint variable qi. The end-effector position is updated before continuing on to the next joint.
总览 Overview
每一次对n个关节的操纵器迭代, 会从n到1按顺序访问关节. 在每一个关节处, 原来的n维优化问题, 被简化为一个1维的, 只与关节变量qi相关的问题, 而且可以是一个分析解(analytic solution). 如果关节旋转, 则按照(4.23) 对qi计算增量变化, 否则关节位移, 按(4.24)计算. 变量qi按照这个增量增加, 然后被截断到最大值和最小值之间.在向前进行到下一个关节之前, 当前的末端器坐标系(Pc和Oc)根据当前关节的变化, 得到修改.
A single iteration of the CCD method for an n-jointed manipulator visits joints n through 1 in turn. At each joint, the original n-dimensional optimization problem is reduced to a one-dimensional problem involving just the joint variable qi, which admits to an analytic solution. An incremental change to qi is computed with either (4.23), if the joint rotates, or with (4.24) if the joint translates. The variable qi is then incremented and clamped to upper and lower bounds. The current end-effector frame(Pc and Oc) is updated to reflect the change before proceeding to the next joint.
这个算法对于奇异构形表现正常, 而且由于目标函数(4.13)的值在每一步迭代中递减, 这个方法可以保证可收敛. 然而这个方法的启发式性质, 使得它的收敛速度没有办法量化, 因为它依赖于操纵器自己的结构. 实践中, 大多数问题都可以通过很少次的迭代解决, 尽管有些情况下, 这个方法可能收敛的非常慢. 就行为而言, 启发式意味着末端关节比靠近基座的关节更更轻易的移动; 如果可以只移动最末一个关节而达到末端器的目标, 那么只有那一个关节会移动.
The algorithm behaves well around singular configurations, and since the value of the objective function (4.13) is reduced with each step, the method is guaranteed to converge. But the heuristic nature of the method makes the rate of convergence somewhat difficult to quantify, since it is dependent on the structure of the manipulator itself. In practice, most problems can be solved with only a few iterations, although there are situations for which the method can converge very slowly. In terms of behaviour, the heuristic implies that distal links move more readily than links closer to the base; if the end-effector goal can be reached by moving only the final link of the chain, then only that link will move.
4.3 比较 Comparison
上面描述的两种方法[译注:指雅可比转置和CCD], 如果有一定的附加说明, 都适合用于互交式直接操纵.单次迭代的代价是最小化的, 这样两种方式在拖动相对合理的复杂的操纵器, 都可以提供很好的回馈. 在运动学奇点附近, 两者都可以在数值上稳定, 尽管CCD在这一点上更具有优势, 因为它可以处理奇点附近的问题. 两者都不擅长的地方是他们对一个问题的收敛速度: 两者都有可能有很差的收敛速度, 特别是在需要高精度的情况下.
Each of the methods described above is suitable for interactive direct manipulation, with some caveats. The per-iteration cost for each is minimal, so that both can provide good feedback when dragging reasonably complex manipulators. Each can be made numerically stable near kinematic singularities, although the CCD method has an edge in this regard since it is completely immune to difficulties near singularities. Where neither method particularly excels is in the rate at which they converge toward a solution: both can exhibit poor convergence rates particularly if high accuracy is required.
图4.4和4.5比较了两种算法解决一对IK问题的效率. 例中的操纵器有7个维度的自由度(DOF), 大约相当于一个简单手臂的复杂度, 尽管本例中没有对每个关节移动范围的限制. 在每个例子中为末端器制定一个位置目标, IK问题会根据不同程度的精度/准确度来解决. 各个图展示了初始状况, 和两种方式下最终的解决方案. 另外与要求的精确程度相关的, 达到目标的时间也被描绘出来. 图4.4的第一个例子, 末端器的目标可以很好的够到, 两种方法都可以相当快的解决问题. 然而很明显, 雅可比转置在接近结果的时候收敛速度较慢; 在每次要求的精度变大, 小数位数的增加, 性能表现有明显的下降.
Figures 4.4 and 4.5 compare the performance of each algorithm for solving a pair of inverse kinematic problems. The manipulator has 7 degrees of freedom, about the same complexity as a simple approximation to a limb, although for this example there are no limits on the range of movement for each joint. In each case a position goal is specified for the end-effector, and the inverse kinematic problem is solved to varying degrees of accuracy. Each figure shows the initial configuration, and the final solution obtained with each method. In addition, the time to achieve the solution is plotted with respect to the degree of accuracy requested. In the first case of Figure 4.4 the end-effector goal is well within reach, and both methods are able to solve the problem reasonably quickly. However, it is already apparant that the Jacobian transpose converges slowly when it is close to a solution; there is a marked decrease in performance for each additional digit of accuracy requested.
在图4.5的第二个例子中, 目标点接近手臂所能够到范围的边界, 这样必须通过一个奇异构形[译注: 所有关节几乎排成直线]才能达到目标. 尽管两种方法都可以达到目标, CCD很明显胜过了另一种, 尤其在问题的精度增加的情况下更为明显. 在接近目标时, 一个很小的"拉"力, 力的方向对大多数关节没有影响, 妨碍了雅可比转置法的表现, 所以达到目标的进度非常慢. CCD的启发式方法恐怕在此例中表现要好得多.
In the second case of Figure 4.5, the gal is close to the edge of the reach space of the limb, which must approach a singular configuration to achieve the goal. Although both methods are able to solve the goal, the CCD method clearly outperforms the other, particularly as the accuracy of the solution increases. As it approaches the goal, the Jacobian transpose method is hampered by a small applied force which is "pulling" in a direction which doesn't affect most of the joints, so the progress towards the goal is very slow. The heuristic approach of the CCD fares much better in this example.
图中最终的形状也说明了: 与其他倾向于均衡改变链条节点的方法相比, CCD方法更喜欢移动末端节点. 这种行为上的不同, 在互交式拖动中是很容易观察到的. 使用雅可比转置法操纵一个链, 感觉像是在使用一个柔韧的有弹性的杆子, 而CCD方法给人的感觉更像拉动一个链条: 由一些环节松散地连接而成的链条. 虽然CCD方法的最后解决方案可能开起来比雅可比转置法更粗劣, 但是要记住这些结果是没有通过互交而得到的 - 比如他们是离线计算出来的. 当通过互交式拖动来使用CCD方法时, 通常不难通过适当的移动光标来制定最终目标位置, 来控制它. 同时, 两种方法支持一些方法来控制关节的反应程度, 通过给每个关节指定一个合适的权重因数wi就可以做到. 特别的, 这个参数可以用来改变CCD方法的缺省行为.
The final configurations shown in the figures also illustrate the CCD method's preference for moving distal links, in contrast with the other method's tendency to distribute joint changes more equally along the chain. This difference in behaviour is quite noticeable during interactive dragging. Manipulating a chain with the Jacobian transpose method tends to feel like playing a flexible elastic rod, while the CCD method imparts a feel more akin to pulling on a chain of loosely connected links. While the final solutions for the CCD method might look inferior to those obtained with the Jacobian transpose, keep in mind that these solutions were obtained noninteractively - i.e. they were computed offline. When dragging interactively using the CCD method it is usually not difficult to gain control over the final position by moving the cursor appropriately. Also, both methods support a means of controlling joint responsiveness by specifying an appropriate weighting factor wi at each joint. In particular, this parameter can be useful to offset the default behaviour of the CCD method.
这些例子演示了两种方法的主要优缺点. 两种都很快, 因此当需要直接操纵时, 甚至在中等性能的机器上, 也值得考虑. 雅可比方法的优势在于通过直观的方式向末端器推拉; CCD方法在这方面不够直观. CCD方法对于奇异构形表现更加稳定, 虽然收敛速度会变慢, 但是还没慢到雅可比转置法的程度. 此外, 可以说, 直接操纵未必需要很高的精度. 当然如果一个用户将光标在整个屏幕上挥动时, 末端器追踪到它的精度达到小数点后6位, 这时候并不是很重要; 小数点后1到2位的精度就够了. 当需要高精度定位时, 尤其是在奇点附近, CCD方法是合适的方法. 总的来说, 这两种方法是互补的, 为用户提供了可代替的互交模型.
These examples illustrate the main advantages and disadvantages of each method. Both are quick and therefore worth considering if direct manipulation is required, even on machines with modest performance. The Jacobian method has the advantage of responding in an intuitive fashion to pushes and pulls on the end-effector; the CCD method is not as intuitive in this regard. The CCD method exhibits more stability around singular configurations, and although its rate of convergence slows, it is not nearly to the extent that the Jacobians does. Moreover, it can be argued that direct manipulation does not necessarily require a high degree of accuracy. Certainly while a user is sweeping a cursor across the screen it is not critical that the end-effector track it to six decimal places of precision; one or two decimal places of accuracy probably suffices. When accurate positioning is required, particularly near singularities, the CCD method would be the appropriate method to use. In general, the two methods complement each other nicely, providing alternate interaction models to offer the user.
[摘译] IK: 操纵关节式物体的反向动力学和几何约束的更多相关文章
- Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...
- Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学
1. 介绍 Avatar Mask(动画融合) 前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题.而动画融合一般用于解决例如边跑边挥手的问题. 简单说就是让跑步去控制腿的骨骼,挥手控制手的 ...
- 骨骼动画反向动力学(IK)的实现
反向动力学,Inverse Kinematics,简称IK.简单地说,由父骨骼的方位和子骨骼的相对变换得到子骨骼的方位,称为正向动力学(Forward Kinematics,FK):而IK则是先确定子 ...
- backreference Oracle正則表達式中的反向引用
这是Oracle对正則表達式的backreference的描写叙述 从定义中能够看到,当匹配表达式中已()的形式将一个子串包括起来.后面就能够以\? 的形式来引用.\1相应第一个(),\2相应第二 ...
- Unity (反向动力学)IK动画
- Spine(2D骨骼动画)
点击进入Spine官网 Spine 是一款针对游戏的 2D 骨骼动画编辑工具. Spine 旨在提供更高效和简洁 的工作流程,以创建游戏所需的动画. 功能: 1.摄影表 Dopesheet 在动画制作 ...
- Unity3D学习笔记(十七):IK动画、粒子系统和塔防
新动画系统: 反向动力学动画(IK功能): 魔兽世界(头部动画),神秘海域(手部动画),人类一败涂地(手部动画) 如何启用(调整) 1.必须是新动画系统Animator 设置头.手.肘的目标点 2.动 ...
- 从3D Studio Max导入物体 Importing Objects From 3D Studio Max
原地址:http://game.ceeger.com/Manual/HOWTO-ImportObjectMax.html If you make your 3D objects in 3dsMax, ...
- 从maya导入物体 Importing Objects From Maya
原地址:http://game.ceeger.com/Manual/HOWTO-ImportObjectMaya.html Unity natively imports Maya files. To ...
随机推荐
- 如何使用桥接模式使虚拟机VMware中的Redhat能上网
VMware中有三种网络连接方式可使其上网:桥接模式,NAT模式,host-only模式,下面详细介绍如何使用桥接模式使虚拟机中的Redhat连上互联网. Bridge(桥接)模式 在Bridge模式 ...
- Cocos2dx 代码中包含中文导致编译错误的问题解决方法
从网上下载一个cocos2dx的源码,是IOS版本的,我将其迁移到windows 7下 ,用VS2010编译,出现一堆的C2001错误: 1>d:\cocos2d-x-2.2.6\mygame\ ...
- Problem A: 重载字符的加减法
Description 定义一个字符类Character,只有一个char类型的数据成员. 重载它的+.-.<<和>>运算符,其中+.-的第二个操作数是int类型的整数n.“+ ...
- 第十三周翻译-《Pro SQL Server Internals, 2nd edition》
<Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 聚集索引 聚集索引指示表中数据的物理顺序 ...
- vue-resource 和 axios的区别
vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery.vue-resource是Vue.js的 ...
- 通过重写request.getParameter方法来解决中文乱码问题。
在原生servlet的商城项目中,BeanUtils.populate方法封装不上注册的参数. 已知BeanUtils.populate方法是封装不上date对象的,于是自定义了一个转换器用来封装Da ...
- Java复数的加乘除运算
//主要是对零的处理,有什么不对的地方欢迎批评指正,一起进步class complex{ double a,b; public String toString() { return("实部: ...
- 查找数组中重复的唯一元素+时间复杂度O(n)+空间复杂度O(1)
这是我BIGO前端面试时,面试官给我出的一道题,题目是长度为N的数组,元素大小范围在[1,N-1],只有一个重复的元素,用O(n)的时间复杂度和O(1)的空间复杂度找出来这个重复的元素, 大致思路 1 ...
- FCC JS基础算法题(5):Return Largest Numbers in Arrays(找出多个数组中的最大数)
题目描述: 找出多个数组中的最大数右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组.提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组 ...
- Web服务器软件 (Tomcat)
1.什么是服务器? 安装了服务器的软件的计算机 服务器软件:接收用户的请求(request),处理请求,做出响应. Web服务器软件:接收用户的请求(request),处理请求,做出响应,再Web服务 ...