レースドローンのFC設定②ジャイロサンプリングやLooptimeやESCプロトコルとは?

LINEで送る
Pocket

前回までは、FCの書き込みや基本設定部分を公開しました。
今回は、ドローンに使っているセンサーで中核をなすGyroセンサーから、ESCを伝って、モーターへと回転指示命令をどのように出して、設定項目がどう影響するのかを見ていきたいと思います。

1.レースドローンのFC設定①ファームウェアの書き込み〜基本設定
2.レースドローンのFC設定②ジャイロサンプリングやLooptimeやESCプロトコルとは?
3.レースドローンのFC設定③PIDチューニング、RATE設定

FCからモーターまでの全体像をざっくり把握する

FC、ESC、モーターの全体像理解

FC、ESC、モーターの全体像理解

とても簡単に図を書きました。前回までに設定している内容である「4K/4K/32K」も参考に記載しています。またよく出てくるワードを織り込んでいますので、どこらへんのことを言っているのかをざっくり理解しておくのがいいと思います。それでは、設定ベースに見ていきましょう。

Gyro update frequency

Gyro Update Frequency

Gyro Update Frequency


ジャイロは角速度センサーのことで、機体の姿勢制御をする上で必須となるセンサーです。角速度と書いてあるようにどちらの確度にどのくらい傾いたかなどを検出するのが役目ですが、フライトコントローラーの最も重要な役割はこのジャイロセンサーを利用して、機体の姿勢状態を把握し、最適なモーター回転数を計算し続けるということができます。姿勢状態を誤検知してモーター回転を適当に調節したら飛びませんからね。

では、なぜ4kHzとかの数値を設定するのかですが、このジャイロセンサーによる姿勢状態の検知というのは、ドローンが飛んでいるかぎり常にチェックし続けなければなりません。とても当たり前のことなんですが、チェックし続ける、というのはシステムではよくループ処理などと呼びます。Looptimeという意味もこれでつかみやすくなるかな?

それでこのGyro update frequencyでは、どのくらいの間隔でチェックしにいくか、を設定します。つまり早くすれば(kHzの値を高く)するほど、早くチェックして更新(update)しますのでより精緻な情報が得られると言えそうです。しかしこの設定値の最大幅は、利用しているフライトコントローラのセンサーに依存します。例えばMPU6000spiのセンサーを利用している場合は8kHzが最大設定値です。Betaflight上では、FCに合わせて厳密なバリデーションチェックをしていないので、スペック以上の設定ができてしまうこともありますので注意です。

では、仮に32kHzまで設定できる場合、32kHzに設定したほうがいいのかというと必ずしもそういうわけではありません。例えば早いサイクルでチェックし続けるために、FCのCPUが高負荷になることがあります。パソコンの高負荷状態と同じく、他の機能が使いづらくなることも考えられます。また、より精緻に情報を取ろうとするあまりノイズを拾ってしまうことも考えられます。

よく、Gyro update frequencyを8Kとか大きな値にして、「アームができなくなる」現象がおきているひとも見かけます。考え方としては、高い値にすることで負荷があがるので、低い値に変えるか、他の機能をOFFにすることで全体的な負荷を下げる方向で調整するといいでしょう。

PID loop frequency

PID loop Frequency

PID loop Frequency


これは、上述のGyroの読み取りデータを元に、PID制御を行って機体の姿勢を調整する際の頻度の値で、値が大きければ、より多くのPID制御によるモーター回転の調整のための命令を行います。モーター回転と言っていますが、ドローンは結局はモーターの回転数の調整により姿勢を変化させることで、早く飛び、止まり、ターンしています。PID制御というのも難しいワードですが、姿勢(=モーター回転数)を旨いこと調整してくれる一つのアルゴリズムであり方法だと思えれば良いと思います。

もう一度、ここで設定する値の単位について見てみましょう。ここでは8kHz、4kHz、2kHz、1kHzなどのように設定していきますが、1kHzの時にかかる時間は1ms(ミリ秒)となります。1msはus(マイクロ秒)に置き換えると1000usです。2kHzの場合はより早くなるので、1msの半分の500usです。4Kは250us、8Kは125usと計算できます。

このPID looptimeの値はFCとESCの両方に依存します。というのも、FCよりもESCの方が早く計算してもらわないとFCからの指示に渋滞が起きてしまうので、ESCの方が速いことが望ましいです。ここでMultishotやOneshotなどが出てくるのですが、Oneshot125の125は「125us」のことであり、処理頻度としては125us(8K)-250us(4K)で動作しますのでマックスで4K(250us)までのlooptimeで実行できると考えられます。Multishotは5us(200Kと置き換え)-25us(40Kと置き換え)の処理頻度なので32Kのlooptimeが設定可能だと読み替えられます。Multishotだと32Kいける!というのは、こういう意味なんですね。

なお、Gyroの値よりPID loopの値が大きくならないようにしておく必要がありますので、私は結果的に4K/4Kで設定しております。私が使っているボード(F3でMPU6000spi)は8Kが限度ですが、上述したように8KでもCPUが高負荷になり、アーム不可や設定画面がもっさりするので、4K/4Kにしています。使うジャイロセンサーやESCにより異なりますので、お使いのFCやESCの説明を見てみてください。

なお、Gyro update frequencyはPID loop frequencyより同等以上の値にしておく必要があります。

ESC/Motor protocol

ESCのプロトコル

ESCのプロトコル

説明が上述している内容と一部重複しますが復習と思ってみて下さい。

ESCにはMultishotや最近だとDshotなどプロトコルがいくつか存在します。2016年までメジャーだったのはOneshot125ですが、2017年はMultishotが大多数です。2018年にはDshotが主流になるのではないでしょうか。とりあえずここではアナログな処理をしているOneshot〜Multishotを中心に見ていきます。(Dshotは不安定な部分があるので私は当分利用見送りです)

上述の図にも書いたとおりですが、Oneshot125やMultishotなどによって計算速度が異なると認識していればいいかなと思います。

  • Oneshot125 : 125us-250us
  • Oneshot42 : 42us-83us
  • Multishot : 5us-25us

Oneshotのおしりについている125と42とかは、マイクロ秒のことを言っていたんですね。FCからの命令を処理してモーターに伝えられる間隔の早さ、を指していると私は考えています。なので、Oneshot125の場合は1回の処理命令で、250usかかる場合があるということです。

ここで、FC側のGyro update frequencyやPID loop frequencyの「4K」などの設定を思い出して下さい。4Kは「250us」と置き換えることができますが、ここでOneshot125の上限と一致します。

色んなサイトなどで、「Oneshot125は、4Kまでしか対応できない」と書いてある意味はこういうことです。対応できないというとおかしいですが、FC側の処理速度よりも、ESCの処理速度が低いと上流の処理がさばききれないですよね。そのためOneshot125の場合は、8K(125us)などを設定しても処理できない可能性があるので設定しない、と理解すれば設定にミスが減りそうです。

Motor PWM speed Separated from PID speed

この設定は、PID loop frequencyで設定した内容とモーターのPWMを同期的に処理するか否かであり、ONにすると非同期でPWM信号を処理します。つまり、PID loop frequencyが4Kで設定されている場合はそれに引きずられて4K=4000で処理されるということです。ここのスイッチをONにすることで、PWMの命令を非同期にサイクルを設定することが可能です。

設定例としては、上記のキャプチャのように「32000(=32K)」と設定します。

この説明はやや難しいのですが、FCよりもESCの計算速度が速いほうが望ましいと上述したのと同様にモーターがわの命令をESCよりも早くしておく、というのが私が設定している理由です。これにより、明確にスピードに差が出るか否かは賛否もある部分ですが、体感として変わっているので、私は変えたままです。

色々小難しいことを学びましたが、、、

このGyroやLooptimeやPWMのSeparate設定ですが、よく「この機体にどう設定したらいいですか?」と聞かれることがあります。私がいつも答えるのは、とりあえず「4K/4K/32K」にしておけばリソース的にも挙動としても特に問題ないと話しています。この4Kを8Kや32Kに変えた所で、その違いをわかるのは中々飛ばしこんでいる人じゃないとわからないと思いますし、何よりも、

そこ、気にする所じゃないです!!!!

その時間、Liftoffで練習してフリップマスターしたり、
実機を「ちゃんと飛ぶ設定」で飛ばして楽しんで練習するほうがよっぽどいいです。

もちろん、いろんな背景や仕組みを理解するのは重要ですし、これらの知識や考え方・捉え方は何かトラブルがあった時の問題の切り分けにとても便利です。少しでも理解が進めば幸いです!まぁ、私も意味を履き違えているところもあるかもしれませんので、そこはご了承ください。というかご指摘下さい。コメントに。

では、次は、みんなが気になるPID設定です!!!
これも先に結論いっておくけど、、、

そこ、デフォルトでいいですから!!!!

LINEで送る
Pocket

こちらもおすすめ!

コメントや質問・相談はお気軽にどうぞ!(承認してから反映しますので投稿後しばらくお待ちください。)

メールアドレスが公開されることはありません。