资讯详情

资讯详情

ArduPilot 定点悬停为什么漂?看 PosHold 抗风补偿与参数设置

ArduPilot 定点悬停为什么漂看 PosHold 抗风补偿与参数设置【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot无人机悬停时慢慢漂移多数人第一反应是 GPS 精度差但 ArduPilot 的 PosHold 定点悬停模式把保持位置拆成了四件事先由 GPS、IMU、气压计经 EKF扩展卡尔曼滤波器可理解为把多个不完美传感器融合成一个最佳位置估计的算法给出当前位置再由位置环算出需要多大的侧向加速度去纠正偏差然后把这个要求换算成机身倾斜角度最后交给姿态环驱动电机。任何一环出偏差表现出来的都是悬停不准所以排查时要分层看而不是只盯 GPS。核心实现位于 ArduCopter/mode_poshold.cpp模式状态机电机停转、地面怠速、起飞、飞行定义在 ArduCopter/mode_althold.cpp。悬停时系统内部按什么顺序工作PosHold 的悬停并不是一个开关而是一个按时间推进的流程电机停转或地面怠速阶段系统只维持油门怠速重置各控制器积分避免起飞瞬间输出突变起飞阶段把目标爬升率限制在合理范围内并叠加障碍物规避对爬升率的修正飞行阶段水平方向执行定点控制垂直方向执行高度保持。理解这一点有助于解释一个常见现象刚切到 PosHold 时飞机会冲一下才稳住因为位置环需要几秒钟把偏差收敛掉。若切换后飞机持续缓慢滑移而不是短暂纠正问题多半不在控制环本身而在位置输入或风补偿学习见下文。风补偿不是预测风而是记住要倾斜多少这是 PosHold 与 Loiter 模式的关键区别也是最容易被误解的机制。源码里的风补偿逻辑update_wind_comp_estimate做的工作很朴素当飞机进入悬停并保持稳定后持续观察位置环为了顶住风所请求的侧向加速度经低通滤波得到一个风场向量然后把这个向量换算成机身横滚/俯仰补偿角直接叠加到姿态指令上。也就是说它不测量风速而是学习需要持续倾斜多少才能不被吹走下次有风时提前摆好姿态而不是等飞机被吹漂了再追。这套学习有三个前提条件任何一个不满足风补偿都不更新进入悬停后先等 1.5 秒POSHOLD_WIND_COMP_START_TIME_MS让姿态先稳定水平速度必须低于 0.1 m/s飞机还在移动时不学习避免把机动误判为风补偿量被限制在最大倾斜角的约 2/3 以内目的是始终给飞手留出人工压杆的余量任何情况下你都能覆盖自动输出。边界同样明确它是稳态风补偿不是阵风预测。阵风来去很快飞机速度一超过学习阈值补偿量就冻结在当前值不再跟新所以强阵风下仍会有明显偏移这是机制使然不是参数没调好。悬停漂移的常见原因与定位思路按影响面从大到小排查效率最高GPS 跳变ArduPilot 对 GPS 有跳变检测glitch 检查相关代码在 ArduCopter/AP_Arming_Copter.cppEKF 会过滤掉瞬间跳点飞机通常不会立刻飞走但如果跳变持续系统会记录 GPS 故障并影响导航质量。此时先查卫星数与 DOP再检查天线是否被遮挡、是否靠近电机与电源。EKF 融合降级GPS 正常但 IMU 或气压计异常时EKF 输出会抖。日志里关注位置解的质量标志而不是只看 GPS 模块自身的指示。风补偿未生效如果飞机始终向固定方向缓漂可能是起飞时机位不稳定导致风向量学得偏了。落地后重新进入 PosHold、让它静悬几秒再试。没有 GPS 的室内换 FLOWHOLD 光流悬停模式ArduCopter/mode_flowhold.cpp它用光流传感器替代 GPS 估计水平位置但依赖FLOW_MAX、FLOW_QUAL_MIN等参数下的传感器健康状态且精度受纹理与光照影响。硬件层面电机发热不均、桨叶破损、重心偏移都会造成恒定向某侧的风这类问题软件参数解决不了。关键参数与设置建议用户可调的 PosHold 参数不多调参前建议先确认定位质量再动这些旋钮参数作用说明POSHOLD_BRK_ANGLE悬停刹车阶段的最大倾斜角度飞机被吹离目标点后快速刹回来时的姿态上限太小刹得慢太大易超调旋翼机默认上限更低POSHOLD_BRK_RATE刹车阶段姿态变化速率度/秒控制刹车动作的快慢响应太激进会导致来回摆动需要说明两点避免调参走偏风补偿的启动延迟1.5 秒和学习速度阈值0.1 m/s是源码中固定的常量不是参数风补偿的倾斜上限最大倾斜角的 2/3也写死在 ArduCopter/mode_poshold.cpp 中不能调大——这个限制本身就是安全设计。如果你的目标是更强的抗风能力方向应是改善定位天线、EKF 配置和动力余量而不是绕开保护限制。什么时候该用 PosHold什么时候不该用开阔地、GPS 良好、需要手杆微调用 PosHold它在 Loiter 定点基础上混入了飞手杆量松杆回中时才完全交给控制器只需保持高度、允许水平机动用 Loiter 或 AltHold避免不必要的定点纠正室内或城市峡谷无 GPS用 FLOWHOLD前提是光流传感器安装正确且数据质量达标大侧风且任务允许接受稳态风补偿的局限重要航线段留足动力余量或降低飞行高度避开低空风切变。判断这套机制是否正常工作最直观的办法是观察日志进入悬停约 1.5 秒后姿态环的目标倾斜角应出现一个与主导风向相反的稳定偏置且该偏置随风向缓慢变化而不是跳变。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →