ドローン(クアッドコプター)の姿勢制御プログラムの改良とPIDゲインのチューニングをいろいろ試しているのですが、テストフライトしながら調整しているとなかなか時間が掛かって埒が明きません。フライトしながらだと何が効いているのかもよくわからないですし、クラッシュも怖いです。
ということで機体を吊り下げて確認・調整することにしました。
(これまでのドローン製作記録はこちらに纏めていってます。)
▼ある程度調整後の動画▼
動画前半のアルゴリズムは「角速度のPID制御」です。後半は「角速度のPID制御ループ」の外側に「角度のP制御」を追加してます。
「角速度のPID制御」ではコントローラーのスティック操作で機体が傾き、その傾きを維持するようにしてます。(角速度が発生しないように制御されます)
動画後半はその外側に「角度のP制御」を追加して、常に「角度」を維持するようにしてます。スティック位置(角度)に合わせて機体が傾きます。スティックがニュートラルにある場合は常に水平になるように制御してます。
まだゲイン調整がしっかりできていないためピタッと決まってませんが、ゲインは今後もう少し調整したいと思います。
角度は最初「PI制御」で試していたのですが、なぜか機体が暴れてなかなかゲイン調整がうまくいかなかったです。「P」制御にしたところ動画のような状態になりました。
それなりの制御ができるようになってきたので少しずつ制御アルゴリズムを紹介していきたいと思います。
コメント
はじめまして。参考にさせて頂いております。pidについての質問ですが、なぜ、角速度を制御するのでしょうか?直接、角度のpid制御では
問題ありますか?よろしくお願いいたします。
masaさん、はじめまして。
それほど制御工学は専門でないので確かなことはわからないですが、角度のPID制御でもできるのではないでしょうか。(試してないのでわかりませんが・・・。)ただ、直接角度制御すると応答が遅くなりそうな気もします。(適当ですみません。)
ありがとうござい。私は、角度でのpid係数の最適化にトライしていますが、ゆるい制御になっており、安定性にもかけています。角速度での制御をしてみたいと思いますが、これは、現時点での角度誤差を制御時間で除した角速度を目標値とし、現時点でのセンサーからの角速度を変化させるという考え方となりますでしょうか?よろしくお願いいたします。
角速度制御ですが、私も、角度誤差(偏差)を角速度の目標値としてPID制御をしています。
ただ、物理量を合わせるため??に角度偏差を「制御間隔で除する」と言われてるかと思いますが、除する必要は無いかと・・。どうせゲインで調整してしまいますので。
(認識済であればすみません。忘れてください)
ありがとうございます。つまり、角度誤差を見ながら、モーターへのパルス幅を調整するということで、角速度を指標には、されていないということですか?すいません、少し混乱しています。もし、可能でしたら、pid制御のコードを参照できる場所を教えていただくことは、可能ですか?
すみません。余計なこと書いて混乱させてしまいましたね。「目標となる角速度」を「角度誤差から決めている」でO.Kです。姿勢制御は角速度のPIDで行ってます。こちらのページの中ほどでイメージを紹介してます。(既にご覧になっていたらすみません)
オープンソースとなっているmultiwii(ここから)なども角速度制御してたかと思います。少々難解ですが・・・。
どうもありがとうございます。勉強させて頂きたいと思います。