私がここで尋ねた質問の続きで:自律モードでの単純な離陸を伴うクアッドコプターの不安定性 ... (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つのモーター)のサンプル読み取り値を示します。
入力/出力に関して:
入力:加速度計+ジャイロの組み合わせによって取得されるロールとピッチの値(度単位)
出力:サーボライブラリのmotor.write()関数を使用して配信される、モーターのPWM値
解決
問題を解決しました。方法は次のとおりです。
問題の核心は、Arduinoプログラムの実装方法にありました。write()関数を使用してサーボ角度を更新していましたが、これは引数で整数ステップのみを受け入れます(または整数入力にのみ応答し、100と100.2は同じ結果を生成します)。私はそれをwriteMicroseconds()に変更したので、ヘリコプターはかなり安定したものになりました。
私は一方のモーターのRPMを加算し、もう一方のモーターを安定した値に保ちました。これを変更して、1つのモーターのRPMを増やし、反対側のモーターを減らしました。そのようなことで、水平方向の推力は変わらずに維持されます。これは、このことを垂直高度に保持しようとしているときに役立つかもしれません。
RPMを最大限界まで押し上げていたため、クアッドコプターはフルスロットルで制御を失い続けました。RPMが傾斜を感知したときにRPMが増加する余地はありませんでした。
私は、モーターの1つが他のモーターよりも本質的に弱いことを観察しました。理由はわかりません。そのモーターのPWM入力にオフセットをハードコーディングしました。
すべてのサポートに感謝します。
ソースコード:
興味のある方は、ここに私の必要最低限のPID実装のソースコードを示します。PIDソースコード
ハードウェアで自由にテストしてください。プロジェクトへの貢献は大歓迎です。