### BF-Blender : SoC IK inside / windows (2005/08/27)

Posted:

**Sat Aug 27, 2005 12:02 pm**Hello, like the title says, SoC Ik branch now in BF-Blender.

Compilation with Bullet, quicktime, ...

Log Blendix:

7zip file(1771KB)

Compilation with Bullet, quicktime, ...

Log Blendix:

zip file (2317KB)What changed in IK lib:

Fully restructured, with components now as follows:

- IK_Solver: C <=> C++ interface

- IK_QSegment: base class for bone/segment with 0

to 3 DOF

- IK_QTask: base class for a task (currently there's

a position and a rotation task)

- IK_QJacobian: the Jacobian matrix, with SVD

decomposition, damping, etc

- IK_QJacobianSolver: the iterative solver

The exponential map parametrization is no longer used,

instead we have now:

- 3DOF and 2DOF XZ segments: directly update matrix

with Rodrigues' formula

- Other: Euler angles (no worries about singularities

here)

Computation of the Jacobian inverse has also changed:

- The SVD algorithm is now based on LAPACK code,

instead of NR, to avoid some problems with rounding

errors.

- When the problem is underconstrained (as is the case

most of the time), the SVD is computed for the transpose

of the Jacobian (faster).

- A new damping algorithm called the Selectively Damped

Least Squares is used, result in faster and more

stable convergence.

- Stiffness is implemented as if a weighted psuedo-inverse

was used.

Tree structure support.

Rotation limits:

- 3DOF and 2DOF XZ segments limits are based on a swing

(direct axis-angle over XZ) and twist/roll (rotation

over Y) decomposition. The swing region is an ellipse

on a sphere.

- Rotation limits are implemented using an inner clamping

loop: as long as there is a violation, a violating DOF

is clamped and removed from the Jacobian, and the solution

is recomputed.

Convergence checking is based now on the max norm of angle

change, or the maximum number of iterations.

7zip file(1771KB)