Here I come again with a question regarding the acados problem formulation.
So far, I happily found that I can use external dynamics and costs from CasADi functions, which is great! Now, a perhaps harder question comes to mind:
Is it possible to specify constraints that are active only in specific steps of the Receding Horizon (RH)? The closes I found was this thread, in particular, ocp.set('cost_y_ref', yr, i) seems to set the parameter for horizon i, so I could do the same with ocp.set('lbx', bnd, i) to set the lower bound for X at stage i ? How does the interface work?
In the same way, is it possible to set external parameters to be used in specific RH steps?
So the equivalent in Python to the Matlab snippet you posted ocp.set('lbx', bnd, i)
would be this: acados_ocp_solver.constraints_set(stage, "lbx", lbx)
So it seems I can just use “p” as a parameter array that then is updated for each stage of the horizon (and in a default manner, initalize it before solving the problem). So the last question is just if I can use these parameters with external cost functions (to use a state-reference for instance)?
Sure, you can use external cost functions with parameters.
However, if you have a state reference in the cost, you can most likely formulate your problem more efficiently with a linear or nonlinear leas-squares cost function and update yref.
In my case, the cost is not just || x - xr|| , since the way we calculate the error between two quaternions is nonlinear (atm I convert them to R matrices and use Lee’s equations, but also plan on avoiding that). Unless we use euler, I don’t see an easy way to calculate the attitude error using least squares
I’ll take a look at those parameters sometime soon, and will report back.