RPMフィルタ¶
RPMフィルタとは¶
RPMフィルタとは,モータの回転周波数とその高調波を中心周波数とするノッチフィルタです. ドローン,特にマルチコプターにおいて,IMUに生じる振動のほとんどはプロペラによるものなので, その回転数にノッチフィルタの中心周波数を追従させることで振動を効果的に除去することができます.
RPMフィルタの効果¶
RPMフィルタを用いる最大の利点は,フィルタリング効果が非常に高いことです. ノッチフィルタの中心周波数におけるゲインはゼロであり,理想的には中心周波数の振動は完全に消滅します. 実際は中心周波数の誤差や離散化誤差により完全に振動が消えることはありませんが, それでもローパスフィルタに比べると遥かに高いフィルタリング効果を発揮します.
下の画像はF450を飛行させたときのIMUの時系列データと周波数解析結果です. 灰色が生のデータ,青色がフィルタリング後のデータです. 左列はカットオフ40HzのLPFのみを適用したとき,右列はRPMフィルタのみを適用したときです. LPFのみだと高周波は落とせてもモータ回転数の振動が強く残っているのに対し, RPMフィルタの場合はモータの回転周波数とその2,3倍周波の振動も大幅にカットできていることが分かります.


IMU,特にジャイロの振動が減少すると,モータの回転数の変動も減少します. 下の画像で青色が観測した回転数,赤色が目標の回転数ですが,ノッチフィルタを用いた場合の方が回転数の変動が小さいことが分かります. これにより,余計な力が働かないことで姿勢制御がより安定することに加え, モータの発熱量が減ったりプロペラの羽音が滑らかになるという効果も得られます.

対応FMU¶
以下のFMUではRPMフィルタを使用することができます.
- FC2xx
パラメータ¶

GCSのParam TuningのIMU Filterの項でフィルタの設定を行うことができます.
それぞれのパラメータの説明,初期値,調整方法を以下に記します.
lowpass_filter/*_cutoff¶
RPMフィルタとは別のローパスフィルタのカットオフ周波数です. 最初は3つ全て0Hzに設定してください.これでフィルタが無効化されます. RPMフィルタではモータ,プロペラ由来の振動以外は落とせないため,どうしても強い振動が残る場合は部分的にLPFを有効化してください.
rpm_filter/quality_factor¶
ノッチフィルタの鋭さを決める値です. 大きいほど鋭い(バンド幅が狭い)変わりに遅延が小さくなります. デフォルトは0でフィルタが無効になっています. 最初は遅延とバンド幅のバランスがとれた5に設定してください. 実際に飛ばしてみてFFTでピークが視認できないほどに振動がカットされていることが確認できたら, ピークが残る直前まで1つずつ値を大きくしてみてください.
rpm_filter/min_center_frequency, rpm_filter/fade_range¶
RPMフィルタを適用する中心周波数の範囲に関するパラメータです. 前者を\(f_\mathrm{m}\),後者を\(f_\mathrm{f}\)とすると,中心周波数\(f_\mathrm{c}\)に対してノッチフィルタは以下のように適用されます.
- \(f_\mathrm{c} \lt f_\mathrm{m}\): フィルタ無効
- \(f_\mathrm{m} \le f_\mathrm{c} \lt f_\mathrm{m} + f_\mathrm{f}\): 遷移領域(\(f_\mathrm{c}\)が大きいほどフィルタが強くなる)
- \(f_\mathrm{m} + f_\mathrm{f} \le f_\mathrm{c}\): フィルタ有効
フィルタを無効化する領域を設けているのは,制御帯域に近い低周波側をフィルタリングすると応答性や安定性に悪影響が出る可能性があるためです. 遷移領域を設けているのは,RPMフィルタを有効・無効が切り替わった際に全体のフィルタ特性が急激に変化するのを避けるためです. ホバリング回転周波数\(f_\mathrm{h}\)に対し, 最初は\(f_\mathrm{m}=\frac{f_\mathrm{h}}{2}\),\(f_\mathrm{f}=\frac{f_\mathrm{h}}{4}\)程度に設定してください.
rpm_filter/lpf_cutoff¶
RPMフィルタの中心周波数にかけるローパスフィルタのカットオフ周波数です. ESCから得られるモータの回転数は変動が大きく,そのまま中心周波数として使用するとフィルタ特性の変動が大きすぎるため平滑化しています. 多くの場合デフォルトのままで問題ありません.