四元数を使用してPIDクワッドコプター安定化ループに供給する方法は?


9

クワッドコプターを作っています。PIDループを設定して、特定のオイラー角(ピッチとロール)で安定させます。ロールが90度(45度以上)に近づくと、問題が発生します。ジンバルロックに近づくと、値は意味をなさなくなります。45度の回転制限を超える、ループなどの複雑な操作を行うつもりです。

クォータニオンを使用してこの問題を解決するにはどうすればよいですか?(MPU-9150から四元数を取得します。)四元数の問題について多くの記事を読みましたが、それらはすべて3Dソフトウェアでの回転、および2つの回転ポイント間のトゥイーンについて話しています。私は虚数と行列を知らないので、これはほとんど意味がありません。


問題は解決しましたか?そうでない場合は、状況をお知らせください。そうでない場合は、回答の1つを受け入れてください。
marcv81 2014年

1
@ marcv81はい、それは今ではかなりうまく機能しています:)回答を受け入れることを思い出させてくれてありがとう:)
キムの友人

機能してうれしいです。自分のコードを
思いつい

回答:


6

quadcopterには、(とりわけ)姿勢推定アルゴリズムと制御アルゴリズムの2つの独立したアルゴリズムが含まれています。

姿勢推定アルゴリズムは、クワッドコプターの方向に関する情報(ロール、ピッチ、ヨー角)を計算します。

制御アルゴリズムは、クワッドコプターの向きがパイロット(またはオートパイロットソフトウェア)が期待するものと一致するようにモーターを駆動する役割を果たします。このアルゴリズムは、(姿勢推定アルゴリズムから)推定されたクワッドコプターの角度を読み取り、モーターの速度を変更して目的の角度に一致させることを試みます。PIDは、クワッドコプターに適した一般的な制御アルゴリズムです。

ジンバルロックは、姿勢推定アルゴリズムで発生する可能性のある現象です。制御アルゴリズムとは何の関係もありません。そのため、ジンバルロックをテストするためにESC、モーター、またはプロペラは必要ありません。コードを変更して、ロール、ピッチ、およびヨーの角度を表示し、クワッドコプターを手動で動かすときに正しい値が計算されることをテストできます。これは、クワッドコプターをコンピューターにテザリングしたり、Bluetoothを使用したり、プラットフォームに応じて他の方法を使用したりできる場合があります。

角度が正しく計算されていれば、四元数を気にする必要はありません。正しく計算されない場合、四元数助けます。姿勢推定アルゴリズムは、制御アルゴリズムが使用する3つの角度を出力しますが、四元数や3x3行列などの異なる内部表現を使用する場合があります。その場合でも、姿勢情報を角度に変換して、使用可能なデータを制御アルゴリズムに提供します。一般的に言えば、四元数は直感的ではありませんが、計算効率は高くなります。これにより、Arduinoなどの低速プラットフォームに適しています。行列または角度は、より高速なハードウェアのためのより簡単な選択かもしれません。どちらかのソリューションについて詳しく説明する必要がある場合はお知らせください。ただし、クォータニオンを実装する必要があるとは思えないため、この段階で詳細を説明するのは時期尚早です。

最後に、角度が正しく計算されている場合、クアドコプターループを作成する方法は、角度ではなく角速度を制御することです。スティックがクワッドコプターの角度を表す場合、フルループを実行する方法はありません。スティックの位置をクアッドコプターループとして視覚化してみてください。その理由を理解する必要があります。ただし、スティックが角速度を制御する場合は、ループの速度を制御できます。

あなたのプロジェクトで頑張ってください!

注:簡単にするために、姿勢推定アルゴリズムと制御アルゴリズムの両方でデータを行列または四元数として操作する理論的なオプションについては触れていません。そのようなアルゴリズムを実装するクワッドコプターを見たことがありません。


完全な回答ありがとうございます!InvenSenseで働いている人は、ほとんどのアプリケーションでは、四元数はオイラー角よりも簡単で優れていると言いました。テザリングされたデータを見ると、これが発生しそうなときにジンバルロックを停止するように1つの軸を修正することが可能のようです。
キムの友人

1
オイラー角は、向きの内部表現には適していません。視覚化は簡単ですが、ジンバルロックを回避するために正しく操作するのは非常に困難です。クォータニオンはジンバルロックにぶつからないためより優れていますが、視覚化するのは困難です。行列は、四元数よりも視覚化がいくらか簡単ですが、プラットフォームが遅い場合はそれほど効率的ではありません。私のクワッドコプターは内部でクォータニオンを使用しますが、使用するPIDのオイラー角に変換します。
marcv81 2014

3

まず、戻ってコードを確認する必要があると思います。ジンバルロックが問題になるのは、90度に非常に近い(数度以内)場合のみです。45度で奇妙な動作が見られる場合は、他の原因が原因です。

あなたの質問については、四元数は複雑な動作をして直感的でない結果をもたらすため、通常、基本的なPID制御では直接使用されません。通常、それらはオイラー角に変換されてから通常のPIDコントローラーで使用されるか、特別な非線形コントローラーがそれらを使用するように設計されています。

ループ操作では、PIDは一般的にあまり良いコントローラーではないことに注意してください。ホバーの近くでうまく機能するゲインは、大きな角度では機能しなくなります。通常、誰かがループをしたいとき、彼らは「オープンループ」に行きます。つまり、彼らは制御下で操縦を開始し、特定の角度を通過したら、ループが完了するまで、一連の固定コマンドを適用します。使用する固定された一連のコマンドを理解するのは難しい部分であり、強化学習をよく使用します(試行錯誤を行う正式な方法のようなものです)。


あなたの洞察をありがとう。ベアメタルプログラミングはまったくの初心者です。私は高レベルのプログラミングしか行っていません。私は物理学と数学にも非常に興味がありますが、高校を卒業したばかりなので、まだあまり詳しくはありません...
キムの友達

私はこれを友人と作っています。私たちは自分たちでPIDループを「発明」しました。「正しい」答えに慣れているため、これが私たちの問題を解決するための一般的な方法であることを知らずにそれを使用することは非常に困難でした。そして、ウィキペディアでPIDループを発見したとき、私たちが発明したPIDループは「承認」されました。
キムの友人

これが作業プロジェクトで一般的にどのように行われるかについてのあなたの洞察に本当に感謝しています。Serial Chartcode.google.com/p/serialchart)のグラフを見ると、私が話している奇妙な動作が明らかになりました。入力は、I2CDevLib(MPU-9150)からの直接オイラー出力です。もう少しテストします。「エラー」は、私自身の不正確な動きが原因であった可能性があります。
キムの友人14

ロールは青い線です。赤はヨー、緑はピッチ、青はロールです。ご覧のとおり、問題は約pi / 4から始まり、外側に向かっています。これはI2CDevLibの問題ですか、それともこのように「想定」されていますか?screencast.com/t/svPV3C8Bジャイロスコープをロール軸を中心に360度回転させています。
キムの友人

AeroQuadは、空中に放り込まれた後でも安定することができます。これは、最初にロール、次にピッチ、次にヨーを処理するためですか?
キムの友人14

3

この論文は、Emil FreskとGeorge Nikolakopoulosによるクワッドローターの完全な四元数ベースの姿勢制御で、あなたが達成しようとしていることを示しています。

要約 —この記事の目的は、クワッドローターの姿勢制御問題のための新しい四元数ベースの制御方式を提示することです。クォータニオンはランク4の超複素数であり、オイラー角で剛体ダイナミクスを表すとき、または方向余弦行列(DCM)で微分方程式を結合するときの複雑さを表すときに固有の幾何学的特異性を回避するために使用できます。提示されたアプローチでは、クワッドローターの姿勢モデルと提案された非線形比例二乗(P 2)制御アルゴリズムは、オイラーの角度空間またはDCMでの変換や計算なしに、四元数空間で実装されています。提案された新しいクォータニオンベースのコントローラーの有効性が拡張シミュレーション結果によって評価されている間、記事全体を通して、提案された新しいアプローチのメリットが分析および議論されています。


2
関連する論文@ jgkim2020をありがとう。しかし、それについて詳しく説明できますか?おそらく、この論文の調査結果を要約していますか?(結局、リンクが古くなる可能性があります)。また、回答方法
ベン

1
ベンに同意します。リンクの死は通常しばらくすると発生するため、この論文の要約はすばらしいと思います。
Greenonline 2016

2

このMOOC無料コース、TUMxのAUTONAVxへようこそ!飛行ロボットの自律ナビゲーションが役立ちます。それはカバーします:

  • 学習理論
  • 刺激装置と実際のハードウェアの両方で実行されるエクササイズQuadcoptorプログラミング

リンクが機能しません。
キムの友人

あなたがログインしている場合、リンクが動作します。
キムの友人の

ビデオ1.4には多くのクワッドローターのデモがあり、素晴らしいアクションを実行します。このトピックに興味を持っていただければ幸いです。
14年

FreeIMUソフトウェアをチェックできます。これは、a)複数のセンサー(レートジャイロ、コンパス、加速度計)からの融合データを提供し、チップから生データを単に読み取るよりも、より安定した低ドリフトで正確なデータを提供しますb)ピッチを含む複数の出力フォーマットを提供します。視覚化、理解、使用する方が簡単かもしれません。
14年

ご協力ありがとうございました。ジャイロスコープと加速度計の両方のオンボードDMP(センサーフュージョン)を備えたMPU-9150を使用しています。これと磁力計の融合は手動で行う必要があります。
キムの友人
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.