Program Listing for File ik_gradient.hpp
↰ Return to documentation for file (include/pick_ik/ik_gradient.hpp
)
#pragma once
#include <pick_ik/goal.hpp>
#include <pick_ik/robot.hpp>
#include <chrono>
#include <memory>
#include <moveit/robot_model/joint_model_group.h>
#include <moveit/robot_model/robot_model.h>
#include <optional>
#include <vector>
namespace pick_ik {
struct GradientIkParams {
double step_size = 0.0001; // Step size for gradient descent.
double min_cost_delta = 1.0e-12; // Minimum cost difference for termination.
double max_time = 0.05; // Maximum time elapsed for termination.
int max_iterations = 100; // Maximum iterations for termination.
// If false, keeps running after finding a solution to further optimize the solution until a
// time or iteration limit is reached. If true, stop thread on finding a valid solution.
bool stop_optimization_on_valid_solution = true;
};
struct GradientIk {
std::vector<double> gradient;
std::vector<double> working;
std::vector<double> local;
std::vector<double> best;
double local_cost;
double best_cost;
static GradientIk from(std::vector<double> const& initial_guess, CostFn const& cost_fn);
};
auto step(GradientIk& self, Robot const& robot, CostFn const& cost_fn, double step_size) -> bool;
auto ik_gradient(std::vector<double> const& initial_guess,
Robot const& robot,
CostFn const& cost_fn,
SolutionTestFn const& solution_fn,
GradientIkParams const& params,
bool approx_solution) -> std::optional<std::vector<double>>;
} // namespace pick_ik