Inverse Kinematics for Human Body: Jacobian Computation and Joint Flexibility Control
This programming assignment focuses on implementing inverse kinematics for human limbs, emphasizing the calculation of the Jacobian matrix and its pseudo-inverse. Students are required to make each joint's flexibility adjustable, specify both the goal position and orientation of limbs, and employ Euler integration for movement. Optional tasks include managing multiple constraints, allowing the skeletal root to float, and formulating objective functions for optimization. A user interface for dragging body parts enhances interactivity. Sample codes for gradient descent and energy function minimization are provided.
Inverse Kinematics for Human Body: Jacobian Computation and Joint Flexibility Control
E N D
Presentation Transcript
Programming Assignment #3 • Inverse Kinematics for Human Body • Requirements • Compute Jacobian matrix and its pseudo-inverse • Make the flexibility of each joint adjustable • Specify both goal position and orientation of a limb • Implement Euler integration • You may leave the skeletal root fixed
Programming Assignment #3 • Optional Requirements • Allow multiple constraints to be specified • Make the skeletal root floating • Formulate objective function and implement line minimization • Implement a user-interface to drag an arbitrary body part
Sample Code Nonlinear Programming gradient_descent( d, num_dof, tolerance, iter, f, energyFunc, leastSquareDirection); Objective function to minimize static float energyFunc( vectorNconst&d ); Least Square of Jacobian Matrix static float leastSquareDirection( vectorNconst&d, vectorN& dp )
Sample Code static float gradientFuncLS( vectorN const&d, vectorN& dp ) { tPosture = oPosture; tPosture.addDisplacement( d ); J = computeJacobian(); static matrixN Jt; Jt.transpose( J ); static matrixN Jp; Jp.mult( Jt, J ); static vectorN bp; bp.mult( Jt, b ); dp.solve( Jp, bp ); }