クアッドコプターPIDチューニング


13

私がここで尋ねた質問の続きで:自律モードでの単純な離陸を伴うクアッドコプターの不安定性 ... (3DRoboticsのフレームを使用しています)

制御システム全体を2つのPIDブロックにまとめました。1つはロールを制御し、もう1つはピッチを制御します(ヨーとその他すべて...後で考えます)。

このセットアップは、自由に回転するビームで構成されるリグでテストしています。クアッドローターの2本のアームを縛りました。他の2つは自由に移動できます。そのため、実際には一度に1つの自由度(ロールまたはピッチ)をテストしています。

以下の画像を確認してください。ここで、A、Bは、セットアップが取り付けられている自由に回転するビームを示しています。 ここに画像の説明を入力してください

PおよびDパラメーターを慎重に調整することで、約30秒の持続的な飛行を達成することができました。

しかし、「持続」とは、ドローンが片側に倒れないテストを意味します。安定した飛行はまだ見えないところではなく、30秒以上の飛行も非常に困難に見えます。最初からぐらつきます。20〜25秒になると、片側に傾き始めます。30秒以内に、許容範囲を超えて片側に傾きました。すぐに、私はそれが逆さまに休むのを見つけます

PIDコード自体に関しては、ジャイロ+加速度計データの「相補フィルター」から比例誤差を計算しています。積分項はゼロに設定されます。P項は約0.39になり、D項は0.0012になります。(私はArduino PIDライブラリを意図的に使用していません。ここに実装された自分のPIDの1つを取得したいだけです。

動作を確認したい場合は、このビデオを確認してください。

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [はい、セットアップはかなり古いです!同意する。:)]

この段階で安定性を改善するために何ができるか教えてください。

@Ian:セットアップで行った多くのテストのうち、シリアルモニターからの読み取り値を使用して、いくつかのテストのグラフをプロットしました。以下に、Roll vs 'Motor1&Motor2-PWM input'(ロールを制御する2つのモーター)のサンプル読み取り値を示します。

ロールvsモーターPWM入力

入力/出力に関して:

入力:加速度計+ジャイロの組み合わせによって取得されるロールとピッチの値(度単位)

出力:サーボライブラリのmotor.write()関数を使用して配信される、モーターのPWM値


解決

問題を解決しました。方法は次のとおりです。

  1. 問題の核心は、Arduinoプログラムの実装方法にありました。write()関数を使用してサーボ角度を更新していましたが、これは引数で整数ステップのみを受け入れます(または整数入力にのみ応答し、100と100.2は同じ結果を生成します)。私はそれをwriteMicroseconds()に変更したので、ヘリコプターはかなり安定したものになりました。

  2. 私は一方のモーターのRPMを加算し、もう一方のモーターを安定した値に保ちました。これを変更して、1つのモーターのRPMを増やし、反対側のモーターを減らしました。そのようなことで、水平方向の推力は変わらずに維持されます。これは、このことを垂直高度に保持しようとしているときに役立つかもしれません。

  3. RPMを最大限界まで押し上げていたため、クアッドコプターはフルスロットルで制御を失い続けました。RPMが傾斜を感知したときにRPMが増加する余地はありませんでした。

  4. 私は、モーターの1つが他のモーターよりも本質的に弱いことを観察しました。理由はわかりません。そのモーターのPWM入力にオフセットをハードコーディングしました。

すべてのサポートに感謝します。


ソースコード:

興味のある方は、ここに私の必要最低限​​のPID実装のソースコードを示します。PIDソースコード

ハードウェアで自由にテストしてください。プロジェクトへの貢献は大歓迎です。


1
ループの入力と出力は何ですか?
ガイサートン14年

@GuySirton:私の質問を更新しました
メッツバーグ14年

モーターコマンドのフラットセクションとは何ですか?何かが飽和しているように見えます。連続関数のように変更をロールしますが、コマンドは非常に急に見えます。また、ロール入力が同じ範囲のように見えるままである間に、両方のモーターPWMコマンドがドリフトするのはなぜですか?ところで、おおよそのタイムスケールは何ですか?
ガイサートン14年

1
30秒後に制御を失った理由は、おそらく両方のコマンドが上にドリフトしていることに関係しています。コマンド間の違いを制御しようとしていると思いますが、それらがドリフトし続けることを許可することはできません。
ガイサートン14年

@GuySirton:彼らは上昇しておらず、ゼロから上向きに増加しているため、3/4秒以内に特定の定常状態に到達します。ただし、「30秒後に制御を失っている理由は、おそらく両方のコマンドがドリフトしていることに関係している」と言うとき、あなたは正しいと思います。この段階的な増分を使用しない場合、PWM入力を特定のレベル(上記の最大入力よりも低い値)に修正すると、30秒後に制御が失われるという問題はなくなります。
2014年

回答:


6
  1. 比例ゲインが高すぎるようです。
  2. システムを回転させるために他のモーターをロックしながら、一方のモーターのRPMを絶えず増加させているようです。最終的にそれらは飽和状態になり、制御を失うため、これは良い制御戦略ではありません。また、時間が長くなると、システムを命令する能力が低下します。したがって、システムのより良いモデルが必要です。
  3. #1と#2を扱う場合、システムはより安定しますが、制御帯域幅に満足できない場合があります。それに対処するには、システムの剛性を上げる必要があります。これには、物事のセンサー側と物事の制御側の遅れを取り除くことが含まれます。

3

私はこの質問を読むことから始めます:PIDループを調整するための良い戦略は何ですか?

推測しなければならないのであれば、無料のフィルターの構築方法に問題があると思います。クワッドコプターモーターをオフにして、フレームを前後に傾けて、報告されるロール/ピッチ値が実際に正確かどうかを確認する必要があります。

私には、加速度計からの入力とフィルターの出力との間に遅延があるように見えます-振動は、入力データに対する遅い反応によって説明できます。最終的な反転は、時間の経過とともに蓄積する可能性のある統合エラーのように見えます-つまり、クワッドコプターが横になっている間、実際に水平にホバリングしていると考えています。

(更新)グラフに関して、モーター速度が(バランスを保つのではなく)増加し続けるという事実は、どこかにエラーがあることを意味します。おそらく、Integral用語は無制限に増加しているため、妥当な最大値を指定する必要があります。


前後に傾けるとき、ロール値で質問を更新しました。最大PWM入力を下げることで、最終的な反転を解決しました。非常に高いRPMでは補正値が機能しないようです。高回転で作業するときは、手で簡単にリグを回すことができます。より低いRPMでは、かなりの抵抗を感じ、クワッドコプターは元の位置に振動するようです(これは良いと思います)。したがって、「裏返し」の問題は、おそらくRPMを下げることで解決されます(ドローンがまったく離陸するかどうかわからない、そうすることを望みます)。発振の問題はまだ残っています。
メッツバーグ14年

35±90

まあ、グラフはビデオに示されているテスト用ではありません。前述のように、グラフはこのセットアップで行った多くのテストの1つからのものであり、この特定のケースがどのように見えたか正確には思い出せません。グラフは、入力と出力の応答がどのように動作するかを示すためのものです。また、入力と出力の間に大きな差がないことを確認したかったです(ループが150+ Hzで実行されている場合)。ビデオとグラフを一致させることはあまり意味がありません。ビデオにテスト用の正確なデータセットがありません。
メッツバーグ14年

グラフがちょっと誤解を招くので、ごめんなさい。グラフをより正確なものに更新してみます。実際、シリアルポートからデータをプロットしていたので、このグラフを作成したときに、Arduinoボードはラップトップに接続されていました。一定の振動の後、手動で振動に介入して減速させる必要がありました。そのため、実際には90度前後で-5度に落ち着きます。後でより正確なグラフを更新してみます。
メッツバーグ14年

グラフからわかるもう1つのことは、組み合わせた推力が常に増加していることです。それは間違っているようです。
イアン

1

さて、ここでいくつかのことが起こっている可能性があります...

1)報告された角度は正しいですか?うるさい?手動でクワッドを傾けて、出てくる値を監視することで、簡単に確認できます。

2)独自のPID実装にはバグがあります。信頼できる実装を使用して、コードを確認できます。

3)小道具、モーターの取り付け方が間違っています。

4)...


1)報告された角度を傾けて確認しましたが、ほとんど正しいですが、明らかにうるさいです。2)非常に可能性が高い...実際には、それを完全に要約すると思います:P 3)あまり可能性がありません、時計回りに2つ、反時計回りに2つ...小道具を複数回チェックしました+このタイプのエラーは制御できないほどの大きなエラーが発生しています。4)....
メッツバーグ14年

4)... PIDを間違って調整すると、PIDがまったくなかった場合よりも事態が悪化する可能性があります。
dm76 14年

ええ、私は今それを見る。明日はそれに取り組みます。私の最初の計画は信頼できるPIDライブラリを使用することであり、2番目はPIDの出力をPWM信号からroll.pitch修正に変更することです。
メッツバーグ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.