当前位置: 首页 > news >正文

无人船 | 图解基于PID控制的路径跟踪算法(以全驱动无人艇WAMV为例)

目录

  • 1 PID控制基本原理
  • 2 基于全驱动运动学的PID控制
  • 3 跟踪效果分析

1 PID控制基本原理

PID控制是一种常用的经典控制算法,其应用背景广泛,例如

  • 工业自动化控制:温度控制、压力控制、流量控制、液位控制等过程控制系统多采用PID闭环,可以帮助维持系统参数在设定值附近,以提高生产过程的稳定性和效率;
  • 机械工程:PID算法可用于实现精确的运动控制,包括控制位置、速度和力。这包括机器人控制、电机控制、汽车巡航控制等;
  • 农业自动化:PID算法可用于控制温室环境,包括温度、湿度和光照,以促进植物的生长和提高农业生产;

PID代表比例(Proportional)积分(Integral)微分(Derivative),它通过根据误差信号的大小和变化率来调整控制器的输出,以使系统的输出尽可能接近期望值,其控制框图如下所示

在这里插入图片描述

连续型PID控制律如下

u ( t ) = K p e ( t ) + K i ∫ t 0 t e ( τ ) d τ + K d e ˙ ( t ) u\left( t \right) =K_pe\left( t \right) +K_i\int_{t_0}^t{e\left( \tau \right) \mathrm{d}\tau}+K_d\dot{e}\left( t \right) u(t)=Kpe(t)+Kit0te(τ)dτ+Kde˙(t)

其中 K p K_p Kp K i K_i Ki K d K_d Kd分别称为比例、积分与微分增益系数

位置式离散型PID控制律如下

u ( k ) = K p e ( k ) + K i ∑ i = 0 k e ( i ) Δ t + K d ( e ( k ) − e ( k − 1 ) ) / Δ t u\left( k \right) =K_pe\left( k \right) +K_i\sum_{i=0}^k{e\left( i \right) \varDelta t}+K_d{{\left( e\left( k \right) -e\left( k-1 \right) \right)}/{\varDelta t}} u(k)=Kpe(k)+Kii=0ke(i)Δt+Kd(e(k)e(k1))/Δt

由于位置式PID算法需要计算累计偏差,占用存储单元,可以通过

u ( k ) − u ( k − 1 ) u\left( k \right) -u\left( k-1 \right) u(k)u(k1)

计算增量式PID控制律

Δ u ( k ) = K p Δ e ( k ) + K i e ( k ) Δ t + K d ( Δ e ( k ) − Δ e ( k − 1 ) ) / Δ t \varDelta u\left( k \right) =K_p\varDelta e\left( k \right) +K_ie\left( k \right) \varDelta t+K_d{{\left( \varDelta e\left( k \right) -\varDelta e\left( k-1 \right) \right)}/{\varDelta t}} Δu(k)=KpΔe(k)+Kie(k)Δt+Kd(Δe(k)Δe(k1))/Δt

其中

Δ u ( k ) = u ( k ) − u ( k − 1 ) Δ e ( k ) = e ( k ) − e ( k − 1 ) \varDelta u\left( k \right) =u\left( k \right) -u\left( k-1 \right) \\ \varDelta e\left( k \right) =e\left( k \right) -e\left( k-1 \right) Δu(k)=u(k)u(k1)Δe(k)=e(k)e(k1)

更多PID控制理论请参考控制原理 | PID控制的三个参数如何影响控制效果?(附参数整定方法)

在基于PID的局部路径规划中,希望USV能快速跟踪上预设的轨迹,设误差量为 e k e_k ek e k e_k ek可以根据实际的控制目标进行选择,例如线速度误差、角速度误差、轨迹跟踪误差等

2 基于全驱动运动学的PID控制

全驱动无人船路径跟踪控制通过三自由度独立调节实现精确轨迹跟随,其核心在于建立基于运动学模型的PID多环控制架构。系统将船体运动解耦为纵向推进、横向位移与航向调整三个正交自由度,每个自由度采用独立的PID控制器生成推力指令,最终通过推力分配矩阵将虚拟控制量转化为各推进器的实际推力输出,形成闭环反馈控制回路。

根据LOS制导律,当船体采用 ψ = ψ d \psi =\psi _d ψ=ψd制导时可使横向误差收敛为零,因此设计基于艏向误差

e ψ = ψ d − ψ e_{\psi}=\psi _d-\psi eψ=ψdψ

的航向PID控制律

τ r = K p ψ e ψ + K i ψ ∫ e ψ d t + K d ψ d e ψ d t \tau _r=K_{p}^{\psi}e_{\psi}+K_{i}^{\psi}\int{e_{\psi}\mathrm{d}t}+K_{d}^{\psi}\frac{\mathrm{d}e_{\psi}}{\mathrm{d}t} τr=Kpψeψ+Kiψeψdt+Kdψdtdeψ

其中误差量作用于USV艏转力矩以控制方向。

接着,设计基于期望速度 u d u_d ud与当前速度误差

e u = u d − u 2 + v 2 e_u=u_d-\sqrt{u^2+v^2} eu=udu2+v2

的纵向速度PID控制律

τ u = K p u e u + K i u ∫ e u d t + K d u d e u d t \tau _u=K_{p}^{u}e_u+K_{i}^{u}\int{e_u\mathrm{d}t}+K_{d}^{u}\frac{\mathrm{d}e_u}{\mathrm{d}t} τu=Kpueu+Kiueudt+Kdudtdeu

通过欠驱动推力分配关系即可得到实际控制量

[ τ b , l τ b , r ] = [ 1 1 − D D ] − 1 [ τ u τ r ] \left[ \begin{array}{c} \tau _{b,l}\\ \tau _{b,r}\\\end{array} \right] =\left[ \begin{matrix} 1& 1\\ -D& D\\\end{matrix} \right] ^{-1}\left[ \begin{array}{c} \tau _u\\ \tau _r\\\end{array} \right] [τb,lτb,r]=[1D1D]1[τuτr]

考虑到全驱动无人艇具有额外的横向螺旋桨,且该桨产生的横漂力不与前进和转向行为耦合,因此可以根据如图所示的几何关系设计独立的基于横向误差

e l a t e r a l = ( y d − y ) cos ⁡ ψ − ( x d − x ) sin ⁡ ψ e_{\mathrm{lateral}}=\left( y_d-y \right) \cos \psi -\left( x_d-x \right) \sin \psi elateral=(ydy)cosψ(xdx)sinψ

的横向误差控制律

τ b , m = K p l a t e r a l e l a t e r a l + K i l a t e r a l ∫ e l a t e r a l d t + K d l a t e r a l d e l a t e r a l d t \tau _{b,m}=K_{p}^{\mathrm{lateral}}e_{\mathrm{lateral}}+K_{i}^{\mathrm{lateral}}\int{e_{\mathrm{lateral}}\mathrm{d}t}+K_{d}^{\mathrm{lateral}}\frac{\mathrm{d}e_{\mathrm{lateral}}}{\mathrm{d}t} τb,m=Kplateralelateral+Kilateralelateraldt+Kdlateraldtdelateral

在这里插入图片描述

3 跟踪效果分析

定性测试结果:

请添加图片描述

在考虑水动力、风力等真实干扰的情况下,跟踪轨迹如下所示,定量测试结果为:

  • 平均跟踪误差:0.983 m
  • 最大跟踪误差:2.726 m
  • 最小跟踪误差:0.008 m

在这里插入图片描述


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

相关文章:

  • Floyd算法求解最短路径问题——从零开始的图论讲解(3)
  • 信息学奥赛一本通 1504:【例 1】Word Rings | 洛谷 SP2885 WORDRING - Word Rings
  • 聊透多线程编程-线程互斥与同步-12. C# Monitor类实现线程互斥
  • 华为数字化转型“三阶十二步法“:战略驱动、系统布局与敏捷落地的实践框架
  • spark和Hadoop的区别与联系
  • 前端框架开发编译阶段与运行时的核心内容详解Tree Shaking核心实现原理详解
  • 主流大模型(如OpenAI、阿里云通义千问、Anthropic、Hugging Face等)调用不同API的参数说明及对比总结
  • 解决方案评测|告别复杂配置!基于阿里云云原生应用开发平台CAP快速部署Bolt.diy
  • springboot对接阿里云大模型
  • 红队专题-漏洞挖掘-代码审计-反序列化
  • Semaphore的核心机制
  • Linux `init 6` 相关命令的完整使用指南
  • Java之封装(学习笔记)
  • Redis 哨兵与集群脑裂问题详解及解决方案
  • string类(详解)
  • 【AI+HR实战应用】用DeepSeek提升HR工作效能
  • STM32时钟树
  • firewall指令
  • 面试常用基础算法
  • MySQL 线上大表 DDL 如何避免锁表(pt-online-schema-change)
  • 87岁老人花3万多做“血液净化”延年益寿?医院“张主任”:我那是善意的欺骗
  • 4月LPR保持不变:1年期3.1%,5年期以上3.6%
  • 成功卫冕!孙颖莎4比0战胜蒯曼,获澳门世界杯女单冠军
  • 从6家试点扩展至全行业,券商并表监管有何看点?
  • 习近平结束对越南、马来西亚和柬埔寨国事访问回到北京
  • 一图看懂|特朗普政府VS美国顶尖高校:这场风暴如何刮起?