Hi all,
I’m not sure if the ocp_nlp_(...)_set
functions let the solver refer to client-defined variables, such that future mutations of the client variables automatically register with the solver. Or do I need to call the ocp_nlp_(\w+)_set
function every time I get new values to be set?
For example:
Eigen::VectorXd x0(MODEL_NX); // Defined by client program
ocp_nlp_constraints_model_set(nlp_config, nlp_dims, nlp_in, 0, "lbx", x0.data());
ocp_nlp_constraints_model_set(nlp_config, nlp_dims, nlp_in, 0, "ubx", x0.data());
// Do I only need to change x0 in the future?
// Or do I need to define x0 anew and call ocp_nlp_constraints_model_set again?
For reference, in the past I used ACADO and took the approach from rpg_mpc, i.e. defining non-owning views overs the solver’s working variables.
ACADOvariables vars; // Global variable shared with the solver
Eigen::Map<Eigen::VectorXd> x0(vars->x0, ACADO_NX); // Define the view once
// Future mutation of x0 IS setting the solver's working variable
and it is clear that changing x0
IS actually changing the data of ACADOvariables.x0
.