From d7d59f66607dd2808e08fe923084b2887158a332 Mon Sep 17 00:00:00 2001 From: paleziart <paleziart@laas.fr> Date: Tue, 8 Jun 2021 11:26:13 +0200 Subject: [PATCH] Change force weights in MPC and solver parameters --- src/MPC.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/MPC.cpp b/src/MPC.cpp index b14eaf07..66632893 100644 --- a/src/MPC.cpp +++ b/src/MPC.cpp @@ -326,6 +326,7 @@ int MPC::create_weight_matrices() { // Define weights for the x-x_ref components of the optimization vector // Hand-tuning of parameters if you want to give more weight to specific components // double w[12] = {10.0f, 10.0f, 1.0f, 1.0f, 1.0f, 10.0f}; + // double w[12] = {2.0f, 2.0f, 20.0f, 2.0f, 2.0f, 10.0f, 0.2f, 0.2f, 0.2f, 0.0f, 0.0f, 10.0f}; double w[12] = {2.0f, 2.0f, 20.0f, 0.25f, 0.25f, 10.0f, 0.2f, 0.2f, 0.2f, 0.0f, 0.0f, 0.3f}; /*w[6] = 2.0f * sqrt(w[0]); w[7] = 2.0f * sqrt(w[1]); @@ -342,9 +343,9 @@ int MPC::create_weight_matrices() { // Define weights for the force components of the optimization vector for (int k = n_steps; k < (2 * n_steps); k++) { for (int i = 0; i < 4; i++) { - add_to_P(12 * k + 3 * i + 0, 12 * k + 3 * i + 0, 1e-5f, r_P, c_P, v_P); - add_to_P(12 * k + 3 * i + 1, 12 * k + 3 * i + 1, 1e-5f, r_P, c_P, v_P); - add_to_P(12 * k + 3 * i + 2, 12 * k + 3 * i + 2, 1e-5f, r_P, c_P, v_P); + add_to_P(12 * k + 3 * i + 0, 12 * k + 3 * i + 0, 5e-5f, r_P, c_P, v_P); + add_to_P(12 * k + 3 * i + 1, 12 * k + 3 * i + 1, 5e-5f, r_P, c_P, v_P); + add_to_P(12 * k + 3 * i + 2, 12 * k + 3 * i + 2, 5e-5f, r_P, c_P, v_P); } } @@ -522,15 +523,15 @@ int MPC::call_solver(int k) { save_dns_matrix(v_NK_low, 12 * n_steps * 2 + 20 * n_steps, "l"); save_dns_matrix(v_NK_up, 12 * n_steps * 2 + 20 * n_steps, "u");*/ - // settings->rho = 0.1f; - // settings->sigma = 1e-6f; + //settings->rho = 0.1f; + settings->sigma = (c_float)1e-6; // settings->max_iter = 4000; - settings->eps_abs = (c_float)1e-5; - settings->eps_rel = (c_float)1e-5; - /*settings->eps_prim_inf = 1e-4f; - settings->eps_dual_inf = 1e-4f; - settings->alpha = 1.6f; - settings->delta = 1e-6f; + settings->eps_abs = (c_float)1e-6; + settings->eps_rel = (c_float)1e-6; + settings->eps_prim_inf = (c_float)1e-5; + settings->eps_dual_inf = (c_float)1e-4; + settings->alpha = (c_float)1.6; + /*settings->delta = 1e-6f; settings->polish = 0; settings->polish_refine_iter = 3;*/ settings->adaptive_rho = (c_int)1; @@ -549,6 +550,10 @@ int MPC::call_solver(int k) { // osqp_warm_start_x(workspce, &v_warmxf[0]); } + //char t_char[1] = {'M'}; + //my_print_csc_matrix(ML, t_char); + //std::cout << v_NK_low[1] << " <= A x <= " << v_NK_up[1] << std::endl; + // Run the solver to solve the QP problem osqp_solve(workspce); /*self.sol = self.prob.solve() @@ -718,10 +723,7 @@ void MPC::my_print_csc_matrix(csc *M, const char *name) { int a = (int)M->i[i]; int b = (int)j; double c = M->x[k++]; - if ((a >= 12 * (n_steps - 1)) && (a < 12 * (n_steps - 1) + 24) && (b >= 12 * (n_steps - 1)) && - (b < 12 * (n_steps - 1) * 2)) { - printf("\t%3u [%3u,%3u] = %.3g\n", k - 1, a, b - 12 * n_steps, c); - } + printf("\t%3u [%3u,%3u] = %.3g\n", k - 1, a, b, c); } } } -- GitLab