You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am raising this issue to request for an interface to enable using OSQP as a custom solver with the MathWorks MPC tools for simulation and code generation. This interface will leverage the design capabilities of MPC Toolbox software and the computational performance of OSQP solver.
The following links explain the process and include some examples:
All needed would be an EML (that can be code generated) or MEX file using the OSQP code that can be called within a function [x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0) signature.
The text was updated successfully, but these errors were encountered:
I have the same problem, when Simulate MPC Controller with a Custom QP Solver,here is my configuration
function [x, status] = mpcCustomSolver(H, f, A, b, x0)
%#codegen
persistent prob;
u_dim = length(b);
u = 1./zeros(u_dim,1);
if isempty(prob)
prob = osqp;
prob.setup(H, f, A, b, u);
end
prob.update('Px', nonzeros(triu(H)), 'Ax', nonzeros(A));
prob.update('q', f, 'l', b, 'u', u);
res = prob.solve();
x = res.x;
solve_status = res.info.status_val;
switch solve_status
case 1
status = 1;
case 2
status = 1;
otherwise
status = 1;
end
% Always return a non-empty x of the correct size. When the solver fails,
% one convenient solution is to set x to the initial guess.
if status <= 0
x = x0;
end
it just ok for simulation
but when code generation, here is my configuration
function [x, status] = mpcCustomSolverCodeGen(H, f, A, b, x0)
%#codegen
u_dim = length(b);
u = 1./zeros(u_dim,1);
prob = osqp;
prob.setup(H, f, A, b, u);
prob.update('Px', nonzeros(triu(H)), 'Ax', nonzeros(A));
prob.update('q', f, 'l', b, 'u', u);
res = prob.solve();
x = res.x;
solve_status = res.info.status_val;
switch solve_status
case 1
status = 1;
case 2
status = 1;
otherwise
status = 1;
end
% Always return a non-empty x of the correct size. When the solver fails,
% one convenient solution is to set x to the initial guess.
if status <= 0
x = x0;
end
get errors as follows,
Only MATLAB files are supported for code generation. Unsupported file extension 'mexw64' for 'C:\Users\Administrator\Desktop\VMC\osqp_mpc\osqp\osqp-0.6.2-matlab-windows64\osqp_mex.mexw64'.
Function 'osqp.m' (#621.2055.2083), line 59, column 33:
"osqp_mex('new', varargin{:})"
Component:MATLAB Function | Category:Coder error
Function call failed.
Function 'mpcCustomSolverCodeGen.m' (#620.121.125), line 5, column 8:
"osqp"
Thank you very much for your excellent open source project.What I want to know is whether there is any solution to this problem, or whether the future upgrade will support this function.
I am raising this issue to request for an interface to enable using OSQP as a custom solver with the MathWorks MPC tools for simulation and code generation. This interface will leverage the design capabilities of MPC Toolbox software and the computational performance of OSQP solver.
The following links explain the process and include some examples:
https://www.mathworks.com/help/mpc/ug/qp-solver.html?searchHighlight=QP%20solver&s_tid=srchtitle
and
https://www.mathworks.com/help/mpc/ug/generate-code-for-mpc-controller-with-custom-qp-solver.html
https://www.mathworks.com/help/mpc/ug/simulate-mpc-controller-with-a-custom-qp-solver.html
All needed would be an EML (that can be code generated) or MEX file using the OSQP code that can be called within a
function [x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0)
signature.The text was updated successfully, but these errors were encountered: