AUV路径跟踪视线法(Line Of Sight)制导原理

文章介绍了AUV(水下自主航行器)在路径跟踪中使用视线角导航方法,特别是水平面趋近角的计算表达式和工作原理。通过调整趋近角,AUV能有效收敛至期望路径。当AUV接近目标点时,趋近角减小,从而实现精确的位置和姿态控制,同时控制接近速度,避免跟踪冗余。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

针对路径跟踪问题,为调整 AUV 趋向且收敛至期望路径,本文对视线角(Line Of Sight)导航的方法原理进行介绍。
就水平面视线法原理进行具体介绍,垂直面上与之类似。

一、趋近角的表达式

直接给出一种常用的趋近角,表达式如下:
{ δ θ = a r c t a n ( z e Δ z ) δ ψ = − a r c t a n ( y e Δ y ) \begin{cases}\delta_{\theta}= arctan(\frac{z_{e}}{\Delta_{z}})&\\\delta_{\psi}=- arctan(\frac{y_{e}}{\Delta_{y}})& &\end{cases} {δθ=arctan(Δzze)δψ=arctan(Δyye)
其中 Δ z \Delta_{z} Δz Δ y \Delta_{y} Δy为前视距离,大小与所选参考目标点的位置有关。

二、水平面趋近角原理

原理图如下所示:
在这里插入图片描述
P ∗ P^{*} P为移动坐标系(SF坐标系)上的下一个参考目标点(前视点),此时的趋近角表示为 Q P ∗ QP^{*} QP P s 1 Ps_{1} Ps1的夹角 δ \delta δ,AUV的重心Q在 P s 1 Ps_{1} Ps1上的投影为 Q s Q_{s} Qs, Q s Q_{s} Qs与目标参考点 的距离与趋近角大小有关,距离越大趋近角越小。

ψ e \psi_{e} ψe为AUV的航迹角(定系)与SF坐标系与定系夹角的差值,为使AUV到达指定目标点,应当使 ψ e \psi_{e} ψe趋近于趋近角 δ \delta δ,如此AUV的和速度 v t v_{t} vt指向 P ∗ P^{*} P点,进而快速达到预定轨迹。

三、趋近角选择优势

伴随着AUV逐渐靠近目标点,沿 y 1 y_{1} y1轴方向的误差 y e y_{e} ye会逐渐减小,观察到趋近角为 y e y_{e} ye的函数,随着 y e y_{e} ye减小趋近角也会减小,最终趋近于零,同时趋近于趋近角的 y e y_{e} ye也会减小到零,即 ψ e \psi_{e} ψe=0,即同时实现了AUV的位置以及姿态达到预期值。
另外一点,随着AUV趋近于期望路径,趋近角减小,而AUV的趋近速度是趋近角的函数,此时便能达到越靠近目标路径速度越小的效果,很好地防止了跟踪的冗余。

<think>好的,用户需要实现水下机器人三维正弦曲线轨迹跟踪控制的MATLAB代码。首先,我需要理解用户的具体需求。三维正弦曲线轨迹通常可以用参数方程表示,比如x(t)=t,y(t)=sin(t),z(t)=sin(t)这样的形式。跟踪控制需要控制算法让水下机器人跟随这个轨迹。 根据引用[1],三维路径跟踪算法可能涉及LOS制导结合PID控制。LOS(Line of Sight制导常用于船舶和航行器的路径跟踪,能生成期望的航向和纵倾角。PID控制器则用来调整推进器的推力,以减小位置和姿态的误差。 接下来,我需要考虑水下机器人的动力学模型。引用[2]和[3]提到AUV的轨迹规划和控制仿真,可能需要建立运动学方程和动力学方程。运动学方程描述位置、速度和姿态的变化,而动力学方程涉及力和力矩的影响。不过,用户可能不需要复杂的动力学模型,可以先从运动学控制入手,简化问题。 引用[5]中的反步控制方适用于非线性系统,但用户可能希望一个更简单的示例,比如PID控制。因此,示例代码可能包括生成期望轨迹,计算跟踪误差,然后通过PID控制器调整机器人的速度和姿态。 然后,我需要确定如何将LOS制导与PID结合。LOS会生成期望的航向角和纵倾角,PID则调整机器人的实际角度以接近这些期望值。位置误差转换为速度指令,通过积分得到当前位置。 在MATLAB代码结构方面,可能需要主循环迭代时间,计算期望位置,计算误差,更新PID控制器,然后积分得到实际位置和姿态。同时,需要可视化三维轨迹和误差变化。 最后,需要考虑代码的验证和可能的优化,如调整PID参数,处理水下环境的干扰,或者添加动力学模型。根据引用[4],仿真实验设置障碍物,但用户的问题可能不需要障碍物,专注于轨迹跟踪。 总结步骤:生成三维正弦轨迹,设计LOS制导计算期望角度,使用PID控制调整机器人的姿态和速度,积分更新位置,并可视化结果。确保代码结构清晰,添加注释,方便用户理解和修改。</think>根据您对三维正弦轨迹跟踪控制的需求,结合LOS制导和PID控制方,以下提供一套MATLAB示例代码框架: ```matlab %% 三维正弦轨迹跟踪控制仿真 % 系统参数 dt = 0.1; % 时间步长 T = 20; % 总时长 t = 0:dt:T; % 时间序列 %% 期望轨迹生成 (三维正弦曲线) xd = t; yd = 2*sin(0.5*t); zd = 1.5*sin(0.8*t); %% 初始状态设置 x = [0 0 0]'; % 初始位置[x; y; z] psi = 0; % 初始艏向角 theta = 0; % 初始纵倾角 %% LOS制导参数 Delta = 5; % 前视距离[^1] %% PID控制器参数 Kp = 1.2; Ki = 0.01; Kd = 0.5; % 位置PID Kp_psi = 2.0; Kd_psi = 0.3; % 艏向角PID Kp_theta = 1.8; Kd_theta = 0.2; % 纵倾角PID %% 主循环 for k = 1:length(t)-1 % 当前期望位置 xd_k = [xd(k); yd(k); zd(k)]; % 位置误差计算 e_pos = xd_k - x(:,k); % LOS制导计算期望角[^1][^4] psi_d = atan2(e_pos(2), Delta); theta_d = atan2(e_pos(3), Delta); % 姿态角误差 e_psi = psi_d - psi(k); e_theta = theta_d - theta(k); % PID控制律 u_psi = Kp_psi*e_psi + Kd_psi*(e_psi - e_psi_prev)/dt; u_theta = Kp_theta*e_theta + Kd_theta*(e_theta - e_theta_prev)/dt; % 速度指令生成 U = Kp*norm(e_pos) + Ki*sum(e_pos)*dt + Kd*(e_pos - e_pos_prev)/dt; % 状态更新(简化运动学模型) x(:,k+1) = x(:,k) + dt*U*[cos(psi(k))*cos(theta(k)); sin(psi(k))*cos(theta(k)); sin(theta(k))]; psi(k+1) = psi(k) + dt*u_psi; theta(k+1) = theta(k) + dt*u_theta; % 误差记录 e_pos_prev = e_pos; e_psi_prev = e_psi; e_theta_prev = e_theta; end %% 可视化 figure(1) plot3(xd,yd,zd,'r--','LineWidth',2), hold on plot3(x(1,:),x(2,:),x(3,:),'b-') xlabel('X'), ylabel('Y'), zlabel('Z'), grid on legend('期望轨迹','实际轨迹') title('三维轨迹跟踪效果') figure(2) subplot(311), plot(t,xd,'r',t,x(1,:),'b'), title('X轴跟踪') subplot(312), plot(t,yd,'r',t,x(2,:),'b'), title('Y轴跟踪') subplot(313), plot(t,zd,'r',t,x(3,:),'b'), title('Z轴跟踪') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值