#ifndef GENSERKINS_H
#define GENSERKINS_H
#include "gomath.h"
#include "hal.h"
#define GENSER_MAX_JOINTS 6
#define PI_2 GO_PI_2
#define DEFAULT_A1 0
#define DEFAULT_ALPHA1 0
#define DEFAULT_D1 0
#define DEFAULT_A2 0
#define DEFAULT_ALPHA2 -PI_2
#define DEFAULT_D2 0
#define DEFAULT_A3 300
#define DEFAULT_ALPHA3 0
#define DEFAULT_D3 70
#define DEFAULT_A4 50
#define DEFAULT_ALPHA4 -PI_2
#define DEFAULT_D4 400
#define DEFAULT_A5 0
#define DEFAULT_ALPHA5 PI_2
#define DEFAULT_D5 0
#define DEFAULT_A6 0
#define DEFAULT_ALPHA6 -PI_2
#define DEFAULT_D6 0
typedef struct {
go_link links[GENSER_MAX_JOINTS];
int link_num;
hal_s32_t iterations;
hal_s32_t max_iterations;
} genser_struct;
extern int genser_kin_size(void);
extern int genser_kin_init(void);
extern const char * genser_kin_get_name(void);
extern int genser_kin_num_joints(void * kins);
extern int genser_kin_fwd(void * kins,
const go_real *joint,
go_pose * world);
extern int genser_kin_inv(void * kins,
const go_pose * world,
go_real *joint);
extern int genser_kin_set_parameters(void * kins, go_link * params, int num);
extern int genser_kin_get_parameters(void * kins, go_link * params, int num);
extern int genser_kin_jac_inv(void * kins,
const go_pose * pos,
const go_screw * vel,
const go_real * joints,
go_real * jointvels);
extern int genser_kin_jac_fwd(void * kins,
const go_real * joints,
const go_real * jointvels,
const go_pose * pos,
go_screw * vel);
extern int genser_kin_fwd_interations(genser_struct * genser);
extern int genser_kin_inv_iterations(genser_struct * genser);
extern int genser_kin_inv_set_max_iterations(genser_struct * genser, int i);
extern int genser_kin_inv_get_max_iterations(genser_struct * genser);
#endif