Solver kernel#
The batched HJCD solver: coarse search + Levenberg–Marquardt refine, warp-per-candidate.
Defines
-
SYNC()#
Enums
Values:
-
enumerator N#
-
enumerator N#
Functions
-
int grid_num_joints()#
-
void init_joint_limits_from_grid()#
-
template<typename T>
T solve_pos(const T *s_jointXforms, const T *pos, const T *target_pose_local, int joint, int k, int k_max, T delta_min = 0.35, T delta_max = 0.75)#
-
void upper_index_to_rc(int idx, int DIM, int &r, int &c)#
-
template<typename T>
void recompute_cost_scaled(T *xcur, T *s_jointX, T *s_XmatsHom, const T *row_s, const T *tp, const T *q_goal, T &cost_sq, T &pos_err_m, T &ori_err_rad)#
-
template<typename T>
bool try_dogleg_step(T *s_x, const T *x_old, T *s_jointX, T *s_XmatsHom, const T *row_s, const T *tp, const T *q_goal, const T R, const T *dq_gn, const T *gvec, const T *diagA, T &cost_sq, T &pos_err_m, T &ori_err_rad, T &lambda, const T lambda_min, const T lambda_max, const double2 *limits)#
-
template<typename T>
bool try_coord_linesearch(T *s_x, const T *x_old, T *s_jointX, T *s_XmatsHom, const T *row_s, const T *tp, const T *q_goal, const T *gvec, const T R, const T pos_err_m_hint, T &cost_sq, T &pos_err_m, T &ori_err_rad, T &lambda, const T lambda_min, const T lambda_max, const double2 *limits)#
-
template<typename T, int DIM>
inline void build_ne_and_solve_warp(const T *J, const T *r_scaled, T lambda, T *dq, T *diagA, T *gvec, T *A_sh, T *b_sh, int *s_fail_ptr)#
-
template<typename T>
void solve_lm_batched(T *x, T *pose, const T *target_poses, T *pos_error, T *ori_error, const grid::robotModel<T> *d_robotModel, const T eps_pos, const T eps_ori, T lambda_init, const int k_max, const int B, int stop_on_first)#
-
template<typename T>
void coarse_search(T *x, T *pose, const T *targetsB, T *pos_errors, T *ori_errors, const grid::robotModel<T> *d_robotModel, bool stop_on_first)#
-
template<typename T>
void lm_tuner(T *x, T *pose, const T *targetsB, T *pos_errors, T *ori_errors, const grid::robotModel<T> *d_robotModel, T eps_pos_m, T eps_ori_rad, T lambda_init, int k_max, int B, int stop_on_first)#
-
template<typename T>
void forward_kinematics_kernel(const T *q, T *ee_pose7, T *all_link_T, const grid::robotModel<T> *RM, const int B)#
-
template<typename T>
void sample_q_halton_kernel(T *d_q, int num_configs, uint64_t seed, int offset = 1, int leap = 1)#
-
template<typename T>
T *sample_ik_config_halton(const grid::robotModel<T> *d_robotModel, int num_configs, uint64_t seed, int offset = 1, int leap = 1)#
-
template<typename T>
std::vector<std::array<T, 7>> sample_random_target_poses(const grid::robotModel<T> *d_robotModel, int num_configs, uint64_t seed)#
-
template<typename T>
void build_scores_kernel(const T *pos_err_mm, const T *ori_err_rad, T *scores, int B)#
-
template<typename T>
void perturb_rows_kernel(T *X, int R, T sigma_frac, uint64_t seed, int groupSize, bool skip_first_in_group)#
-
template<typename T, typename RT>
Result<T> generate_ik_solutions(T *target_pose, const grid::robotModel<T> *d_robotModel, int b_size, int num_solutions, bool collision_free, const char *problems_json_text, const char *problem_set_name, int problem_idx, bool write_stats)#
- template Result< double > generate_ik_solutions< double > (double *target_pose, const grid::robotModel< double > *d_robotModel, int b_size, int num_solutions, bool collision_free, const char *problems_json_text, const char *problem_set_name, int problem_idx, bool write_stats)
- template Result< double > generate_ik_solutions< double, float > (double *target_pose, const grid::robotModel< double > *d_robotModel, int b_size, int num_solutions, bool collision_free, const char *problems_json_text, const char *problem_set_name, int problem_idx, bool write_stats)
- template Result< float > generate_ik_solutions< float > (float *target_pose, const grid::robotModel< float > *d_robotModel, int b_size, int num_solutions, bool collision_free, const char *problems_json_text, const char *problem_set_name, int problem_idx, bool write_stats)
- template std::vector< std::array< double, 7 > > sample_random_target_poses (const grid::robotModel< double > *d_robotModel, int num_configs, uint64_t seed)
- template std::vector< std::array< float, 7 > > sample_random_target_poses (const grid::robotModel< float > *d_robotModel, int num_configs, uint64_t seed)
Variables
-
constexpr int FLANGE_IDX = N + 1#
-
constexpr int EE_IDX = N#
-
constexpr int NX = FLANGE_IDX + 1#
- __constant__ double2 c_joint_limits [N]
- __constant__ int c_halton_bases [32] ={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131}
-
static constexpr int CC_TPB = 128#
-
const double ENV_COLLISION_COST_W = 1.5#
-
const double CC_HARD_PENALTY = 1e12#
-
const double ORI_TARGET_RAD = 1.1e-4#
-
const double ORI_OUTLIER_W = 7000.0#
-
const float CC_SPHERE_MARGIN_MM = 0.0f#
-
template<typename T>
struct LMWarpScratch#
-
namespace grid#