基于车辆动力学横向控制学习(CasADi求解MPC问题)

CasADi相比matlab自带的工具箱求解MPC问题的代码编写更简单便捷。

先给出下载地址和学习参考视频

CasADi主页

关注了很久的大佬用casadi求解小车倒立摆MPC问题

车辆运动学的casadi求解

CasADi入门讲解

首先这里的车辆动力学误差模型依然还是用的老王的模型忠厚老实的老王讲车辆控制

相比上一篇而言,这篇只是替换了一个求解器,中间省却了预测方程,预测方程升维和化成标准二次型求解H,f这几步(懒人必备)

代码参考主要是J_H_Li

1.如何在matlab中使用CasADi

在官网下载完CasADi之后,在matlab命令行添加addpath('...\casadi-3.6.4-windows64-matlab2018b')即可

可用官网的示例进行测试,是否下载成功

2.关键步骤

我认为整个代码流程就是定义变量,定义约束以及得到cost function进行求解。

h = 20;%预测时域
nmpc = casadi.Opti();
X = nmpc.variable(4,h);
u = nmpc.variable(1,h); 

%% constraints:
nmpc.subject_to ( X(:,1) == X_1 ); %初始状态

for k = 1 : h-1
    [A,B,C] = vehicleDynamics(states);
    nmpc.subject_to( X(:, k+1) == A*X(:, k) + B*u(:,k)+ C );%离散线性动力学模型
    nmpc.subject_to( -1 <= u(:,k)<= 1);%%约束
end

%% 代价函数
Q = diag([1000,10,100, 10]); 
R = 10; 

J = 0;
for k = 1 : h
    J = J + (X(:,k))' * Q ... 
        * (X(:,k)) +  u(:,k)'*R*u(:,k);
end

nmpc.minimize(J);

%% 求解
p_opts = struct('expand',true);
nmpc.solver('ipopt', p_opts);
solution = nmpc.solve();
ux = solution.value(u);
ux = ux(1);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值