1. 首先用matlab编写好自己的一个函数。我这里使用的casadi进行编写:
X_traj = opti.variable(n_x,N_steps_ahead);
Ufp_traj = opti.variable(n_ufp,N_steps_ahead);
N_steps_ahead = 10;
cost = 0;
for n = 1:N_steps_ahead
Xk = fd_alip(Xkm1,Ufp_traj(:,n),p_m,p_zH,dt); %每一步碰撞后的com初值
for i = 0:N_intervals
dt_interval = p_Ts/N_intervals;
Yk = Ad_ALIP(p_m,p_zH,i*dt_interval)*Xk; % state output
X_error = Yk - X_des{n};
cost = cost + X_error.'*Q*X_error;
end
end
opti.minimize(cost);
opti_RS = opti.copy();
opti_RS.solver('sqpmethod',opts);
opt_args = {...
X_traj,...
Ufp_traj};
opt_output = {X_traj; Ufp_traj};
name_cg_LS = char("f_opti_LS");
f_opti_LS = opti_LS.to_function(name_cg_LS,opt_args,opt_output);
注意,以上代码只是代码片段,不能运行!只要编写自己的matlab函数就行。
2. 生成.c文件
cg_options = struct();
cg = CodeGenerator(name_cg_LS,cg_options);
cg.add(f_opti_LS);
cg.generate()