45 std::vector<double> temp;
47 double d_rot_sum, d_pos_sum, d_div;
51 , fkref(params.robot_model)
53 d_rot_sum = d_pos_sum = d_div = 0;
69 void initialize(
const Problem& problem)
71 IKBase::initialize(problem);
73 fkref.initialize(problem.tip_link_indices);
74 model.initialize(problem.tip_link_indices);
76 fkref.applyConfiguration(problem.initial_guess);
77 model.applyConfiguration(problem.initial_guess);
93 temp = problem.initial_guess;
94 for(
size_t ivar : problem.active_variables)
95 if(modelInfo.isRevolute(ivar) || modelInfo.isPrismatic(ivar)) temp[ivar] = modelInfo.clip(temp[ivar] + random(-0.1, 0.1), ivar);
97 fkref.applyConfiguration(temp);
98 auto& fa = fkref.getTipFrames();
100 model.applyConfiguration(problem.initial_guess);
101 model.initializeMutationApproximator(problem.active_variables);
103 std::vector<aligned_vector<Frame>> fbm;
105 std::vector<double> mutation_values;
106 for(
size_t ivar : problem.active_variables)
107 mutation_values.push_back(temp[ivar]);
108 const double* mutation_ptr = mutation_values.data();
110 model.computeApproximateMutations(1, &mutation_ptr, fbm);
116 for(
size_t i = 0; i < problem.tip_link_indices.size(); i++)
121 d_rot_sum += fa[i].rot.angleShortestPath(fb[i].rot);
122 d_pos_sum += fa[i].pos.distance(fb[i].pos);
127 LOG(
"d rot avg", d_rot_sum / d_div);
128 LOG(
"d pos avg", d_pos_sum / d_div);
133 const std::vector<double>& getSolution()
const {
return problem.initial_guess; }