Hi! Can you try to compile only one version of qpoases3 for both of the NMPC controllers or for the combination of NMPC and MHE? You should have a version of the interface files "mpc_qpoases3_interface.c/.h" for MPC and "mhe_qpoases3_interface.c/.h" for MHE, but the qpoases solver is the same for both S-functions and should therefore not be duplicated, in order to avoid redefinition of the corresponding symbols etc. Best regards, Rien
Hi, For embedded applications of ACADO, I would recommend using the code generation tool instead: https://www.syscop.de/event/compact-acado-course-%E2%80%93-automatic-control-and-dynamic-optimization Best, Rien
Hi, You are right that the number of onlinedata variables needs to be fixed such that you can only support a maximum number of obstacles, e.g., the "n" obstacles that are currently closest to you. However, this does not necessarily mean that the optimization problem becomes harder to solve than if you were to be able to define this number of obstacles dynamically. In case of using an active-set solver like qpOASES, the computation time would not be affected by constraints that are "obviously" never...
Hi, lbAV and ubAV are the lower and upper bound values at each time step in the MPC prediction horizon for the mixed state-input constraints. The order of the bound values is the same as the order in which the constraints are defined. You can also find the default values in the generated 'acado_solver.c' file, in order to check whether the order is indeed the one you expect. How to specify the bound values for your example depends largely on how you parameterized the function h = f(x) in your terrain...
Hi Florian, This can be solved by choosing a different module name and prefix for each MPC controller. This can be done as follows in Matlab: mpc.set( 'CG_MODULE_NAME', '"mpc1"' ); mpc.set( 'CG_MODULE_PREFIX', '"MPC1"' ); or in C++ syntax: mpc.set( CG_MODULE_NAME, "mpc1" ); mpc.set( CG_MODULE_PREFIX, "MPC1" ); Best, Rien
By calling the solver multiple times, you perform one iteration of a sequential quadratic programming method during each call, resulting in convergence to a locally optimal solution of the original nonlinear optimal control problem. Whether this optimal solution is close to the reference trajectory or not seems irrelevant to me, as it completely depends on whether this reference trajectory is feasible and optimal given the defined objective function. I hope this clarifies things further.
Hi, Thanks! You should know that the ACADO (code generation) software is based on an online algorithm for nonlinear model predictive control, unlike standard nonlinear optimization tools, in order to satisfy real-time constraints on the computation time. More specifically, the tool is based on the Real-Time Iteration (RTI) scheme on which you can find a lot more information in the literature. For example, the following tutorial paper explains the difference between RTI based NMPC, standard linear...
You do not need OnlineData for defining the cost function though, OnlineData variables are typically defined to make certain parameters in the system dynamics time varying (even though they could be useful for certain exotic cost or constraint functions where a time varying parameter enters in a nonlinear fashion). The weighting values as well as the reference values are namely already accessible and can be modified online in a time varying fashion by default, the same holds for right-hand side values...