サーボモードフィルター設定の説明
サーボモードフィルター設定の説明
はじめに
ユーザーはusersetting設定ファイルのSERVOMOVE内で、パラメータFILTER_TYPEの値を変更することでフィルタータイプを選択できます。
この値は次のように設定できます:
- 0:フィルターを使用しない;
- 1:関節空間の一次ローパスフィルターを使用、LPF_1ST;
- 2:関節空間の三次非線形フィルターを使用、NLF_JOINT;
- 3:関節空間の多段平均フィルターを使用、MMF_JOINT;
- 4:デカルト空間の三次非線形フィルターを使用、NLF_CART;
- 5:デカルト空間の速度予測フィルターを使用、NLF_MMF_COMB。
関節空間のフィルターは関節運動とデカルト運動の両方に有効です。デカルト空間のフィルターはデカルト運動のみに有効です。
呼び出し方法:
- SDKを介して呼び出す;
- Pythonスクリプトで実行する。
一次ローパスフィルター(LPF_1ST)
一次ローパスフィルターを使用するには、カットオフ周波数LPF_CUTOFF_FREQを設定するだけです。LPF_CUTOFF_FREQが大きいほど精度が高くなりますが、滑らかさが低下します。LPF_CUTOFF_FREQが小さいほど精度が低くなりますが、滑らかさが向上します。

実機の測定結果によると、LPF_CUTOFF_FREQを0.1に設定すると動きは非常にスムーズですが、精度が悪く、動作が大きく歪み、正確な位置決めができません。パラメータを徐々に大きくすると、確かに精度が向上し、滑らかさが低下し、ぎくしゃく感が強まります。40以上に上げても明確な違いはありません。
したがって、正確な位置決めを特に必要とせず、滑らかさと安定性を重視する場合は、小さいパラメータを使用できます。逆に、精度を重視する場合は、より大きなパラメータを試すことができます。
三次非線形フィルター(NLF_JOINT)
三次非線形フィルターの本質は、最大ジャーク、加速度および速度制限に基づいて目標を追従するオンラインS字曲線プランナーです。
関節空間の三次非線形フィルターを使用する場合、次のパラメータを設定する必要があります:
NLF_MAX_VR:関節速度制限、単位 °/s。関節速度制限はフィルタープランニングの速度に関係し、設定値が大きいほど速度が速くなります。
NLF_MAX_AR:関節加速度制限、単位 °/s2。
NLF_MAX_JR:関節のジャーク制限、単位 °/s³。
デフォルトパラメータ(NLF_MAX_VR=120; NLF_MAX_AR=180; NLF_MAX_JR=720)でのフィルタリング計画では、速度曲線が比較的滑らかになります。下図のように:

ジャーク、加速度、速度の制限値が大きいほど、目標追従能力は高くなりますが、ジャーク制限が大きすぎると速度の振動が発生し、その振幅も増加します。ジャーク制限は2000未満が望ましく、下図のように、ロボットの速度に絶え間ない振動が発生します:
例:
もしパラメータ値が次のようである場合:
- NLF_MAX_VR=120
- NLF_MAX_AR=720
- NLF_MAX_JR=5000
その場合の速度曲線は次の通りです:

実機での測定結果を見ると、このモードを使用した場合、動作過程の精度は全体的にあまり高くありません。パラメータが小さいほど精度は高くなり、パラメータが大きいほど精度は低下しますが、滑らかさは向上します。
三次非線形フィルタは、動作中の軌跡精度を重視しないが、滑らかさを重視する場面に適しています。
多段平均フィルタ(MMF_JOINT)
このタイプのフィルタを使用する場合、設定すべきパラメータは次の通りです:
MMF_MAX_BUF:平均フィルタのバッファサイズを示します。フィルタバッファを小さく設定しすぎる(< 3)と、計画の失敗を引き起こす可能性があります。バッファ値も大きすぎる(> 100)のは好ましくありません。制御器に負荷を与え、計画遅延を引き起こし、バッファ値が大きくなるほど遅延時間が長くなります。
MMF_KP:位置フィルタ係数
MMF_KV:速度フィルタ係数
MMF_KA:加速度フィルタ係数
これら3つのフィルタ係数は主要なパラメータであり、位置フィルタ係数KP、速度フィルタ係数KV、加速度フィルタ係数KAを調整することで、平滑化後の指令と元の指令との位置誤差を調整します。
パラメータが正常範囲内のときの速度曲線:

パラメータが正常範囲外のときの速度曲線:

実機での測定結果によれば、各フィルタ係数は負の値にできず、0~1の範囲内で設定する必要があります。そうでない場合、激しい振動、関節の過電流、コントローラの電源断などが発生する可能性があります。
合理的なパラメータ範囲で調整すれば、パラメータ間の効果に大きな差はなく、精度は比較的良好で応答も速いですが、滑らかさが不十分で、始動・停止時の衝撃が大きいという欠点があります。
非線形フィルタ(NLF_CART)(デカルト空間)
このフィルタの実現原理は、最大躍度に基づいて目標を追従するオンラインのS字カーブプランナーであり、servopにのみ適用されます。
このタイプのフィルタを使用する場合、設定すべきパラメータは次の通りです:
- NLF_MAX_VP: エンドの直線速度制限値(単位:mm/s)。
- NLF_MAX_AP:エンドの直線加速度制限値(単位:mm/s2)。
- NLF_MAX_JP:エンドの直線躍度制限値(単位:mm/s3)。
- NLF_MAX_VR:エンドの姿勢速度制限値(単位:°/s)。
- NLF_MAX_AR:エンドの姿勢加速度制限値(単位:°/s2)。
- NLF_MAX_JR:エンドの姿勢躍度制限値(単位:°/s3)。
例:
もしパラメータ値が次のようである場合:
- NLF_MAX_VP=1000
- NLF_MAX_AP=500
- NLF_MAX_JP=800
- NLF_MAX_VR=120
- NLF_MAX_AR=180
- NLF_MAX_JR=720
その場合の速度曲線は次の通りです:

三次非線形フィルタと同様に、速度・加速度・躍度の制限が大きいほど目標追従能力は高くなりますが、過大な制限値は速度変動をより激しくします。躍度は5000以下が望ましいです。
例:
もしパラメータ値が次のようである場合:
- NLF_MAX_VP=1000
- NLF_MAX_AP=3500
- NLF_MAX_JP=5000
- NLF_MAX_VR=120
- NLF_MAX_AR=180
- NLF_MAX_JR=720
その場合の速度曲線は次の通りです:

このモードは積分によって位置を算出するため、累積誤差が存在します。パラメータを大きく設定しすぎると、目標位置の上下で小さな動きを繰り返し、停止できない場合があります。
ユーザーは実際の状況に応じて適切なパラメータを選択する必要があります。
速度予見フィルタ(NLF_MMF_COMB)(デカルト空間)
このタイプのフィルタを使用する場合、設定すべきパラメータは次の通りです:
- MMF_KP:位置フィルタ係数。この係数を小さくするとフィルタ効果はより滑らかになりますが、位置精度が低下します。係数を大きくすると応答が速く精度も高くなりますが、動作の不安定や振動が発生する可能性があります。特に元データのノイズが大きい場合に顕著です。
- MMF_MAX_BUF:平均フィルタのバッファサイズを示します。バッファが大きいほど滑らかになりますが、精度損失が大きくなり、計画遅延時間も長くなります。
具体的なパラメータ設定は実際のデータ状況に応じて調整してください。
実機でのフィードバック
実機によるテスト結果から見ると、servojを実行する場合は一次ローパスフィルタが最も良好な効果を示し、servopを実行する場合は速度予見が比較的良い結果を示します。
説明:
緑:わずかな変化
黄色:中程度の変化
ピンク:激しい変化
| フィルター | パラメータ | ポイント数の変化(元は1352個) | 軌跡波形の変化 |
|---|---|---|---|
| 一次ローパスフィルター(LPF) | カットオフ周波数(cutoffFreq):0.2 | 1377(+25) | 変化が大きいが、波形は滑らか |
| カットオフ周波数(cutoffFreq):0.5 | 変化がやや大きく、波形は比較的滑らか | ||
| カットオフ周波数(cutoffFreq):0.8 | 変化が大きい | ||
| 非線形フィルター(NLF) | 速度上限値(max_vr):2 | 1356(+4) | 非常に大きく、元の波形を失い、軌跡は直線に近づく |
| 加速度上限値(max_ar):2 | |||
| 躍度上限値(max_jr):4 | |||
| 速度上限値(max_vr):10 | 1364(+12) | 非常に大きく、元の波形を失い、軌跡は斜線に近づく | |
| 加速度上限値(max_ar):10 | |||
| 躍度上限値(max_jr):20 | |||
| 速度上限値(max_vr):40 | 1369(+17) | 非常に大きく、元の波形を失い、軌跡は元の傾向のみ残る | |
| 加速度上限値(max_ar):40 | |||
| ジャーク上限値(max_jr):80 | |||
| 多段平均フィルタ(MMF) | バッファサイズ(max_buff):4 | 1371(+19) | 小さい |
| 位置フィルタ係数(kp):0.25 | |||
| 速度フィルタ係数(kv):0.25 | |||
| 加速度フィルタ係数(ka):0.25 | |||
| バッファサイズ(max_buff):4 | 1367(+15) | 小さい | |
| 位置フィルタ係数(kp):0.5 | |||
| 速度フィルタ係数(kv):0.5 | |||
| 加速度フィルタ係数(ka):0.5 | |||
| バッファサイズ(max_buff):4 | 1357(+5) | 小さい | |
| 位置フィルタ係数(kp):1 | |||
| 速度フィルタ係数(kv):1 | |||
| 加速度フィルタ係数(ka):1 | |||
| 速度先読みフィルタ(speed_foresight) | バッファサイズ(max_buff):2 | 1353(+1) | 小さい |
| 位置フィルタ係数(kp):0.5 | |||
| バッファサイズ(max_buff):4 | |||
| 位置フィルタ係数(kp):1 | |||
| バッファサイズ(max_buff):6 | 1354(+2) | ||
| 位置フィルタ係数(kp):2 |
