Problem with Using codegen commands to generate C++ code on NLMPC Code Generation Tutorial
Mostrar comentarios más antiguos
I am trying to use the codegen funciton in MATLAB to chagne the code provided in the NLMPC Code Generation Turtorial so that it generates code in C++ instead of MEX files. When I run the tutorial with the original codegen functions it generates the MEX file completely fine but after changing the codegen arguments to generate C++ I continue to get an error. Below is the code I am running (note that my problem is at the very bottom):
nlobj = nlmpc(4,2,1);
Ts = 0.1;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 5;
nlobj.Model.StateFcn = "pendulumDT0";
nlobj.Model.IsContinuousTime = false;
nlobj.Model.NumberOfParameters = 1;
params = {Ts};
nlobj.Model.OutputFcn = "pendulumOutputFcn";
nlobj.Weights.OutputVariables = [3 3];
nlobj.Weights.ManipulatedVariablesRate = 0.1;
nlobj.OV(1).Min = -10;
nlobj.OV(1).Max = 10;
nlobj.MV.Min = -100;
nlobj.MV.Max = 100;
x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj,x0,u0,[],params);
EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);
x0 = [0;0;-pi;0];
y0 = [x0(1);x0(3)];
EKF.State = x0;
mv0 = 0;
[coreData,onlineData] = getCodeGenerationData(nlobj,x0,mv0,params);
onlineData.ref = [0 0];
mv = mv0;
y = y0;
x = x0;
Duration = 10;
xHistory = x0;
for ct = 1:(Duration/Ts)
% Correct previous prediction
xk = correct(EKF,y);
% Compute optimal control move
[mv,onlineData] = nlmpcmoveCodeGeneration(coreData,xk,mv,onlineData);
% Predict prediction model states for the next iteration
predict(EKF,[mv; Ts]);
% Implement first optimal control move
x = pendulumDT0(x,mv,Ts);
% Generate sensor data
y = x([1 3]) + randn(2,1)*0.01;
% Save plant states
xHistory = [xHistory x];
end
%%%%%%This is where I am having problems:%%%%%%
func = 'nlmpcmoveCodeGeneration';
funcOutput = 'testingC';
codegen -config:lib -lang:c++ func;
cfg = coder.config('dll');
cfg.TargetLang = 'C++';
codegen -config cfg func;
Please let me know if there is anyway to format/utilize codegen differnetly to generate this C++ code.
Respuestas (1)
Emmanouil Tzorakoleftherakis
el 21 de Mzo. de 2023
Editada: Emmanouil Tzorakoleftherakis
el 24 de Mzo. de 2023
You did not specify what kind of error you were seeing? In my case, doing the following worked:
func = 'nlmpcmoveCodeGeneration';
funcOutput = 'nlmpcmoveMEX';
Cfg = coder.config('lib');
Cfg.TargetLang = 'C++';
Cfg.DynamicMemoryAllocation = 'off';
codegen('-config',Cfg,func,'-o',funcOutput,'-args',...
{coder.Constant(coreData),xk,mv,onlineData});
2 comentarios
Carson Murray
el 23 de Mzo. de 2023
Emmanouil Tzorakoleftherakis
el 24 de Mzo. de 2023
Edited my answer
Categorías
Más información sobre DSP Algorithm Acceleration en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!