(IEEE trans复现 1)自主水下航行器(AUV),动态路径规划,非线性模型预测控制(MPC),后退时域优化(RHO),轨迹跟踪

内容包括:自主水下航行器(AUV),动态路径规划,非线性模型预测控制(MPC),后退时域优化(RHO),轨迹跟踪

中文名称:水下机器人综合路径规划与跟踪控制:一种一致的模型预测控制优化方法

英文名称:Integrated Path Planning and Tracking Control  of an AUV: A Unified Receding Horizon Optimization Approach

一、代码及文献获取

1. 代码链接:哔哩哔哩工房 (bilibili.com)

2. 视频链接:IEEE trans:水下机器人AUV的路径规划和基于模型预测控制MPC的跟踪框架_哔哩哔哩_bilibili

本代码包括水下机器人AUV路径规划和MPC路径跟踪两个模块,两个模块均采用优化求解器求解,考虑了AUV的水动力学模型,结果是2D空间内的平面路径。

二、主要内容

摘要:  针对自主水下航行器(AUV)的综合路径规划和跟踪控制问题,提出了一种统一的后退地平线优化(RHO)方案。考虑到机载传感器的有效传感范围较短,我们将路径规划问题转化为基于样条路径模板的RHO问题。规划的路径随后被视为与AUV具有相同运动学和动力学特性的虚拟参考系统的状态轨迹。适当构造误差动力学,使水下航行器跟踪控制等同于误差动力学系统的调节问题,便于利用非线性MPC技术推导理论结果。为了保证系统的闭环稳定性,设计了模型预测控制(MPC)跟踪控制器。由于其固有的RHO特性,将路径规划和跟踪控制整合到一个统一的方案中。仿真研究使用了Falcon AUV的真实动态模型,该模型是在我们之前的实验工作中创建的。仿真结果验证了所提控制算法的有效性。

三、主要代码

%% ========================================================================
% ========================= Main function =================================
% =========================================================================
for i = 1:1:Tstep2
    % Planning
    if mod(i+N-1,M) == 0
        everdone = iter_round*1;
        if everdone == 30
            ord = 5;
            mlti = 5;
        end
        bbrks = everdone+0:1:everdone+Nbrk;
        X = (everdone+0:1:everdone+Nbrk)';
        
        for l = 1:1:Nbrk+1
            Y(l) = data1_together(1,100*(everdone+l-1)+1);
        end
        
        knots = augknt(bbrks,mlti);
        nknt = length(knots);
        nco = nknt-ord;
        
        x = plannar.calc_path2(x0,bbrks,X,Y,y0,y0d,y02d,eps,T);
        x = x';
        sp = spmak(knots,x);
        
        y0 = fnval(sp,everdone+1);
        y0d = fnval(fnder(sp,1),everdone+1);
        y02d = fnval(fnder(sp,2),everdone+1);
        SpAry(everdone+1,1) = {sp};
        iter_round = iter_round+1;
    end
    
    % Generate the path reference
    [eta_Ref_all(:,i),P] = plannar.reference(t,Spline_map2,SpAry,i,M,T_plt,y_scale,T);
    ord = 4;
    mlti = 4;
    
    % Calculate the control input for the AUV
    tic
    u = mpc1.calc_control(u0,X0,P,T);
    toc
    u_actual = u(1:nu,1);
    Uall2(:,i) = u_actual;
    
    % Update the system state
    auv.advance( Uall2(:,i), disturbance, T);
    Xplus = auv.X;
    Xall2(:,i+1) = Xplus;
    X0 = Xplus;

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值