読者です 読者をやめる 読者になる 読者になる

きうまのふぉとらいふ

自由気ままな「ふぉとらいふ」を提供しています。Twitterをフォローしますと最新記事が通知されますのでぜひ!

【Pilotfly H2+SimpleBGC GUI】4K動画ロードマップ(その11)|PID制御ってなあに?

大好評につき(???)またもやPilotfly H2(ブラシレスジンバル)についてやっていきます。

「『拷問につき』の間違いだろ?」

とか言う苦情は一切受け付けませんよ。ええ。

この記事の文字数は、なんと7000文字ですってよ。

さぁ、興味なくてもたいらげなさい

 


f:id:kiumahb:20170307233424j:plain

今回はPID制御について説明してみようと思います。

「じっくり自分なりのパラメーターを作り上げたい」と考えてらっしゃる方に向けて、何かしらヒントになればと思います。

「仕組みや理屈はいいから、さっさと実用的なパラメーターにしたい」と言う方は、そういったパラメーターを公開してらっしゃる良心的な方のものを参考にしていただいたほうが効率的です。


PID制御とは

Proportional(比例)
Integral(積分)
Differential(微分)
Controller(制御)

の意味であります。

うん、さっぱり分からーん!

算数さえ怪しい僕に、微分積分とかを引き合いに出されても頭真っ白になるだけです。

僕なりのPID制御の解釈をまとめておきます。

予めお断りしておきますが、僕は専門家でも何でもない只の初心者なので、間違っている可能性は存分にあります。
ご自分でも、実感として確かめることをお勧めします。

PはPENTAXのP

うーん、今のところご縁のないカメラですね。
そんなことは置いといて、Pは瞬発力と言う解釈です。

Iは「I have a PEN」

いや、「I had a PEN」だ!
過去の失望は置いといて、Iは精度、誤差許容範囲と言う解釈です。

DはDistagonのD

今は無き盟友Distagon(touit 2.8/12)。売るんじゃなかったなぁ…マジで…。
後悔は置いといて、Dは抑止力と言う解釈です。


ブラシレスジンバルでのPID制御とは、これらの行動を組み合わせて、カメラの向きを一定に保つように補正することだと解釈しています。


例えば、とある人に水を入れた水槽を運んで欲しいと思い、水槽をその人に渡します。

渡された人、仮にマルチネスと名付けましょうか。
マルチネスは渡された水槽を…

振り回して筋トレを始めました。

いや待てと。

振り回すのではなく、これを運んで欲しいのだよ。

「ソレヲ、サキニ言ッテクダサーイヨ!」

軽くキレられました。

「アーラヨット!」

マルチネスは豪快に片手で持ち上げ、走りだしました。
水槽が激しく揺られ、バシャバシャと水が溢れ出ていく様は爽快です。

いや待てと。

床が水浸しじゃないか。
水が溢れたりしないように、水槽を揺らさず両手で持ってよ。

「ソーユウ事ハ、先ニ言ッテクレナケレバ困ッチャウナー」

マルチネスは我々自身ではないので、どうするかを伝えなければ思うように動いてはくれないのです。

それでもマルチネスは、ある程度の状況を察してくれますが、ブラシレスジンバルは意志を持っていないので、与えられた命令のみしか動作として反応してくれません。

しかし案ずることはありません。
大体の命令は、メーカーさんが前もって設定してくれています。
1から自分で教え込むわけではないので大丈夫。

ジンバルを制御する命令の中で、実際に我々が調整変更する項目は1割にも満たない範囲です。
丁度、マルチネスにどうやって水槽を運ぶのかを教えてあげるぐらいの事ですので、あまり難しく考える必要はありません。

ただ、その1割にも満たない項目の調整によってもたらされる結果は結構大きいのです。

パワー値は筋肉

PIDパラメーターの前にモーター設定のパワー値について少し触れさせて下さい。

モーター設定のパワー値は、PID動作の強さを決定するものだと解釈しています。

パワー値はソフト上での補足にもある通り、カメラを支える十分な数値にします。
これはなぜなのかを説明するまでもない内容ですが、念のためマルチネスで例えてみると、仮にマルチネスの体格が筋肉の少ないひ弱な体だった場合、水槽を持ち上げるのが精一杯で、歩く度に水槽がグラグラ揺れてしまいます。
それなりの筋肉がないと、水槽を揺らすことなく一定の向きを維持しながら歩行するのは難しいのです。

マッチョなマルチネスのように片手で持てるぐらいの余裕があれば、水槽を持って歩行することなど容易いことです。
水槽を持つのに十分な筋肉が備わっていることが前提で、その次の段階として水槽を揺らさない為にどうやって運ぶのかを考えることになるはずです。

なので、パワー数値はなるべく高く設定したいところです。
ただし、数値を最大値まで上げていくと、モーター温度が高くなり故障の原因にも繋がりますし、振動が激しくなり、安定もしにくくなるので注意が必要です。

PIDとモーターパワーの関係

PIDについて僕なりの解釈については上記で記した通りです。

P=瞬発力
I=精度
D=抑止力

PIDはこの3つの動作を組み合わせて、カメラの向きがズレないように補正する役割を持っています。

この3つの補正動作の内、PDに関してはパワー数値を上げることで効果が強くなります。
Iに関しては、現段階での実感として、位置精度をどれだけ高くするかの許容範囲を決めるもので、直接動作性を上げ下げするものではないと感じています。

そして、パワー数値を上げる時と同様に、PIDの数値を上げるにつれて振動が激しくなるなどジンバルの挙動が不安定になります。



それでは、前回の続きからはじめましょう。

前回は、ジンバルの初期位置でカメラの向きの水平を出しました。

ここで、さっそく訂正です。(笑)
カメラの初期位置水平出しは、別の方法で行います。
前回の方法でも水平出しは出来るのですが、正式には「calibration IMU」と言う項目で行います。
すっかり忘れていました。(汗)
申し訳ありません。

あと、申し訳ついでに、つい最近になってSimpleBGCのアップデートを行ったら、名称が英語表記になってたり、項目が違うタブの所に移ってたりしています。
記事中の設定画面は新旧のバージョンが混在しているので混乱させてしまうようでしたらごめんなさい。


気を取り直して

その後、実際に歩きながら撮影してみましたか?

満足と言えないまでも、特に異音や大きな振動もなく撮影できたのであれば、その設定を元に調整していきましょう。


PIDコントローラー設定値を変更することで起こる変化

まず、「フォローモード」タブでPITCHとROLLのフォローを切り、ロックします。
これにより、ジンバルを傾けてもカメラが地上に対して常に水平な状態を維持するようになります。
この状態で撮影することが多くなるかと思います。
f:id:kiumahb:20170307224155p:plain



それでは、PITCHのPIDコントローラー数値とモーター設定のパワー数値を変更していきましょう。
変更したら「書き込み」をして、カメラや各軸アームを指先で叩いて反応をみてみましょう。

今回はPITCHの変更ですので、レンズの先端あたり、レンズフードを叩いて反応を見てみます。
叩いて反応を見るのは、叩くことでカメラを維持している状態をわざと崩して動作の挙動を見るためです。

P:1 I:0.01 D:1 パワー:1

f:id:kiumahb:20170307224157p:plain
f:id:kiumahb:20170307224156p:plain


PIDtest 2017 0307 Part1

電源offとさほど変わらないですね。
レンズ先端を叩いた分だけ動きます。


P:1 I:0.01 D:1 パワー:50

f:id:kiumahb:20170307224158p:plain


PIDtest 2017 0307 Part2

生命が宿ったように蠢くようになりました。


P:30 I:0.01 D:1 パワー:50

f:id:kiumahb:20170307224159p:plain


PIDtest 2017 0307 Part3

起動開始すると、カメラの前後方向が傾き、頷くように上下します。

動画の状況を説明します。
ジンバルは「書き込み」をされると一旦モーター電源が切れたあと再起動して、起動開始前の状態から初期位置の体勢をとろうとします。

モーターを回転させ、初期位置を目掛けてカメラの向きを水平にしようとするのですが、初期位置より行き過ぎてしまうのです。
行き過ぎてしまったので、再び初期位置へ移動するためモーターを逆回転させ戻ろうとするのですが、今度は戻り過ぎてしまいます。
そしてまた初期位置へ移動して行き過ぎるを繰り返し(リトライ)ているわけです。

Pは瞬発力なので、ズレた向きを早く直そうとする動作なのですが、数値を上げるほど動きが早くなると同時に、勢い余って目標より行き過ぎるようになります。


P:30 I:0.01 D:10 パワー:50

f:id:kiumahb:20170307224200p:plain


PIDtest 2017 0307 Part4

頷く回数が減りました。
叩くと再び頷きます。
Dは抑止力なので、Pの勢いを抑制してブレーキをかけます。
Dの数値が1だった時にくらべて上下する回数が減ったのは、P動作の惰性を抑えることで、例え行き過ぎたとしても、より近い目標位置付近で止まれるようになったからです。

また、P動作はモーター軸を起点に現在地から目標位置までの角度を計算して、どれだけの勢いで動作するかを決めている(鈍角なら強く、鋭角なら弱く)とすれば、1回目の移動よりも2回目が、2回目の移動より3回目の移動が、と言う具合に徐々に目標位置に近くなっていきます。

これが、D動作がない場合だと、P動作によって起こる行き過ぎを抑えることができず、大ざっぱに言えばリトライを永遠に繰り返し続けて、目標位置にいつまで経ってもたどり着けないのです。


P:30 I:0.01 D:30 パワー:50

f:id:kiumahb:20170307224201p:plain


PIDtest 2017 0307 Part5

起動開始直後に頷かなくなりました。
DはPの勢いを抑制出来る十分な数値である必要があります。
抑止力が少ないと、Pの勢いを目標位置までに止められず、カメラが水平からズレそうになる度に頷くようになります。
恐らく、Pの数値を高くするにつれて、Dの数値をその2倍3倍の数値にしてやらないと十分に抑制できなくなります。
なので、Dの数値は基本的にPの数値より大きくなるはずです。


P:30 I:0.1 D:30 パワー:50

f:id:kiumahb:20170307224202p:plain


PIDtest 2017 0307 Part6

再び頷くようになりました。
Iは誤差(許容範囲)なので、数値を高くするほど目標位置に対する精度が高くなります。
一見、精度を上げたほうが良さそうなのですが、実際には目標に対する誤差許容範囲内の位置になるまで補正動作を繰り返すこととなります。
この場合では、予め設定されたカメラが水平となる目標位置に対して、誤差許容範囲(Iに設定した数値)に収まるまで、PITCH軸の回転動作を繰り返すのです。


P:30 I:1 D:30 パワー:100

f:id:kiumahb:20170307224203p:plain


PIDtest 2017 0307 Part7

頷く回数が増えました。
Iはどのくらいの数値が適当かは分かりませんが、現段階での実感として数値が高過ぎるとリトライが増え、振動する機会が多くなります。

だいたいの性質を理解していただけたでしょうか。
お持ちのカメラや個体差にもよるので、同じ挙動となるとはかぎりませんが、数値を置き換えてみると大体同じようになると思います。

これらを踏まえて応用問題です。

Pを1にしてDを30にした場合、ジンバルはどのような反応をするでしょうか?

ポイントとしては、D動作がP動作より力が大きくなると言うことは、P動作による移動は目標位置を通り過ぎるまでもなく届かないくらい勢いが抑制されるはずです。

どんな反応になるか想像できましたか?

そうです!

目標位置に達するまで、止まっては移動してを何度も繰り返すのです。

P動作が働いたらD動作が働きます。
この場合、D動作の方が大きいのですから、移動したらすぐ止まると言うわけです。

まあ、論より証拠ですので、実際に見てみましょう。


P:1 I:0.01 D:30 パワー:50

f:id:kiumahb:20170307224204p:plain


PIDtest 2017 0307 Part8

あれ!?

え!?

上下動作がとーまぁらーなぁいーーー?…。

な…なぜだあああ!!


今回は…ここまで…(白目)

次はねー…えっとねー…続きを…やる…かもしれないし…

そこら辺はアレだ。

うんうん。

今回説明したPIDコントローラー設定ですが、設定値の調整についてのお薦めは、初期設定に不都合がなければそれをもとに探ってみて下さい。
恐らく、初期設定はかなり緩い設定になっていると思うので、緩い設定値から徐々に硬い設定値にしていくと。

徐々に硬くしていくと、その内に問題が出てくるかと思います。
そこら辺は次回でアレです。

あと、他の項目に関しても構ってみたい場合は、事前に調べてからにした方が良いですよ。
構っちゃ駄目なやつを変更したら一発で鉄くずになるみたいなので。

それでは健闘を祈ります!



ご観覧ありがとうございました。
ほんならまただわ!