39 #ifndef AMINO_RX_SCENE_IK_H
40 #define AMINO_RX_SCENE_IK_H
57 size_t n_tf,
const double *TF,
size_t ld_TF,
58 size_t n_q,
double *q );
95 AA_API struct aa_rx_ik_parm*
207 double *q,
enum aa_mem_refop refop );
214 double *q,
enum aa_mem_refop refop );
221 double *q_all,
enum aa_mem_refop refop );
229 const struct aa_rx_sg_sub *ssg );
236 const struct aa_rx_sg_sub *ssg,
250 aa_rx_ik_jac_x2dq (
const struct aa_rx_ik_parm *parm,
size_t n_q,
252 const double E_ref[7],
const double dx_ref[6],
267 AA_API struct aa_rx_ik_cx *
525 struct aa_rx_ik_jac_cx;
530 AA_API struct aa_rx_ik_jac_cx *
544 size_t n_tf,
const double *TF,
size_t ld_TF,
545 size_t n_q,
double *q );
551 size_t n_tf,
const double *TF,
size_t ld_TF,
552 size_t n_q,
double *q );
#define AA_API
calling and name mangling convention for functions
#define AA_RESTRICT
Defined restrict keyword based on language flavor.
int aa_rx_ik_fun(void *context, size_t n_tf, const double *TF, size_t ld_TF, size_t n_q, double *q)
General type for an IK solver function.
AA_API void aa_rx_ik_set_restart_time(struct aa_rx_ik_cx *context, double t)
Set the maximum time limit for IK restarts.
AA_API void aa_rx_ik_parm_set_tol_angle_svd(struct aa_rx_ik_parm *parm, double tol)
Set angular tolerance to switch to SVD.
AA_API double aa_rx_ik_opt_err_qlnpv_fd(void *cx, const double *q, double *dq)
IK workspace error (for testing only).
AA_API void aa_rx_ik_parm_set_frame(struct aa_rx_ik_parm *parm, aa_rx_frame_id frame)
Set frame to solve.
double aa_rx_ik_opt_fun(void *cx, const double *q, double *dq)
Function type for optimization objectives and contstraints.
AA_API struct aa_dvec * aa_rx_ik_get_seed(const struct aa_rx_ik_cx *context)
Return reference to the seed state used by the IK solver.
AA_API void aa_rx_ik_set_frame_id(struct aa_rx_ik_cx *context, aa_rx_frame_id id)
Set the frame to solve for.
AA_API void aa_rx_ik_parm_take_seed(struct aa_rx_ik_parm *parm, size_t n_q, double *q_all, enum aa_mem_refop refop)
Set a configuration seed (initial) value.
AA_API void aa_rx_ik_jac_cx_destroy(struct aa_rx_ik_jac_cx *cx)
Destroy a Jacobian IK solver.
AA_API void aa_rx_ik_parm_set_gain_trans(struct aa_rx_ik_parm *parm, double k)
Set translational gain.
AA_API void aa_rx_ik_parm_set_tol_trans_svd(struct aa_rx_ik_parm *parm, double tol)
Set translational tolerance to switch to SVD.
AA_API void aa_rx_ik_parm_set_max_iterations(struct aa_rx_ik_parm *parm, size_t n)
Set maximum interations.
AA_API void aa_rx_ik_parm_set_k_dls(struct aa_rx_ik_parm *parm, double s2min)
Set damping constant for damped least squares (LU decompisition).
AA_API struct aa_dvec * aa_rx_ik_get_start(const struct aa_rx_ik_cx *context)
Return reference to the start state used by the IK solver.
AA_API void aa_rx_ik_set_start(struct aa_rx_ik_cx *context, const struct aa_dvec *q_start)
Set the start state used by the IK solver.
AA_API void aa_rx_ik_parm_set_algo(struct aa_rx_ik_parm *parm, enum aa_rx_ik_algo algo)
Set inverse kinematics algorithm.
AA_API void aa_rx_ik_set_seed(struct aa_rx_ik_cx *context, const struct aa_dvec *q_seed)
Set seed used by the IK solver.
AA_API struct aa_rx_ik_parm * aa_rx_ik_parm_create()
Create options struct for kinematic solver.
aa_rx_ik_algo
Inverse Kinematics Algorithm.
@ AA_RX_IK_SQP
Sequential Quadratic Program.
@ AA_RX_IK_LMA
Levenberg-Marquardt (unimplemented)
@ AA_RX_IK_JPINV
Jacobian pseudo-inverse w/ adapative integration (kludgey)
AA_API int aa_rx_ik_jac_fun(void *context, size_t n_tf, const double *TF, size_t ld_TF, size_t n_q, double *q)
Convenience function for Jacobian IK solver.
AA_API void aa_rx_ik_parm_set_tol_trans(struct aa_rx_ik_parm *parm, double tol)
Set translational tolerance.
AA_API void aa_rx_ik_parm_set_s2min(struct aa_rx_ik_parm *parm, double s2min)
Set minimum square singular value for damped least squares (SVD).
AA_API double aa_rx_ik_opt_err_trans(void *cx, const double *q, double *dq)
IK position error.
AA_API void aa_rx_ik_parm_set_tol_dq(struct aa_rx_ik_parm *parm, double tol)
Set tolerance on joint motion.
AA_API void aa_rx_ik_set_frame_name(struct aa_rx_ik_cx *context, const char *name)
Set the frame to solve for.
AA_API void aa_rx_ik_parm_set_eqct(struct aa_rx_ik_parm *parm, aa_rx_ik_opt_fun *fun, double tol)
Set the equality constraint for optimization (e.g., SQP) IK.
AA_API void aa_rx_ik_parm_center_configs(struct aa_rx_ik_parm *parm, const struct aa_rx_sg_sub *ssg, double gain)
Convenience function to set IK options to center joints.
AA_API struct aa_rx_ik_cx * aa_rx_ik_cx_create(const struct aa_rx_sg_sub *ssg, const struct aa_rx_ik_parm *parm)
Create an IK solver context.
AA_API void aa_rx_ik_parm_destroy(struct aa_rx_ik_parm *parm)
Destroy options struct for kinematic solver.
AA_API int aa_rx_ik_check(const struct aa_rx_ik_cx *context, const struct aa_dmat *TF, struct aa_dvec *q_sub)
Check an IK solution.
AA_API double aa_rx_ik_get_restart_time(struct aa_rx_ik_cx *context)
Get the maximum time limit for IK restarts.
AA_API void aa_rx_ik_parm_set_tol_angle(struct aa_rx_ik_parm *parm, double tol)
Set angular tolerance.
AA_API void aa_rx_ik_set_seed_rand(struct aa_rx_ik_cx *context)
Convenience function to set a random seed.
AA_API void aa_rx_ik_parm_set_gain_angle(struct aa_rx_ik_parm *parm, double k)
Set angular gain.
AA_API void aa_rx_ik_set_seed_center(struct aa_rx_ik_cx *context)
Convenience function to set the seed to the centered configuration.
AA_API void aa_rx_ik_parm_set_tol_obj_rel(struct aa_rx_ik_parm *parm, double tol)
Set relative tolerance on objective function.
AA_API void aa_rx_ik_parm_set_dt(struct aa_rx_ik_parm *parm, double dt)
Set integration step.
AA_API void aa_rx_ik_parm_set_tol_obj_abs(struct aa_rx_ik_parm *parm, double tol)
Set absolute tolerance on objective function.
AA_API void aa_rx_ik_parm_set_debug(struct aa_rx_ik_parm *parm, int debug)
Print debugging output for IK solver.
AA_API void aa_rx_ik_parm_set_obj(struct aa_rx_ik_parm *parm, aa_rx_ik_opt_fun *fun)
Set an error objective function for optimization (e.g., SQP) IK.
AA_API struct aa_rx_ik_jac_cx * aa_rx_ik_jac_cx_create(const struct aa_rx_sg_sub *ssg, const struct aa_rx_ik_parm *parm)
Create a Jacobian IK solver.
AA_API void aa_rx_ik_cx_destroy(struct aa_rx_ik_cx *cx)
Destroy an IK solver context.
AA_API void aa_rx_ik_parm_take_config(struct aa_rx_ik_parm *parm, size_t n_q, double *q, enum aa_mem_refop refop)
Set a reference configuration.
AA_API double aa_rx_ik_opt_err_dqln(void *cx, double *q, double *dq)
IK Workspace error.
AA_API double aa_rx_ik_opt_err_jcenter(void *cx, const double *q, double *dq)
Error from the joint center.
AA_API int aa_rx_ik_solve(const struct aa_rx_ik_cx *context, const struct aa_dmat *TF, struct aa_dvec *q)
Run the IK solver.
AA_API double aa_rx_ik_opt_err_dqln_fd(void *cx, const double *q, double *dq)
IK workspace error (for testing only)
AA_API void aa_rx_ik_parm_take_gain_config(struct aa_rx_ik_parm *parm, size_t n_q, double *q, enum aa_mem_refop refop)
Set a configuration gain (nullspace).
AA_API double aa_rx_ik_opt_err_qlnpv(void *cx, const double *q, double *dq)
IK workspace error.
AA_API double aa_rx_ik_opt_err_trans_fd(void *cx, const double *q, double *dq)
IK position error (for testing only)
AA_API int aa_rx_ik_jac_solve(const struct aa_rx_ik_jac_cx *context, size_t n_tf, const double *TF, size_t ld_TF, size_t n_q, double *q)
Solve the Jacobian IK.
AA_API void aa_rx_ik_parm_center_seed(struct aa_rx_ik_parm *parm, const struct aa_rx_sg_sub *ssg)
Set the configuration seed (initial) to be the center position.
The scenegraph data structure.
signed long aa_rx_frame_id
Type for frame indices.
Descriptor for a block matrix.