ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ArduSub调参完整指南:从姿态PID到深度控制,手把手教你稳定水下机器人

ArduSub调参完整指南:从姿态PID到深度控制,手把手教你稳定水下机器人 1. 先别急着拧参数把ArduSub的调参思路理清楚ArduSub调参这件事我见过太多人上来就打开参数列表照着网上的教程一顿改结果越调越飘最后连定深都不敢开。说实话ArduSub这套基于ArduPilot的固件在地面站上看确实长得和四旋翼的Mission Planner差不多但它底层的控制逻辑、传感器构型、动力特性完全是另一套东西。如果你没有先把ArduSub的控制链路和调参顺序搞清楚改了也是瞎改运气好碰到一组能用的参数换条船、换个水流环境立刻翻车。所以这篇指南我不会直接扔给你一组神参数而是把从姿态到深度、从PID到滤波器的完整调参路径捋一遍。你跟着这个思路走即使你的ROV和我用的结构完全不同也能自己推出一套合适的参数。1.1 ArduSub控制链路到底长什么样ArduSub的控制回路和绝大多数ArduPilot系固件一样分内外两层。外环是角度环也叫姿态环它负责把机器人拉回到目标姿态输出的是一个期望角速度内环是角速度环它根据期望角速度和实际角速度的差值输出具体的油门、舵量指令给电机和推进器。我举个例子帮你理解。你把ROV放在水里用遥控器打了一个横滚角度外环发现哎现在实际横滚角和目标横滚角差了15度它就会计算出一个期望的横滚角速度比如每秒20度。内环再看实际角速度和期望角速度差多少然后决定给左右推进器多少推力差。外环管角度内环管角速度这个两层结构是ArduSub稳定性的基石。调参的基本顺序因此非常明确先调内环角速度环再调外环角度环。内环调不稳外环怎么调都是白搭。这个顺序和你在四旋翼上调PID的习惯是一样的但水下环境有两个显著区别导致很多空中飞控经验直接失效一是水流的随机扰动比空气大得多外环误差信号会夹杂大量噪声二是推进器的响应滞后比电机大螺旋桨在空气里几乎是瞬态响应在水下推进器从0到满油门需要约100到200毫秒的建立时间。这个滞后如果不在滤波器设计时考虑进去PID很容易产生自激振荡。1.2 水下环境为什么让PID这么难调空气里飞无人机最大的扰动是风但风是相对均匀的流场。水下ROV面对的是完全不同的局面近水面有波浪、有缆绳牵引力、有推进器之间互相干扰的尾流、有深水区温度分层导致的对流最要命的是ROV自身往往带有一定程度的正浮力或负浮力。这意味着即使你完全不打杆ROV也会缓慢上浮或下沉姿态也会因为重心和浮心不完全重合而出现倾斜。这个恒定的静差对PID的积分项提出了很高要求。在水下I项如果太小ROV会一直朝一个方向缓慢漂移I项如果太大又会出现低频率的往复晃动看起来就像一条在水里喘气的鱼。还有一个常被忽略的问题螺旋桨和推进器在水下工作时会产生一个反扭矩。如果你用的是单大桨推进器配置反扭矩会让ROV在推油门时明显滚转这个扰动是随油门开度变化而变化的纯粹的PID很难完全抑制需要在结构上做配平或者在调参时留出稳定裕度。明白了这些差异你就能理解为什么ArduSub调参不能照搬四旋翼的套路。接下来我先讲动手前的准备这部分做扎实了后面调PID的成功率能提高一半。2. 调参前的准备能省掉80%的折腾很多调参翻车案例问题根本不出在PID系数上而是出在传感器数据不准、EKF扩展卡尔曼滤波器告警、固件版本混乱这类基础问题上。你想想如果ArduSub的姿态估计本身就偏了2度你在调角度环的时候它输出的角速度指令自然就不准你怎么调P、I、D都找不到一个正确的感觉。所以调参前的准备不是走过场而是整个调参流程里性价比最高的一步。2.1 固件、地面站和日志系统先摆平我建议你从ArduSub官方网站下载配套的Mission Planner地面站注意别用标准版Mission Planner直接刷水下固件虽然也能连但ArduSub官网的定制版本在水下数据接口、参数默认值、日志解析上都做了优化能省很多不必要的麻烦。固件版本方面我建议优先选用稳定版而不是最新的HUD预览版。ArduSub的版本迭代节奏不算快稳定版往往经过了一整轮RC测试推进器配置、深度传感器兼容性都有保障。日志系统是你调参最重要的工具务必在正式开始之前确认开启。在Mission Planner的Full Parameter List里检查LOG_DISARMED是否设为1这样即使电机没有解锁你也能在陆地上测试姿态传感器输出并记录日志。另外确认LOG_BITMASK里包含PID相关项默认的ArduSub日志设置通常覆盖了ATUN姿态控制输出、IMU惯导数据、PSC位置控制等关键组但如果你改了参数最好把Log Options里的PID信息项也打开这样后期分析震荡原因时可以直接看到每个通道的P项和D项输出曲线。调参环境的选择也同样重要。我第一次在泳池里调ROV时因为泳池水很清感觉视野很好但忽略了隔壁泳道有人游泳产生的轻微水流结果怎么调都有一点点横滚漂移后来换到静水区才正常。尽量选择水面平静、没有明显水流和杂物的水域最好水深2到3米这样定深调整时既能观察到效果又不会因为水太深导致信号和水压问题。2.2 传感器校准和EKF健康检查传感器校准这一关过不了后面一切免谈。ArduSub和四旋翼一样在Mission Planner里有专门的加速度计、罗盘、水平仪校准界面但你需要注意水下机器人和无人机在校准上的差异。加速度计校准时如果机身本身有些浮力材料或者结构不对称放在水平面上可能会轻微倾斜这会导致零点偏差。建议找一块平整的板子把ROV固定好再校准。罗盘校准则需要特别注意电机和推进器产生的磁场干扰。水下机器人的推进器通常是无刷电机电流很大电机距离罗盘的距离如果小于30厘米高速运转时的磁场干扰会明显影响航向数据。如果你用的是外置罗盘尽量把它安装在远离推进器和电源线的位置如果用的是飞控内置罗盘调参前可以做一个简单的磁场干扰测试解锁电机逐步加大油门观察Mission Planner里航向角是否发生偏移如果偏移超过3到5度说明电磁兼容有问题需要重新考虑罗盘安装位置或者加磁屏蔽。校准完成后在Mission Planner的Status界面查看EKF的GPS值、海拔、姿态方差等指标。对于ROV来说GPS在浅水或室内常用不到但如果你在水面搜救或浮航模式GPS数据异常会直接污染EKF的估计。如果看到EKF variance数值持续飙红优先检查罗盘的外场校准质量和气压计是否受潮。气压计是定深的关键传感器如果防水舱密封不好气压计附近潮气过重读数会产生缓慢漂移这种漂移在日志里表现为深度值缓慢增大或减小非常干扰你对深度环参数的判断。3. 姿态PID实操从横滚俯仰到偏航准备工作做完了终于到了可以动手改参数的部分。ArduSub的PID参数命名沿用了ArduPilot体系姿态相关的参数主要分三组ATC_RAT_RLL横滚角速度环、ATC_RAT_PIT俯仰角速度环、ATC_RAT_YAW偏航角速度环以及对应的角度环参数ATC_ANG_RLL_P、ATC_ANG_PIT_P、ATC_ANG_YAW_P。大家常说的调PID其实大部分时间是在调这三个轴的内环角速度环。3.1 横滚和俯仰的快调套路我调横滚和俯仰有一套固定的流程不一定适用于所有ROV但效率很高可以帮你快速逼近最优值。先用默认参数下水只做姿态阶跃测试——从遥控器给一个固定角度指令比如横滚10度观察ROV的响应是反应迟钝、到位后继续超调还是轻微抖动。依据响应类型按下面的步骤操作。第一步调整P值。比如横滚轴ATC_RAT_RLL_P默认值我见过在0.1到0.3之间从默认值开始每隔0.05加一档。加P直到ROV出现持续的高频抖动频率大约2到5Hz再把P值回退20%。这就是比较合理的P值。为什么回退20%因为水下推进器响应本身就比空中电机慢你必须留出足够的稳定裕度来应对水流扰动回退20%是一个经验值实测下来比回退10%更稳妥。第二步调整I值。I项的作用是消除稳态误差在ArduSub里表现为对抗浮力不平衡和水流造成的持续偏置。从默认值开始逐渐增加每次增加后让ROV保持一个固定姿态5到10秒如果它能够稳定停在目标姿态附近不再缓慢偏移就说明I值已经能覆盖主要的稳态误差。但别加太快I值过大时ROV会出现一种低频的呼吸感——姿态缓慢地向一个方向漂移然后又被拉回来周期大约5到8秒。遇到这种表现果断把I值减半。第三步调整D值。D项在水下机器人的作用主要是抑制超调但因为推进器响应慢D值太大会把推进器噪声放大让机身出现细碎的抖动。我做横滚和俯仰D值时习惯在完成P和I调整后让ROV做一个10度阶跃观察尾部是否有一两次微小振荡。有的话D值每0.01一档往上加直到阶跃后没有回摆。D值一旦调到过大抖动会立刻变成尖啸声节奏的机身振动这时候别犹豫直接降回上一档。横滚和俯仰两侧的参数理论上是独立的但大多数ROV结构对称调完横滚轴可以直接把同样的参数复制给俯仰轴。如果你的ROV有前倾斜推进器布局或者重心明显偏移那横滚和俯仰必须分开调实际测试时优先把主要运动轴调好。3.2 偏航通道的特殊处理偏航轴在ArduSub里是最容易出问题但也最少被认真调的一个通道。很多ROV的偏航控制只看航向是否准却忽略了转向过程是否平滑。水下转向有一个特点水动力阻尼很大角速度很难建立起来。如果P值不够ROV转向时会非常黏——指令打了20度航向偏差它能花5秒才转过来而且在转动末端会因为流体惯性停不住出现过头再回摆的现象。解决偏航黏滞的方法是先加大ATC_RAT_YAW_P增大角速度响应。同时需要注意水下ROV的偏航角速度通常会限制在较低范围查看ATTITUDE参数里ATTITUDE_ACCEL_FILTER或者ATC_SLEW_YAW这类速率限制参数如果限幅太严P值再大也白搭。偏航的D值不需要太大因为水下阻尼已经天然抑制了角速度振荡过大的D反而会让转向感觉僵硬。如果偏航轴出现高频抖动首先检查螺旋桨是否有配平差异必要时降低P值而不是盲目加D。还有一个容易被忽略的因素ROV的偏航和横滚会耦合。当ROV带正浮力或负浮力时轻微倾斜会产生一个偏航力矩表现为航向锁定不住总是缓慢朝一个方向偏转。遇到这种情况你光调偏航PID没用需要回到重心和浮心配平或者在深度控制调好后再回来观察航向漂移是否消失。3.3 滤波器参数抖动的最后防线当你把PID调到一个看起来不错的区间但发现轻微抖动的阶段问题就不在增益了而在传感器信号本身。ArduSub的姿态估计依赖加速度计和陀螺仪的数据融合如果陀螺仪信号里混入了机械振动的高频噪声内环角速度环就会被这些噪声驱动产生肉眼可见的小幅抖动日志里的表现是角速度输出有密集的高频振荡。ArduPilot体系里有一组滤波器参数用于限制陀螺仪信号带宽在ArduSub中主要是INS_GYRO_FILTER陀螺仪低通滤波截止频率。默认值通常是20Hz左右如果机体振动大可以降低到15Hz甚至10Hz。但要注意滤波器截止频率越低相位延迟越大内环的响应就越迟钝。所以滤波器和PID增益是跷跷板你降低滤波截止频率就需要适当提高PID增益来补偿相位延迟导致的响应迟钝你提高截止频率PID增益就要收敛一些否则噪声会直接进入控制输出。我通常会做这样一组对比测试PID参数先不动只把INS_GYRO_FILTER从20Hz换到15Hz观察日志里角速度环控制输出值的噪声底是否明显下降。如果下降了很多说明原设置下确实有大量高频干扰我会继续降直到噪声底不再显著变化为止。降完滤波器再稍微回补一点P值让响应恢复灵敏度。整个过程需要耐心但这是让ROV真正稳下来的关键一步。4. 深度控制水下稳定性的灵魂姿态调好了ROV在空中飞模拟器里那种跟手的感觉有了但真正下水干活最影响体验的是定深。一个能在3米水深处稳稳悬停的ROV和一个只能靠手动推油门维持深度的ROV实际使用体验完全是两个东西。ArduSub的深度控制又是一个独立于姿态控制的多层级控制回路它由外环位置环PSC_Z_P、PSC_Z_I、PSC_Z_D和内环速度环PSC_Z_VEL_P、PSC_Z_VEL_I组成跟姿态环相比它的惯性更大、滞后更明显调参方式也有很大区别。4.1 定深模式的工作原理ArduSub的深度传感器通常是水压传感器深度计每10厘米水深对应约1kPa的压力变化。飞控通过读取压力值换算出当前深度并把这个深度作为位置环的反馈信号。外环位置环比较目标深度和实际深度的差计算出期望的垂直速度内环速度环再根据期望速度和实际垂直速度的差输出垂直推进器或者横滚俯仰通道的油门混合的推力。整个过程你可以理解成一个两段式刹车位置环先决定要以多快的速度接近目标深度速度环再执行当前速度到底要加到多少或者减到多少。这种解耦设计的好处是你不会因为离目标深度还有5米就一直全速下潜导致到了目标深度后因为惯性冲过头。ArduSub默认的深度控制参数已经包含了比较完整的全水深、浅水、中水速度设定但不同ROV的浮力储备和推进器推力差异巨大默认参数只能用谈不上稳。深度控制调参前有个前提必须做到机械配平。如果你的ROV本身有200克正浮力深度环的I项就算调到再大也会在深度保持时产生一个持续的向上推力来抵消浮力这会让垂直推进器始终处在高负载状态温度升高、电流增大姿态控制也会被这个持续的垂直推力干扰。所以调深度前先把ROV调成中性浮力或略微负浮力建议负浮力50到100克这样深度环只需要应对水流扰动而不是去对抗一个恒定的外力。4.2 深度环参数与浮力配平深度环的调参步骤和姿态环类似我有几个侧重点要特别提醒。首先是PSC_Z_P深度位置环比例增益它决定深度误差对期望速度的映射关系。增大P值能让ROV更快地响应深度偏差但过大会导致深度在目标值附近来回穿越表现为在水中上下呼吸。我的经验是把P值从默认的2.0左右开始每0.5一档往上加记录每次穿越的幅度。找到穿越幅度开始明显增大的档位后回退一档。其次是PSC_Z_VEL_P垂直速度环比例增益这个参数直接决定推进器对速度误差的响应强度。由于水下垂直方向的阻尼相对较小如果这个值偏大ROV在定深起始阶段会有明显的急停感甚至能看到机身轻微反弹。偏小则会出现软绵绵的下沉过程深度到达后还要游荡一两秒。正确的手感是接近目标深度时下潜速度线性减为零没有明显的过冲或回摆。最后一个关键是PSC_Z_I深度积分增益。水下配平再好也难免有密度变化或细微漏气导致浮力变化积分项负责把这个静态误差吃掉。但和水下姿态的I项一样深度I项过大时会出现周期性深度漂移和被拉回的现象我一般把PSC_Z_I控制在能让深度在20秒内完全收敛即可不追求更小的稳态误差换取更稳定不是更好。调深度环节还有一个实用技巧检查DEPTH_DMP深度阻尼系数。这个参数用于模拟水对垂直运动的阻尼默认值经过简单的流体估算但不同结构的ROV差异很大。如果你测试中发现垂直推进器停止后ROV还能继续滑行一段距离说明实际阻尼比参数假设的小可以适当增加DEPTH_DMP让深度控制器更保守一些。5. 实战问题排查与调参避坑调参过程中最消耗时间的往往不是调参本身而是排查那些看起来像参数问题、实际不是的杂症。我把这些年碰到过的典型问题整理成一个速查表你照着对应症状排查能省下大量下水测试次数。5.1 高频抖动现象ROV悬停时机身出现频率较快的左右或上下抖动有时伴随电机声音异常尖厉。排查优先级从高到低先看桨叶是否破损或动平衡不良再看电机电调是否有堵转或轴承磨损然后确认滤波器和P值是否匹配。如果桨叶没问题把日志里IMU的AccX/AccZ曲线拉出来如果在抖动频率处有明显的周期性峰值说明机械振动耦合到了飞控需要加强减震或降低滤波器截止频率。如果日志里角速度信号噪声不大而控制输出有高频振荡那就是PID增益过高直接按前面说的回退P值。5.2 定深漂移现象ROV开启定深后深度值缓慢变大或变小且深度环输出一直有持续的单向修正量。第一步检查浮力配平看看ROV在水中是否自然下沉或上浮如果自然漂移速度超过每秒2厘米说明深度环在用一个很大的恒定输出去对抗浮力。第二步检查水压传感器是否受潮或有气泡附着气泡附着在压力口会产生周期性压力波动导致深度读数起伏。第三是确认log里PSC的期望速度和实际速度是否长时间存在一个固定偏差如果有尝试加大PSC_Z_I。5.3 航向偏转现象全方向推进时航向尚可但定深悬停时航向会缓慢朝一个方向旋转。大概率是机身结构不对称或者推进器扭矩不平衡导致的偏航力矩。如果你确认姿态控制已经调顺开关定深后航向才开始漂移多半是垂直推进器启动后产生的侧向力矩大于偏航控制的纠正能力。排查时先把垂直推力输出曲线打开看看漂移是否和垂直推进器输出同步变化同步的话加大ATC_RAT_YAW_P并检查偏航通道的限幅参数是否过小。5.4 日志分析速查表新手排查时最懵的就是Mission Planner里那一堆曲线图我提供一个最简分析路径打开日志后先看ATTITUDE姿态里的DesRoll、Roll和RollRate如果DesRoll和目标一致但Roll始终差几度说明角度环P值不够如果Roll和RollRate都有高频毛刺优先怀疑滤波器再看PID控制器输出如果输出曲线反复冲到上下限说明增益过大或前后馈缺配平。深度方面看CTUN的BarAlt和PSC期望深度两者之间的差值就是深度控制误差误差平坦但有静差就调I误差振荡就调P和D。我个人的调参体会是ArduSub调参没有一次到位的银弹更像是一个逐步逼近的过程。每一次下水只改一组参数记好日志分析一轮再改下一轮。遇到无法解释的异常现象先回到机械、传感器、浮力这些基础检查一遍别急着怀疑PID。很多看起来是控制问题的情况最后都出在传感器安装或推进器磨损上。把这篇指南里的顺序走完你的ROV应该能获得一个相当稳定的游动表现像鱼一样稳稳挂在水里该动时干脆利落该停时纹丝不动。
返回列表