先の分析で示したPID制御信号について、D制御のギザギザがあるという話をした。それでも、P制御よりも先行した制御信号になっているはずだと書いた。その辺りを確かめてみよう。
以下の図は、PID信号をそれぞれに分解したものだ。
D信号は、Roll データの細かい信号を拾ってギザギザになっているが、平均すればP信号よりも先行する制御信号を出していることがわかる。すなわち、いわば、SINカーブに対して微分したCOSカーブである。先の分析で示したPID制御信号について、D制御のギザギザがあるという話をした。それでも、P制御よりも先行した制御信号になっているはずだと書いた。その辺りを確かめてみよう。
以下の図は、PID信号をそれぞれに分解したものだ。
D信号は、Roll データの細かい信号を拾ってギザギザになっているが、平均すればP信号よりも先行する制御信号を出していることがわかる。すなわち、いわば、SINカーブに対して微分したCOSカーブである。2号機を下ケ傍示ベースでテスト飛行させたが、当然のように(!)不成功だった。その様子は以下のようにyoutubeに上げてある。
この機体は、ジョイント部分が3Dプリンタで作成したプラスティックなので、完成機体とは言えないものだ。本来は、ジョイントはアルミで製作したい。が、そのためにはアルミ溶接をしなければならないが、その準備ができていないので暫定的にプラスティックで作成している。
プラスティックだが、パイプの接合という点ではある程度丈夫に作ったつもりだ。しかし、今回のテスト飛行でコントロールシステムを載せた中央のアルミ板を支える部分が壊れてしまった。設計上、弱過ぎた。アルミ板自体も450gくらいありやや重たいという問題もある。この脆弱性を克服するために、新しく設計し直したものを製作中だ。
この記事では、今回の初飛行のログを解析しておこうと思う。
初めに、ドローンの回転の方向を確認しておく。
ローターの番号、2から1の方向の軸をLとすると、Lに関して右回転をRollとし、4から3への軸をMとし、その右回転をPitchとしている。これに対して45度傾いた軸を設定することも可能だが、そうするとRollとPitchのデータにどのローターの回転が影響をしているのか、関係づけるのが複雑になるので、それが明快な図の設定にしている。
動画では、離陸してバランスを崩して着地、さらにもう一度飛行させている。以下では、最初の飛行を解析する。
動画では、右奥のローターから左手前のローターに向けた軸がL軸である。つまり、小屋側から母家側に向かう方向である。
RollとPitchの動きをデータで見ておく。
相対的に大きな変動をしているRollの動きを見ると、まずRollが負の方向へと傾き(A→B)、Rollが正の方向に反転し(B→C)その過程で、ローター1と4の辺が地面に接触した。その接触したのがC点である。その後、Rollは正の方向に大きく傾いて着地している。これは、ほぼ動画そのまま確認できるところだ。
この機体傾きの変化に対して、PID調整がどのよう関係しているのかを確かめてみよう。
まず初めに了解しなければならないことは、AからBにかけてRollが負の方向に傾いた原因は、不問にしておくことだ。1号機では、この点に強くこだわり、モーターの回転数のばらつきや機体の微妙な傾き、あるいは地面効果や壁面の機能など色々調べたりした。しかし、これはキリがない。どのような状況が発生しても、それに対して機体の修正能力を保つべきだし、PID制御は、潜在的にそれをできる可能性を持っているはずだからだ。だから、2号機は、機体の元々の揺らぎの原因をあまり追求しないことにしている。
図の上半分は、PID制御によって各モーターがスピード調整した分だけを取り出している。
AからBへのRollの負の方向への傾きに対して、モーター3が強化される方向に反応している。ずで細かい振動があるのは、D制御(微分制御)がある程度効くように設定しているので機体傾きの微妙な変動の反映結果である。微分制御は、このような細かい変動に意味あるのではなく、機体の揺れの大きな変動を先取りしてモーター速度に反映させることで、その点では機能しているはずである。
モーター3の強化の結果として、Rollの揺り戻しが生じているように見える。ただし、ここで、私がプロポをコントロールして、Rollを強めるように動かしたという事実も考慮しなければならない。プロポからのモーターへの制御信号を重ね合わせると、次のような図になる。
Rollの傾きが現れて、やや遅れて、モーター3を強め、モーター4を弱める信号が出ていることがわかる。プロポのこの信号の強さは、PIDの信号の強さの倍くらいある。
Rollの負の動きに対する二つの信号の効果を識別することはなかなか難しい。ただ、直感的には、BからCへの変化は、PIDによってもたらされ、DからEへの変化は、プロポによるものであるようだ。
動画と詳細に照らし合わせると、PIDによる姿勢安定化は一定程度、実現しているのではないかと思える。初期の機体の傾きだけは、離陸位置を変えるなどして問題を回避し、PIDの効果の程度を最後まで追う必要がある。プロポからのRollやPitchの信号を出さずに、PID信号の効果を確認すべきだ。それが結論。
PWM信号を作成した8チャンネルローパスフィルタに通すと、大まかな定電流信号に変わるが、微妙にリップルが含まれている。
図は、プロポのスティックの動きを変換したものだが、10Hz程度のリップルが規則的に表れている。RCローパスフィルタは、15KΩの抵抗と1μFのコンデンサで形成されている。そのカットオフ周波数は次の式で表される。
$$f_{c}=\frac{1}{2\pi RC}$$
値を式に入れるとカットオフ周波数は、ほぼ10Hzだ。カットオフ周波数の定義から10Hzでカットしている電圧は3dbであるから、これでは十分カットしていると言えないということなのではないかと思う。
Rを増加させてもいいのかもしれないが、フィルターの働きを弱めそうな気もするので、ここはCを増加させるのが妥当だろう。5μF、10μFを確かめたい。
PWMをアナログ直流信号に変換するためのプリント基盤を作成した。それについては、先の記事に詳しく書いておいた。
上のように部品を全て装着した。部品が80個近くあるので、半田付けは大変だった。一回目は、オペアンプの足の半田付けに失敗して、それまで装着した抵抗やコンデンサーが全てお釈迦になった。やはり、一挙にはんだ付けしようとせず、くぎりながら丁寧にやる必要があることを痛感した。
予定通りプロポからの信号に反応するか、機能を調べた。
iOSでは、他の方法もあるが、Visionframeworkは、いろんなことができるので、これでなんとか顔認識させようとここ2,3日没頭していた。ようやく、 こんな感じで、緑の枠で認識画像をリアルタイムで表示できるようになった。 (プログラムの全体は、最下段に掲げてある) 途中...