1. 无人船/车航线跟踪的常见问题与解决思路
如果你正在使用APM固件控制无人船或无人车,可能会遇到这样的场景:设备在自动航行时总是偏离预定航线,要么走出S型轨迹,要么在转弯时反应迟钝。这些问题往往源于控制器参数设置不当。我刚开始接触APM时也踩过不少坑,后来发现关键在于理解不同版本固件的控制逻辑差异。
APM固件4.3版本前后采用了完全不同的控制架构。老版本(4.2及之前)使用L1控制器,新版本则改用PID控制器。这两种控制器在航线跟踪上的表现差异明显:L1控制器更注重路径跟随的几何关系,而新版PID控制器则通过位置误差的闭环调节实现更精准的控制。实测下来,新版控制器的抗干扰能力更强,特别是在有风浪或地面不平整的环境下。
要解决航线偏离问题,建议先确认固件版本。如果是新版本,重点调整PSC_VEL_P、PSC_VEL_D等PID参数;如果是老版本,则需要优化NAVL1_PERIOD和NAVL1_DAMPING参数。但在此之前,有个重要前提:必须先调好底层的速度控制器和偏航角速率控制器,就像盖房子要先打好地基一样。
2. 新版PID控制器的调参实战
2.1 位置控制器的核心参数解析
新版PID控制器的核心是位置控制器,它像一位导航员,不断计算当前与目标位置的差距,然后告诉速度控制器"该加速还是减速"。这个过程中有几个关键参数需要关注:
- PSC_VEL_P:相当于方向盘的灵敏度。数值越大,设备对航线偏差的反应越强烈。但调太高会导致"矫枉过正",出现蛇形走位。
- PSC_VEL_D:相当于阻尼器,能抑制P值引起的振荡。我习惯把它设为P值的5-10%,太高会影响直线稳定性。
- PSC_VEL_I:消除长期偏差的积分项。通常设为P值的20%,对抵抗持续侧风特别有效。
调参时有个实用技巧:先在直线航段上调P值,直到出现轻微振荡,然后回退10%;接着在弯道调D值,改善转向响应;最后加I值处理残余误差。记得用地面站的实时曲线监控参数效果,这比肉眼观察准确得多。
2.2 实操步骤与避坑指南
具体操作流程如下:
- 用Mission Planner规划一个包含长直线和90度弯道的矩形航线
- 初始设置:PSC_VEL_P=1.0, PSC_VEL_D=0, PSC_VEL_I=0
- 逐步增加P值直到直线航行出现轻微振荡(典型值1.5-3.0)
- 加入D值(P值的5-10%)消除弯道的滞后
- 最后加入I值(P值的20%)消除稳态误差
这里有个容易踩的坑:PSC_POS_P参数默认0.2不要乱改。有次我把它调到1.0,结果无人船像喝醉了一样在航线上来回摆动。另外,小型设备要把PSC_VEL_FLTD和PSC_VEL_FLTE调到10以上,因为它们的惯性更小。
3. 老版L1控制器的优化技巧
3.1 L1算法的独特工作机制
L1控制器采用了完全不同的思路——它不直接计算位置误差,而是构建一个虚拟的"引导点"(L1点)。这个点就像吊在车前的胡萝卜,设备会不断调整方向去追逐它。NAVL1_PERIOD参数决定了这个引导点的距离,相当于"预瞄距离"。
调试时最关键的三个参数:
- NAVL1_PERIOD:默认15秒。数值越大,转向越平缓。如果看到S型轨迹,应该以0.5为步长减小这个值。
- NAVL1_DAMPING:默认0.75。控制转向的"柔顺度",数值越高过冲越小。狭窄航道建议增加到0.8-0.85。
- ATC_TURN_MAX_G:最大侧向加速度。需要通过实测确定:在手动模式下急转弯,记录最大ay值再除以9.81。
3.2 实战调整案例
去年调试一艘3米长的无人船时,发现它在转弯时总是"切弯"。通过地面站看到实际轨迹与计划航线偏差达2米。经过分析,将NAVL1_PERIOD从15降到12.5,NAVL1_DAMPING从0.75升到0.82,同时把WP_RADIUS从5米改为3米。调整后跟踪误差缩小到0.5米内,转弯也更加流畅。
特别注意WP_OVERSHOOT参数:它控制减速时机。在狭窄河道测试时,发现设为默认值2米会导致频繁减速。调整到4米后航行更连贯,但转弯半径会略增大,需要与WP_RADIUS配合调整。
4. 特殊场景的优化策略
4.1 S型路径的修正方案
当设备走出S型轨迹时,新旧版本的处理方法不同:
- PID控制器:先检查PSC_VEL_D是否足够。如果增加D值无效,可能是底层速度控制器的PID没调好。我曾遇到PSC_VEL_D调到0.3仍无效的情况,后来发现是速度控制的P值太低。
- L1控制器:直接减小NAVL1_PERIOD。但要注意,这个值太小会导致转向过于敏感,在波浪环境中可能引发振荡。
有个诊断技巧:如果S型轨迹的波长与速度成正比,问题通常在高级控制器;如果与速度无关,则可能是底层控制器的问题。
4.2 弯道性能优化
提升弯道性能的关键是理解设备的动力学极限。通过地面站的"调整"模式记录最大侧向加速度后:
- 对PID控制器,适当提高PSC_VEL_D(不超过P值的15%)
- 对L1控制器,在不超过ATC_TURN_MAX_G的前提下降低NAVL1_PERIOD
- 两种控制器都要确保WP_SPEED适合当前转弯半径。我常用经验公式:最小转弯半径≈速度²/(2*最大侧向加速度)
在码头区域测试时,建议先用手动模式测试最大安全转弯速度,再据此设置自动模式参数。记住,参数没有"最佳值",只有"最适合当前环境和负载的值"。每次更换电池或增加负载后,最好重新测试关键参数。