CCD的优点
The reason CCD is so popular is that it is a computationally fast, algorithmically simple, and
straight-forward technique for generating IK solutions that can run at interactive
frame rates.
本文做的事情
We discuss implementation details, limitations (e.g., angle limits, performance tips, convergence problems 收敛问题, oscillation 震荡issues, and comfort factors), and their
applicability to articulated configurations.
the cyclic coordinate descent (CCD) method is one of the most computationally fast and least complex to put into practice.
The CCD IK method is an iterative numerical algorithm that is straightforward and intuitive to implement while also boasting the added advantage of not requiring any complex matrix math decomposition. However, the reader needs to be fluent with elementary vector mathematics (i.e., cross, dot product, angles)
ccd-ik方法是一种迭代简单直观的数值算法同时还具有不需要任何复杂矩阵数学的额外优势
分解。但是,读者需要熟练掌握基本向量数学(即十字、点积、角)。
Maneuvering and arranging these interconnected links into a specific arrangement to achieve a particular goal is the task of the IK solver.
**对IK solver的定义:**操纵和安排这些相互连接的链接到特定排列以实现特定目标是IK解算器的任务。
However, accounting for the numerous problems (e.g., angular limits, oscillations, numerical errors, local minimums) and producing a reliable solution within an acceptable time (i.e., ideally, real time) can be highly challenging and difficult.
本文做的事情 Because character IK problems are highly nonlinear and discontinuous due to the large number of interconnected joint types and angular limits, we discuss how the
CCD algorithm can be applied to a character system and how we can modify the basic underlying implementation to cope with the added complexity (i.e., multiple end-effectors, priority control, comfort factors) while remaining computationally fast and robust.
CCD is able to solve IK problems without the need of complex mathematics or
matrix manipulations
however, we present a review only of past and recent literature that deals specifically with the CCD technique here, starting with its initial discovery and how it has been extended and modified over the past couple of decades to incorporate numerous enhancements to
make it a more flexible, fast, and robust IK solution.
The system of links can be as simple as a single lever or as complex as a human body and can have a single, multiple, or even no solution to the problem.
目标: Essentially, we are searching for a complete set of joint angles that will position the end-effectors at their desired locations.
**算法:**At any point, we can use the complete set of joint angles to calculate the end-effectors’ distance error to the target. To do this, we propagate each link’s angle and length forward from the base of the connected hierarchy to the end-effectors (i.e., forward kinematics). At this point, we can identify the error between the end-effectors and the targets, for example, as shown in Figure 2
The CCD algorithm goes from joint-to-joint and rotates the end-effector as close as possible to the target. After each iterative update, the algorithm measures the distance between the end-effector and the target to decide if it is close enough and should exit. Furthermore, to avoid infinite recursive loops due to unreachable and conflicting goals, the algorithm must set a maximum iteration count.
By “all the way,” we mean that every link in the connected chain of links is iteratively checked and updated to move the end-effector closer to the target.
多末端执行器: Furthermore, this can be beneficial when multiple end-effectors (e.g., left and right arms) are both reaching for different goals—they can avoid conflicting and fighting with each other if we move only the links necessary to reach the final targets.
一步步的演示:
优点: This has the advantage of having a minimalistic memory overhead. Furthermore, the algorithm does not require any memory overhead (e.g., allocation of large blocks of memory as used by matrix-based approaches [William 88, Kenwright 126]).
那么,问题来了: However, the reader may ask, why would we want to start from the bottom and why would we want to start from the top of the linked chain?
For example, Mahmudi and Kallmann’s [Mahmudi and Kallmann11] CCD IK implementation was solved from the base toward the end-effector so that the final locomotive motions were more natural, because a majority of a character’s movement during walking comes from its feet. 从根部开始更自然,类似于人类从脚开始移动
Alternatively, for arms and hands, it is more desirable to go from the end-effectors toward the base, because this offers the least disruption of the lower links.
论文阅读:[Aristidou and Lasenby 11].
改进
Hence, the smart bounce CCD implementation accomplishes this by moving
only those links necessary to accomplish the task. For example, if we take a
human character and we have his hand move forward and pick up an object,
we can accomplish this by moving only two links (i.e., lower and upper arm).
一个系统受初扰动后不再受外界激励,因受到阻力造成能量损失而位移峰值渐减的振动称为阻尼振动。
We can reduce the number of iterations by introducing a biasing factor into each iteration’s corrective rotation.Whereas, by default, we use the angle to rotate the limb, so the end effector is as close as possible to the target. 通过引入偏差系数,减少迭代次数。
We can make multiple links have equal priority when their goals conflict by weighting “shared” links between the end-effectors. For example, we can identify which links are shared between multiple end-effectors, then include a weighting factor so that their angular change is shared among the numerous end-effectors. 给共享的连杆加权
借助公式转换
实际中,可以用IMU
Advantages:
● Simple to implement
● Computationally fast
● Stable around singular configurations
● Can be used with other methods to produce a fast, robust hybrid solution
● Low memory overhead
Disadvantages:
● Difficult to create smooth motions (need to solve and interpolate, or use smaller steps but slower)
● Need to clamp deltas to prevent erratic jumps
● Difficult to support nongeometric constraints (e.g., position of the total
center of mass)
It is recommended that the reader take a hands-on approach to help him
or her solidify understanding and enable appreciation of the elegance and
simplicity that the CCD algorithm uses to solve a complicated, ambiguous
problem. Although it is hoped that this article has opened the reader’s eyes
to a number of appealing and novel ideas regarding the CCD algorithm and is
practicality for real-time character systems, there are still a number of interesting and challenging areas for the reader to pursue if he/she so desires. For
example, although the CCD algorithm is computationally fast, the reader can
investigate further software and hardware tricks to try to push the algorithm
to its limits and gain the maximum possible amount of speed. This can be
through profiling or modification of the algorithm (e.g., fast sin/cos, stack
push/pop instead of recursive calls).
Furthermore, we have not touched on the area of parallel processing of the
CCD algorithm for multichain IK problems. A prepass phase could identify
individual (i.e., not connected) chains that can be solved separately on different threads. Alternatively, the same configuration can be solved multiple times
on different threads with diverse starting approximations simultaneously to
ensure a greater chance of finding a solution; IK angular limits can make
the problem highly nonlinear because of dead regions and can require the IK
solver to try to solve the problem by using different starting approximations.
The CCD algorithm presents three main limitations. First, kinematic singularities are not managed. Second, it does not propose any kinematic constraint to avoid self-collisions. Third, since the h angle can take high values.