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

PX4开始之旅(一)自动调参

核心知识点:无人机震动与滤波参数

1. 通俗易懂的解释

想象一下,你的无人机就像一个非常敏感的“听众”,它的“耳朵”就是陀螺仪和加速度计这些传感器,用来感知自己是如何移动和旋转的。理想情况下,它应该只“听”到你想要它做的动作(比如向前飞、向左倾斜)。

但是,无人机在飞行时难免会产生震动,就像有人在你“听”东西的时候在你耳边不停地小声说话一样。这些震动可能是桨叶不平衡、电机问题、机架不够硬等原因引起的。对于传感器来说,这些震动产生的信号就像是很多杂乱的“噪音”,和无人机实际的姿态变化信号混在一起了。

如果飞控系统直接使用这些带有大量“噪音”的传感器数据来控制电机,就会像一个“听不清”指令的人一样,做出错误的或不稳定的反应。比如,它可能会误以为自己在快速旋转,然后试图用电机去抵消这个“不存在”的旋转,结果反而引起电机输出的剧烈变化,导致飞机抖动、不稳定,甚至发热、耗电快。

“滤波”就像是给无人机的“耳朵”戴上了一个“降噪耳机”或“筛子”。它的作用是识别并去除传感器数据中的那些高频的、由震动引起的“噪音”,只留下那些低频的、代表无人机真实姿态变化的信号。

现实例子:

你用手机录一段视频,如果手非常抖,录出来的画面就会晃动得很厉害。很多视频编辑软件都有“防抖”功能,它通过分析视频帧之间的变化,识别出由于手抖引起的快速、小幅度的晃动,并将其消除或减轻,让画面看起来更稳定。无人机飞控中的滤波功能,就像是给传感器数据做“防抖处理”,滤掉震动带来的“晃动”数据。

2. 抽象理解

共性 (Abstract Understanding):

滤波是信号处理领域的一个基本概念,其抽象本质是根据信号的频率特性,选择性地允许或阻止特定频率成分通过。在无人机飞控中,传感器数据被视为一个包含不同频率成分的信号流:低频成分通常代表无人机整体的姿态和运动变化(我们关心的有用信号),而高频成分则往往是由电机、螺旋桨、机架共振等引起的震动噪声。

滤波器通过数学算法实现这一选择过程。常见的滤波器类型包括:

  • 低通滤波器 (Low-Pass Filter, LPF): 允许低于某个“截止频率”的信号通过,衰减高于截止频率的信号。用于去除高频噪声。

  • 高通滤波器 (High-Pass Filter, HPF): 允许高于某个“截止频率”的信号通过,衰减低于截止频率的信号。

  • 带通滤波器 (Band-Pass Filter, BPF): 允许某个频率范围内的信号通过。

  • 带阻滤波器 / 陷波滤波器 (Band-Stop Filter / Notch Filter): 衰减某个特定频率或频率范围内的信号,允许其他频率通过。特别适用于去除已知频率的窄带噪声,如特定转速下电机或桨叶产生的谐波震动。

在无人机飞控中,我们主要使用低通滤波器和陷波滤波器来处理传感器数据中的高频震动噪声。

潜在问题 (Potential Issues):

  1. 噪声与信号的权衡: 过滤得越彻底(例如,低通滤波器的截止频率设置得越低),去除的噪声越多,但同时也会衰减或引入延迟到有用的低频信号中。

  2. 控制延时 (Control Latency): 滤波器,特别是数字滤波器,需要处理一段时间内的数据才能产生输出,这会引入控制延时。延时会降低控制系统的响应速度,可能导致 PID 控制器参数无法设置得太高,影响控制精度和稳定性,甚至导致系统发散(失控)。

  3. 参数依赖性: 滤波器的效果和引入的延时都高度依赖于其参数设置(如截止频率、带宽)。不合适的参数可能导致滤波不足(噪声残留)或过度滤波(延时过大)。

  4. 动态变化: 震动频率和强度可能随电机转速、飞行姿态、载荷等因素动态变化。静态的滤波器参数可能无法完美适应所有工况。陷波滤波器尤其需要准确知道噪声频率。

  5. 计算资源消耗: 复杂的滤波算法需要计算资源,可能增加飞控主循环的计算负担,影响控制周期。

3. 实现的原理

无人机飞控中的滤波通常是基于数字信号处理技术实现的。传感器(如陀螺仪、加速度计)以一定的采样率采集数据,飞控软件对这些离散的数据序列应用滤波算法。

  1. 低通滤波器 (Low-Pass Filter, LPF):

    • 原理: 通过对一段时间内的传感器数据进行加权平均来平滑信号。简单来说,就是让当前时刻的输出值不仅取决于当前的输入值,还取决于之前一段时间的输入值或输出值。

    • 常见实现方法:

      • 滑动平均滤波器 (Moving Average Filter): 计算最近 N 个数据点的平均值作为当前输出。简单但会引入较大的延时和相位滞后。

      • 指数滑动平均滤波器 (Exponential Moving Average Filter, EMA): 当前输出是当前输入和上一个输出的加权平均。计算简单,延时相对较小,是飞控中常用的方法。其平滑程度由一个滤波系数(或等效的截止频率)决定。

      • 巴特沃斯滤波器 (Butterworth Filter) 等 IIR/FIR 滤波器: 更复杂的数字滤波器设计,可以实现更陡峭的频率响应,但在嵌入式系统中可能计算量较大。

    • PX4 参数 IMU_GYRO_CUTOFF / IMU_DGYRO_CUTOFF 这些参数配置了陀螺仪数据(包括 D 项)低通滤波器的截止频率。截止频率越低,滤除高频噪声效果越好,但延时越大。

  2. 陷波滤波器 (Notch Filter):

    • 原理: 设计用来衰减或消除某个特定频率的信号。它会创建一个在目标频率处有“陷落”的频率响应。

    • 实现方法: 通常使用二阶数字滤波器(如双二阶滤波器 BiQuad Filter)来实现。需要配置滤波器的中心频率和带宽。

    • PX4 参数 IMU_GYRO_NF0_FRQ / IMU_GYRO_NF0_BW 这些参数配置了陀螺仪数据的第一个陷波滤波器。FRQ 设置中心频率,BW 设置带宽(即衰减的频率范围)。通常将中心频率设置在主要的震动频率处(如电机/桨叶基频或其谐波)。

  3. 电机输出滑动滤波器 (MOT_SLEW_MAX):

    • 原理: 限制电机输出指令的变化速率。即使飞控内部计算出电机需要快速大幅度改变转速,这个滤波器也会限制每次更新时电机指令的最大变化量。

    • 作用: 可以平滑电机输出,减少由于高频噪声或控制不稳定导致的电机“抽搐”,保护电机和电调。但会引入额外的控制延时,通常在系统震动问题解决后才考虑使用,且不宜设置过低。

滤波器的参数调整是一个权衡的过程,需要在有效滤除噪声和最小化控制延时之间找到平衡点。通常需要结合飞行日志分析,识别主要的震动频率,并根据试飞情况逐步调整滤波参数。

4. 实现代码 (示例)

以下是一个简单的 Python 示例,演示如何实现一个基本的一阶指数滑动平均(EMA)低通滤波器。这是一种在嵌入式系统中常用的简单低通滤波方法。

import matplotlib.pyplot as plt
import numpy as np# 模拟带有噪声的传感器数据
# 生成一个低频正弦信号作为“真实”信号
time = np.linspace(0, 10, 500) # 10秒,500个数据点
true_signal = np.sin(time * 2 * np.pi * 0.5) # 0.5 Hz 正弦波# 生成高频噪声
noise = np.random.randn(len(time)) * 0.5 # 随机噪声
high_freq_noise = np.sin(time * 2 * np.pi * 20) * 0.3 # 20 Hz 正弦噪声
noisy_signal = true_signal + noise + high_freq_noise# --- 一阶指数滑动平均 (EMA) 低通滤波器实现 ---def ema_low_pass_filter(data, alpha):"""应用一阶指数滑动平均低通滤波器。Args:data (list or numpy.array): 输入的原始数据序列。alpha (float): 平滑因子,介于 0 和 1 之间。alpha 越接近 0,滤波越强(截止频率越低),延时越大。alpha 越接近 1,滤波越弱(截止频率越高),延时越小。alpha = dt / (RC + dt),其中 RC 是时间常数,dt 是采样间隔。或者 alpha = 1 - exp(-dt / RC)更直观地,alpha 与截止频率 fc 的关系近似为 alpha ≈ 2 * pi * fc * dt所以 fc ≈ alpha / (2 * pi * dt)或者 alpha ≈ 1 / (1 + 1 / (2 * pi * fc * dt))这里我们直接使用 alpha 作为参数。Returns:list: 滤波后的数据序列。"""if not data:return []filtered_data = [data[0]] # 初始化第一个滤波值为第一个原始数据点for i in range(1, len(data)):# EMA 公式: filtered_value = alpha * current_input + (1 - alpha) * previous_filtered_valuefiltered_value = alpha * data[i] + (1 - alpha) * filtered_data[-1]filtered_data.append(filtered_value)return filtered_data# --- 应用滤波器 ---
# 选择不同的 alpha 值来观察滤波效果
alpha_weak = 0.5  # 滤波较弱,延时小
alpha_strong = 0.1 # 滤波较强,延时大filtered_signal_weak = ema_low_pass_filter(noisy_signal, alpha_weak)
filtered_signal_strong = ema_low_pass_filter(noisy_signal, alpha_strong)# --- 绘图对比 ---
plt.figure(figsize=(12, 8))plt.plot(time, true_signal, label='真实信号', color='blue', linestyle='--')
plt.plot(time, noisy_signal, label='带噪声信号', color='red', alpha=0.6)
plt.plot(time, filtered_signal_weak, label=f'EMA 滤波 (alpha={alpha_weak})', color='green')
plt.plot(time, filtered_signal_strong, label=f'EMA 滤波 (alpha={alpha_strong})', color='purple')plt.xlabel("时间 (秒)")
plt.ylabel("信号值")
plt.title("低通滤波效果对比")
plt.legend()
plt.grid(True)
plt.show()# --- 陷波滤波器概念说明 (无代码实现,因其复杂性) ---
# 陷波滤波器通常需要知道要滤除的特定频率。
# 在无人机中,可以通过分析传感器数据的频谱(例如使用 FFT)来找到主要的震动频率。
# 然后配置陷波滤波器的中心频率和带宽来衰减这些频率。
# 实现一个通用的陷波滤波器需要更复杂的数字信号处理知识和代码(如设计 BiQuad 滤波器)。
# 在 PX4 等飞控中,这些滤波器已经实现,用户只需要配置相应的频率和带宽参数。
print("\n--- 陷波滤波器概念 ---")
print("陷波滤波器用于滤除特定频率的窄带噪声,例如电机或桨叶在特定转速下产生的谐波震动。")
print("需要通过频谱分析等方法确定噪声频率,然后配置滤波器的中心频率和带宽。")
print("在实际飞控代码中,这通常通过配置 BiQuad 等数字滤波器参数来实现。")

代码解释:

  1. 模拟数据: 生成了一个包含低频真实信号、随机噪声和高频正弦噪声的模拟传感器数据序列,以模拟无人机传感器接收到的带有震动噪声的数据。

  2. ema_low_pass_filter 函数: 实现了一阶指数滑动平均滤波算法。alpha 参数控制滤波的强度。alpha 越小,滤波器对历史数据的权重越大,平滑效果越明显,但引入的延时也越大。

  3. 应用滤波器: 使用不同的 alpha 值对带噪声信号进行滤波,得到滤波后的信号。

  4. 绘图: 将原始真实信号、带噪声信号以及不同滤波强度的滤波后信号绘制出来,直观地展示低通滤波对高频噪声的衰减和平滑效果,以及不同滤波强度带来的差异。

  5. 陷波滤波器说明: 简单介绍了陷波滤波器的概念和用途,但没有提供具体的代码实现,因为其实现比 EMA 滤波器复杂,通常在飞控固件中作为成熟模块提供。

这个示例代码展示了低通滤波“平滑”数据的基本原理。在实际飞控中,使用的滤波器类型和阶数可能更复杂,参数也需要更精细的调整。

5. 实际应用和场景

滤波参数的调整在无人机飞控调试中是一个关键环节,直接影响飞机的飞行性能、稳定性和硬件健康。其主要应用和场景包括:

  1. 提升飞行稳定性: 有效滤除震动噪声可以确保飞控系统接收到更“干净”的姿态和角速率数据,从而使姿态控制器能够更准确、平滑地工作,减少不必要的电机抖动,提高飞行稳定性,尤其是在悬停和慢速飞行时。

  2. 实现精确控制: 对于需要精确执行任务的无人机(如航拍、测绘、喷洒),准确的传感器数据是实现精确路径跟踪、定点悬停的基础。合适的滤波可以减少噪声对控制精度的干扰。

  3. 保护硬件: 过大的震动噪声会导致电机输出指令频繁剧烈变化,这会使电机和电调工作在非高效状态,产生额外热量,长期可能导致硬件过热甚至损坏。适当的滤波可以平滑电机输出,延长硬件寿命。

  4. 延长续航时间: 电机输出的频繁剧烈变化会增加能量消耗。通过滤波减少这种不必要的动作,可以提高能源利用效率,延长无人机的续航时间。

  5. 优化 PID 参数调优: 如您所提到的,在调优 PID 参数之前先处理好滤波问题非常重要。一个干净的传感器信号是调出高性能 PID 参数的前提。如果噪声很大,即使 PID 参数调整得再好,也难以获得理想的控制效果。

  6. 适应不同机架和硬件: 不同的机架设计、电机、螺旋桨和安装方式会产生不同的震动特性。通过调整滤波参数,可以将飞控系统更好地适配到具体的硬件平台,发挥最佳性能。

  7. 应对环境变化: 虽然静态滤波参数有局限性,但在一定程度上,合适的滤波设置可以帮助系统更好地应对风、气流等引起的干扰,这些干扰也可能在传感器数据中表现为特定频率的成分。

在实际调参过程中,通常需要结合飞行日志分析(例如查看陀螺仪数据的频谱),识别主要的噪声频率和强度,然后有针对性地调整低通滤波器(IMU_GYRO_CUTOFF)和陷波滤波器(IMU_GYRO_NF0_FRQ, IMU_GYRO_NF0_BW)的参数。权衡滤波效果和控制延时是关键,通常需要多次试飞和日志分析来找到最佳参数组合。同时,优化硬件减震也是降低震动、减轻滤波压力的重要手段。

相关文章:

  • Windows10 本地部署 IPFS(go-ipfs)
  • NX884NX891美光固态闪存NX895NX907
  • 汽车租赁|基于Java+vue的汽车租赁系统(源码+数据库+文档)
  • 【日撸 Java 三百行】Day 7(Java的数组与矩阵元素相加)
  • RT-Thread 深入系列 Part 1:RT-Thread 全景总览
  • Xterminal(或 X Terminal)通常指一类现代化的终端工具 工具介绍
  • 自定义装饰器
  • 使用AES-CBC + HMAC-SHA256实现前后端请求安全验证
  • P11369 [Ynoi2024] 弥留之国的爱丽丝(操作分块,DAG可达性trick)
  • 太阳能板结构及发电原理与输出特性分析——以杭州 5V 太阳能板为例
  • 北斗导航 | RTKLib中模糊度解算详解,公式,代码
  • [计算机科学#12]:高级编程语言基本元素,迅速上手编程
  • WebSocket:实时通信的新时代
  • 使用React实现调起系统相机功能
  • 如何利用爬虫获得1688商品详情:实战指南
  • 汽车制造行业的数字化转型
  • 塔能工业互联节能方案:数据驱动工业制造绿色转型
  • 【软件设计师:软件】20.软件设计概述
  • STM32CubeMX安装及使用分享
  • 【智体OS】AI社交产品头榜赋能电商新零售:某品牌吹风机的智能营销实战案例
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 巴基斯坦首都及邻近城市听到巨大爆炸声
  • 巴基斯坦信德省卡拉奇发生爆炸
  • 现场|万米云端,遇见上博
  • 李云泽:支持设立新的金融资产投资公司,今天即将批复一家
  • 大规模空袭也门一日后,以军又对也门萨那机场发出撤离警告