.. _program_listing_file__tmp_ws_src_pick_ik_include_pick_ik_ik_gradient.hpp: Program Listing for File ik_gradient.hpp ======================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/pick_ik/include/pick_ik/ik_gradient.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include #include #include #include #include #include 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 gradient; std::vector working; std::vector local; std::vector best; double local_cost; double best_cost; static GradientIk from(std::vector 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 const& initial_guess, Robot const& robot, CostFn const& cost_fn, SolutionTestFn const& solution_fn, GradientIkParams const& params, bool approx_solution) -> std::optional>; } // namespace pick_ik