ardupilotのノッチフィルターの設定
背景
マルチコプターのチューニング中に、そこそこ姿勢制御できるようになっても、スピードを出してみると不安定な挙動になることがあります
その原因の一つとして、スピードを出すとプロペラの振動が大きくなり、その振動の影響を受けてしまうということがあります
もちろんダンパーなどうまく工夫して、フラコンに振動が入らないようにすることで抑えることもできますが、モーターアームが長くて中々剛性を高められなかったりします
arduplotではノッチフィルターというフィルターがあり、それを活用することによって、不安定な挙動を解消することができます
比較的簡単に設定することができ、とても有用なので、今回はノッチフィルターの設定方法について説明します
参考
使用したもの
- ArduCopter V4.4.4
フィルタリング前の設定方法
ログの設定方法
まず、ノッチフィルターでフィルタリングする周波数を確認するために、デフォルトのログだけではなく、フィルタリングする前のログを取得する必要があります
RawIMUを取得する方法と、Batch samplingする方法があります
フラコンが4.5以降のファームウェアのバージョンを使用し、H7のフラコンを使う場合には、RawIMUでログを取得する方がシンプルで好まれているそうです
今回は4.4で行うので、batch samplingで確認しますが、一応両方の設定方法を記載します
RawIMU
LOG_BITMASKでRawIMUにチェックを入れる
Batch sampling
INS_LOG_BAT_OPT = 4 preとpostのデータを取得
INS_LOG_BAT_MASK = 1 to collect data from the first IMU
他のIMUについても取得する場合は、設定を変えればよいです
比較
同じくらいの飛行時間でログを取得したところ
上がRawIMUで下がBatch sampling
Batch samplingの方がサイズが小さい
Filter Review Toolで確認したところ
RawIMUの方は
こんな感じのエラーが出てきて、IMU Spectrumが表示されませんでした
window sizeを1024から512に変更したら読み込めました
一方、Batch samplingの方は特にエラーが出ずに読み込むことができました
飛行確認
以降はBatch samplingの方法で説明を続けます
Batch samplingの設定を入れて、適当に飛行させてみます
まずは振動数を確認するだけなので、1分くらいホバリングさせるだけで良いです
ログをダウンロードして、Filter Review Toolを使って確認します
IMU Spectrumのところで、pre-filterを選択してみます
下のINS_HNTCH_FREQに値を入れてみて、何番目のハーモニックまでフィルタリングするか設定し、Notch trackingのチェックボックスを入れると線が表示されるので、確認しやすくなります
ノッチフィルターのモード
- Satic center frequency
- Throttle position based
- RPM sensor based
- ESC Telemetry based
- In-Flight FFT based
回転数を取得したりすることができるのであれば、RPM SensorやESC Telemetryがいいのですが、取得できない場合が多いです
Static centerはドキュメントとしてあまりお勧めされていません
In-Flight FFTが一番良いみたいですが、ファームウェアが限定されていたり、CPUのスペックが必要です
なので、Throttle baseで試してみます
ノッチフィルターの設定方法
INS_HNTCH_ENABLE : 1
再起動
- INS_HNTCH_MODE : 1 Throttle position based
- INS_HNTCH_ATT
デフォルトのまま40で良いです
Filter Review Toolで設定を変えてみて色々試してみてください - INS_HNTCH_FREQ
最初にFilter Review Toolで確認した周波数の値 - INS_HNTCH_REF
MOT_THST_HOVERの値を入れる
ホバリングしているときのログから、CTUNのThHの値を確認しても良いです
この場合、0.35とか0.36とかで数値をまるめてしまっても良いです - INS_HNTCH_BW : INS_HNTCH_FREQの半分の値
- INS_HNTCH_HMNCS : 何番目のハーモニック周波数まで設定するか
- INS_HNTCH_FM_RAT
デフォルトの設定では、プロペラの回転数が、設定したINS_HNTCH_FREQよりも下回ったとしても、フィルタリングをしないようになっています
より回転数が低くなってもフィルタリングしてほしいときにこの値を変更します
例えば、INS_HNTCH_FREQを50と設定している場合、デフォルトの1だと50Hz以下はフィルタリングしない
INS_HNTCH_FM_RATを0.7にすると、70%の35Hzまで下がってもフィルタリングしてくれます
あまり低回転までフィルタリングしてしまうと、制御に影響がでることがあるみたいなので注意が必要です
Discussion