基于Fossen模型的无人艇轨迹跟踪文献复现与仿真研究:MATLAB与Simulink仿真实践
无人车辆 轨迹跟踪 LOS制导无人艇无人船 Fossen模型 文献复现 大量出图 路径跟随 MATLAB仿真 simulink仿真最近在搞无人船轨迹跟踪的仿真发现LOS制导和Fossen模型这俩兄弟真是绝配。先说说LOSLine of Sight制导这玩意儿本质上就是个几何导航法——想象你在开车眼睛盯着前方某个点打方向盘差不多就是这个道理。不过要让船乖乖跟着预定路径走光有几何关系可不够得把动力学特性揉进去。先看段LOS核心代码function [desired_heading] LOS_guidance(eta, path, Delta) x eta(1); y eta(2); % 找最近路径点 [~, idx] min(sum((path - [x,y]).^2,2)); % 前视点计算 lookahead_point path(idx,:) Delta*(path(idx1,:)-path(idx,:)); % 期望航向角 desired_heading atan2(lookahead_point(2)-y, lookahead_point(1)-x); end这里的Delta控制着前视距离就像开车时看多远的路面。Delta越大船的反应越佛系但太小容易震荡。我试过把Delta从0.5调到2.0跟踪轨迹从抽搐的折线变成优雅的弧线特别有意思。接下来是重头戏Fossen模型这玩意儿把船舶运动拆解成动力学和运动学两部分。复现文献时发现个小坑——很多人容易忽略阻尼矩阵的非对称性。看这个简化版动力学方程function dnu FossenDynamics(nu, tau) M [17.11 0; 0 30.11]; % 惯性矩阵 D [4.22 0.56; -0.32 5.31]; % 阻尼矩阵 dnu M \ (tau - D*nu); % 加速度计算 end注意D矩阵的非对角项符号不同这反映了横荡和艏摇运动的耦合特性。之前用对称矩阵仿真时船总像喝醉似的画8字修正后立马老实了。无人车辆 轨迹跟踪 LOS制导无人艇无人船 Fossen模型 文献复现 大量出图 路径跟随 MATLAB仿真 simulink仿真仿真架构建议用Simulink分层搭建顶层用Signal Builder生成锯齿形路径Guidance层嵌LOS算法Control层放PID控制器Plant层实现Fossen模型调试时发现采样时间不能大于0.1秒否则艏摇角会像过山车一样刺激。出图技巧方面推荐这个画图模板figure(Position,[200 200 800 600]) subplot(211) plot(path(:,1),path(:,2),--k,LineWidth,1.5); hold on; plot(eta_history(:,1),eta_history(:,2),b); legend(预定路径,实际轨迹,Location,best); subplot(212) plot(time, heading_error*180/pi); xlabel(时间(s)); ylabel(航向误差(°)); title(跟踪误差变化);重点说说出图经验用子图对比能直观显示控制效果误差曲线记得转成角度制。调试时发现前视距离Delta1.2时误差能稳定在±3°以内超过这个值虽然更平滑但入弯时会有点外抛现象。最后给个实用建议仿真时先把路径跟踪调通再上复杂环境干扰。有次手贱先加了海流模型结果根本分不清是算法问题还是物理效应debug到怀疑人生。现在我的仿真流程是直线路径→折线路径→圆周转弯→最后才加干扰项像打游戏升级一样循序渐进。