CleanFlight設定 ~てか用語メモ ~

13 件のコメント


ドローンレーサー LKTR120 を購入したが、いい感じで飛ばすためにはチューニングが必要。
人気のFlight Controller である Naze32 は CleanFlight というChromeアプリを利用して設定する。

まずは今回調べたメモ。用語集チック。。

フライトコントローラ(FC/Flight Controller)

フライトコントローラはドローンの心臓部となる基板。
現状はMultiWii※1から派生したものが中心になってる。自作ドローンに興味を持つと名前を聞くようになる Naze32、CC3D や、OpenPilot系のFCもMultiWiiベースみたい。

※1 任天堂のWiiコントローラのセンサーを抜き出して、Arduinoでコントロールしようとして始まったらしい。

どのFCでも基本的にはジャイロ&アクセラレーターの6軸センサーが搭載されているが、高級なFCになると気圧センサー(barometer)や地軸センサー(magnet/compass)、GPSなどの自律系センサーが搭載されてたり、OSD(OnScreenDisplay: 映像に文字レイヤを重ねて、ドローンの状態を表示するためのもの)も実装してたりの違いがあったり、CPU性能やセンサー精度が異なったりする。
あと、使える設定ソフト(後述)が異なるのも大きいかも。

で、ドローンレーサー用では日本製 Naze32 Acro(gyro+acc only) が主流っぽい。こないだ購入したLKTR120もNaze32ベース。

暫くはここを広げずにNaze32一択で行くことにする。

※ 但し、Naze32は F1クラス。CPU性能と、UARTが増えることが魅力なF4クラスのOpenPilot Revoは気になるので入手だけしとく。。

フライトコントローラの設定ソフトウェア

Naze32には純正のBaseFlightがあるが、そこから派生したCleanFlightがアップデートもマメにあり、主流になってきているみたい。
暫くはここも広げずにCleanFlight一択で行くことにする。

ちなみにOpenPilotはOpenPilot GCS(Ground Controll Station)を使うようだ。

フライトモード

Acro(Rate)モード

標準はジャイロセンサーのみを利用したAcro(Rate)モード(加速度センサーすら使わない)。
他のモードと異なり、スティックを倒すと回転し続け、離しても回転角が戻らない。

めちゃめちゃ難易度が高い気がするが、上級者的にはこっちのが扱いやすいみたい。
加速度センサーや気圧センサーなどのセンサー類が増えると、操作パラメータが多くなるので、慣れればこのモードが最も安定するらしい。
最終的にはこれをマスターする必要があるが、暫くはクラッシュしまくってまともに飛ばせない気が。。

Angleモード

Angle 安定飛行用。旧Hubsan X4でいうと、スタンダードモードに近い。
ジャイロに加え、加速度センサーを使って、水平を保つ動作をする。
フリップ不能。

Horizonモード

Acro と Angle との中間のモード。 旧Hubsan X4 のエキスパートモードに近い。
Angle はレガシーなモードで、Horizon は AcroモードとAngleモードの中間的な動きだそうだ。

Horizonだとプロポのスティックの稼働範囲がセンター付近であれば、Angleチックな動きだが、端っこのほうはAcroに近くなってフリップ可能みたい。
フリップの感度はLEVEL D値を高くすれば上がる。

Baro(Altitude)モード

ジャイロ+加速度+気圧センサーを使ったモード。恐らくHubsan X4 plusシリーズのように高度維持が可能になると思われる。

Magモード

ジャイロ+加速度+磁気センサー(コンパス)を使ったモード。これでヘッドレスが可能になるっぽい。HeadFreeモードとの違いはYawが効かない?

HeadFreeモード

Magモードと似てるが、Yawが効く?

GPS Return To Home モード(開発中/不安定)

ARMしたときの場所に戻ってくる。
Angle/Horizon/Altitudeモードと同時に使う。衛星を5つ以上捉えてないとダメ。

GPS Position Hold(開発中/不安定)

GPSを使ってポジションを維持する。このモードのON/OFFで位置はリセットされる。
Angle/Horizon/Altitudeモードと同時に使う。衛星を5つ以上捉えてないとダメ。

Airmode

bataflightから移植されたのか、現在のcleanflightでは利用可能。
スロットルが0位置でもコントロール可能になり、アクロバティック飛行に有効だとゆー。


PIDとPIDコントローラ

PID てのを最初に見たときは、「何かのIDか?」と思ったが、P(Proportional:釣り合った?)、I(Integral:完全な?)、D(Delivative:派生的な?)の頭文字。
この3つのパラメータをチューニングして、飛ばしやすいようにする。

但し、PIDコントローラなるものが存在し、その選択によってPIDの調整方法も異なるらしいし、上述したAcro/Angle/Horizonなどのモードによっても動きが変わりそう。ややこしや。

PIDコントローラ

PIDコントローラとしては下記6つ。
0~2以外は実績が少なそうで、使うとしたら、0 or 2 の2択っぽい。

0(MultiWii)は RC rate(後述) の影響を受けるマイナス面もありそうだが、デフォルト設定であり、LKTR120本家でも使ってる。
ただ、oldって書いてるのが微妙に気になる。

2(LuxFloat/旧名baseflight)は Naze32などの32bitFCに対応。
但し、現時点では Autotune に未対応らしい。

が、Autotuneを実施するには広い場所が必要っぽいので、とりあえず2のLuxFloat で設定を詰めていくことにする。
  • 0 : MultiWii(old)
  • 1 : Rewrite
  • 2 : LuxFloat(baseflight)
  • 3 : MultiWii23
  • 4 : MultiWiiHybrid
  • 5 : Harakiri
ここから下は徐々に編集予定。

PID

完全に無風/プロペラ気流も無関係/通信ノイズもゼロ/etc..という完璧な条件下であれば、

  プロポからの入力 = 機体の姿勢

となるが、そりゃ無理な話。

そのため、プロポからの入力による理想的な機体の状態と、センサーが認識した実際の機体の状態との 差異(エラー) が必ず発生する。
そのエラーを修正するために個々のモーター出力を調整し、理想的な機体の状態に近づけるのをFlight Controllerがやってくれてる。

ただ、どれくらいの量のエラーを、どれくらいの速さで回復するのかによって、飛行の滑らかさが変わってくるのだが、それをPID値によって調整する。

Custom Motor Mixing

PIDはPitch/Roll/Yaw軸ごとに独立に設定できるが、前後左右とも完全な対象型の機体であれば、Pitch/Rollを同時にチューニングしてもOKなのでラクちん。
ただ、いわゆるH型の、縦長な機体だったりする場合、PitchとRollのバランスが異なるため、Pitch/Rollのチューニングが独立になってしまう。
但し、機体の形状に応じた Custom Motor Mixing(モーター個別の出力割合の調整) をやっておけば、Pitch/Rollは同時に設定できる。

P : Propotional 

PIDチューニングのメインとなる値。

現在のエラー量(E)に比例して、出力を制御するための係数。

但し、P値を高くしすぎると、ちょっとしたエラーにも過敏に反応しすぎて振動を起こすようになる。

まずはI値、D値をゼロにして、ギリギリ振動しないP値を探すのがチューニングの定石ぽい。


I : Integral

エラー量の蓄積( E1/t1 + E2/t2 + ...)に応じて、出力を制御するための係数。

I値を高くすれば、蓄積されたエラーを早めに修正しようと動作するので、不規則な風や離陸時のグラウンドエフェクトの回避に有効だが、高すぎると目標値の前後を行き来する状態になって、低周期な「ゆれ」が発生する。
また、直前のスティックの傾きに追従するような効果があるため、急旋回や急停止の場合のリアクションが遅くなる副作用がある。

通常はデフォ値(Roll/Pitch = 30、Yaw = 45)で構わんみたい。


D : Delivative

D値はエラーの変化スピード( (Eb-Ea)/t )に応じて、出力を制御するための係数。

P値はエラー量に比例して動作するが、状況によってはその出力量を増減しないと目標値に到達できない場合がある。それを補うのがD値。

多くの場合に重要じゃないし、無視してOK。KK2のようなD値設定がないFCもあるくらい。

エラーがすぐに0に戻るようであれば、出力を弱めて調整しすぎを防ぐ。


D値はギクシャクな動きをスムーズにするために使われると書いてたり、
スティックに対する反応を早くすると書いてあったりでいまいち。。
IとDはようわからん。。


CleanFlightでの default

Name P I D
pitch 40 30 23
roll 40 30 23
p_yaw 85 45 0

  • 範囲は0-200
CLIでの設定値とGUIでの設定値は桁が異なるので注意


TPAとTPA BreakPoint

スロットルの出力に応じて、PID値を減少させるために使う。
典型的なのは、TPA BreakPoint = 1500、TPA = 50% みたいな感じ。

RCレート

ピッチ、ロールおよびヨー(全3軸の一つの値)の3軸の回転速度に対するスティック感度設定。
回転角の制限では無い。
回転角は、angleモードの場合に設定可能で、max_angle_inclination を使う (デフォ500=50.0度)

PIDコントローラ0、3、4、5 において、RCレートはPIDに影響を与える。
1、2ではPやDに影響を与えない。

個別にピッチ/ロール/ヨーレートを設定可能。

RCエキスポ

0%~100%で設定。
中央付近のスティック感度を減少させる。
中央付近が平坦なU字カーブのイメージ。エキスポ0%だとV曲線となる。

エキスポは、多くの場合、高いレートで使用し、センターに近いほど正確な制御を、エンドポイントでは積極的なアクロバット飛行ができる。

LOSクワッドでは、より高いロール/ピッチレートとより低いRCレートを推奨。
但し、FPVだと若干カクカクするかも。

スロットルミッドとスロットルエキスポ

スロットルについてもエキスポ曲線を設定し、センターに近いほど正確な制御を、エンドポイントでは急激な変化をつけられるようにできる。 スロットルミッドはそのエキスポ曲線の中心の設定。デフォルトではスティック中央になっているが、ちょうどホバリングできる位置をスロットルミッドに設定すべきであり、パワーウェイトレシオが2よりも高いなら下げるし、逆なら上げる。

他・混同しやすいパラメータ

min_command

disarm時にmax_checkより値が低い場合はこの値が使われる。
使うのはESCのキャリブレーションのとき?。デフォルト1000。

min_throttle

モーターを回す最低値。デフォ1150。

max_throttle

モーターを回す最大値。

ESCのキャリブレーション

CLIでやる

set min_command = 2000
save
set min_command = 1000
save

Motor タブでやる

  1. master スライダーを全開(フルスロットル)。
  2. リポを繋ぐ → キャリブレーションモードになる。♪beep♪
  3. master スライダーを全下げ。♪beep♪

13 件のコメント :

  1. 素晴らしい情報提供有難うございます。
    じつは、私もMicromotorのH Frame とScisky CFで制作中なのですが、DOSも判らない中ドツボにハマって苦しんでいます。
    何とか、ARMしホバしたら YAWがほとんど効かない状態です。 信号の範囲が狭いのかとJRプロボのトラベルアジャスタで最大1132<1500<1857までしましたがNGでした。
    ご迷惑でなければ、ご提案いただけないでしょうか?

    返信削除
    返信
    1. yoshiさん。はじめまして。
      コメントありがとうございます。

      YAWが効かないとのことですが、バインド後、
      CleanFlightの Receiverタブでは問題ないようにみえるのでしょうか?

      ちゃんと見てみないとわからないですが、全く動かないのであれば、
      プロポのChと、FCとのマッピングが正しくないような。。

      ただ、ARMできてるってことは、min_check/max_check の範囲は超えられてるのだろうし。。

      Receiver タブで思った通りの動作になっているのかと、
      他に動作上の問題がないか教えていただければ、
      自分自身の経験にもなりますし、私なりに原因は考えたいと
      おもいますので、よろしければご返信ください。

      ※ ただ期待はしないでくださいませ ^^;)

      削除
  2. yoshiです。
    やさしいお言葉に甘えさせていただきます。
    YAWに関しては、全く聞かないのではなく本当にゆっくり回り6畳弱の部屋ではぶつかってしまいます。
    Reciver tab と PIDの情報を出す前に以下が条件となっています。
    1.私はDOSの世界が全くわかりません。
    2.settingをしていて、やはりARMができず”天の声?”で以下コマンドを追加しています。 
    set min_check_ 1250
    set max_check_ 1700
    send
    3.Rollに関しては、送信機側で反転しています。

    Reciver データ(送信機側でトラベルアジャスタ使用せず)
    Roll 994 1500 2001
    pich 1169 1470 1719
    Yaw 1130 1498 1858
    Throttle 1098 1504 1899

    Reciverデーター(送信機トラベルアジャスタ使用%)
    Roll 1001 140% 1500 2002 136%
    Pich 1007 117% 1475 1997 130%
    Yaw 1130 150% 1500 1858 150%
    Thrototle 1000 124% 1468 2005 127%

    PID
    ・Defaultのまま
    ・Angle/Holizon のレベルとはなんですか?
    ・Rc rate はバンク角度を決めるのですか? YAW rateを上げる必要あり?
    ・TAP Break pointとは、Holizon Modeで1800にsetしたら1800以上でループに入ると言うこと?

    以上、他の質問をごちゃ混ぜになってしまいましたがご検討のほどよろしくお願いいたします。

    返信削除
    返信
    1. なるほど、YAWは効くことは効くんですね。
      てことは多分ですが、何かの不具合や設定ミスではなく、正常な状態かとおもいます。

      私も下記でsciskyのFCを使いましたが、YAWはスローな動きでした。
      https://go-gadgetgadget.blogspot.jp/2016/01/blog-post.html

      これを調整するとしたら、PID TuningタグでYaw rateを上げればよいと思います。

      > ・Angle/Holizon のレベルとはなんですか?
      → 姿勢を維持する強さですね。
      この2つのモードは機体を水平に保とうとしますが、そのチューニングです。

      > ・Rc rate はバンク角度を決めるのですか?
      >  YAW rateを上げる必要あり?

      → XXX rate は角度そのものではなく、角度を変えるスピードです。
      なので、YAW rate を調整すると旋回「スピード」が速くなります。

      ・TAP Break pointとは、Holizon Modeで1800にsetしたら1800以上でループに入ると言うこと?

      → ループに入るのではなく、PIDの効果が薄くなるという。。
      PIDは機体を正常な状態(水平とは限らない)に戻す力として働きます。
      ただ、状況によっては不要な抵抗としても働くので、
      スロットルを高くあげて飛行するときには、その機能を弱めたほうが
      飛ばしやすかったりするので、この設定があります。

      1800に設定した場合、
      yoshiさんの(トラベルアジャスタ使用後の)状態だと、
      1800~2005の範囲において、徐々にPIDの「効き」が悪くなるという感じです。

      ※ うーん、、わかりづらい。PIDは説明難しいです。。

      以上、私の認識としては↑のとおりです。
      ※ ただ、間違ってる認識の可能性もありますので参考までに。

      削除
    2. ご指導有難うございます。
      おかげさまで、YAW RATEを上げ解決しました。ANGLE/HOLIZON MODE素晴らしい制御性ですね! やはり、3DをするにはRATEでないとできないんでしょうかね?
      また、購入時に戻すのはどうしたら良いのでしょうか?

      削除
    3. yoshiさんこんばんは。
      うまくいったようで何よりです。

      3Dですが、フリップという意味なら、Angleモードはダメですが、Horizonモードならできますよ。
      Level D値を高くすれば、Rateモードに近くなるので。
      モーターを反転させて逆さに飛ばす意味であればまた違う話になりますが。

      また購入時(の設定)に戻すのであれば、cleanflightでファームウェアを入れ直せば設定は元に戻ります。

      削除
  3. 有難うございます、これで十分です。
    それから、今はモニターを補助程度に使っていますがゴーグルにした場合は慣れでしょうがどのような事注意すれば良いのでしょうか?
    お勧めの、ゴーグル教えていただけませんか?

    返信削除
    返信
    1. ゴーグルはあんまりわからないです。すみません。

      一応、FatShark Attitude V3を持ってますが、他のを使ったことがないし、
      何よりこれ自体も数えるほどしか使ってないので。


      実はゴーグルを使うことのメリットが、私にはわからないんですよ。。

      ゴーグルの液晶はホントに小さいので、ゴーグルをつけたら
      遠くにちっちゃい画面が見えるような感じになります。
      つまり、「没入感」には程遠く、VR-HMDで得られるような感覚はありません。

      また、モニターと違って、視点がFPVオンリーに限定されるため、
      機体の状態をすぐに目で確認できないのもデメリットな印象。。

      # デカすぎてえげつないサイズですが、没入感だとこういうタイプのがよいのかも。
      #
      # → http://www.banggood.com/Eachine-Goggles-One-5-Inch-5_8G-40CH-Raceband-HD-1080p-72-Degree-HDMI-FPV-Goggles-Video-Glasses-p-1053948.html?utmid=697
      # ※ ↑のURLを貼付けるためにBanggoodに行ったら、タイムセールやってますね。む、、↑買うかもしれませんw

      削除
  4. 有難うございます。
    年寄りには、モニターの方が良いかも???
    モニターも、価格で見てもピンキリで良く判らないですね!

    返信削除
    返信
    1. どうでしょう。。
      モニターもスペック以外の違いはわからないです。。

      あ、ゴーグルの大きなメリットをひとつ忘れてました。
      晴れた日にはサンシェイドがあってもモニターは見づらくなるので、ゴーグルのほうが見やすいです。

      削除
    2. はじめまして。 電気に疎い年よりです。  室内ドローン制作しようとがんばりましたが、F3 EVO Brush をcleanflightにて設定段階でつまずいております。
      T10Jとバインドはできて スティック操作はcleanflightに反映してるのですが、リポをつなぐと即モーターがまわり、スティック操作で反応しません。
        ぐぐってみてもわからずもう1週間そればかり考えております。どうかお助けくださいまし。 

      削除
    3. sakanayaさん、はじめまして。

      リポを接続してモーターがまわるのは、
      Configurationタブにて、MOTOR_STOPをONにすれば、抑制できると思います。

      あと、スティック操作が反映されないのは、モーターを動かすための、いわゆる「Arm」ができてないってことでしょうか。

      Armは
      ①スティック操作
      ②トグルスイッチへの割り当て
      の2種類の方法を設定できますが、
      ①のスティック操作でarmする場合だと、
      下記の記事に書いた方法で、min_checkとmax_checkの設定値を調整することで対処できると思います。

      https://go-gadgetgadget.blogspot.jp/2015/12/lktr120.html

      ②のトグルスイッチへの割り当てだと、modesタブで設定します。
      トグルスイッチのポジションによってARM/DISARMを切り替えすることになって、この設定をしてると、①のスティックでのARMはできなくなると思います。

      削除
  5. 皆さんはじめまして。横から失礼いたします。

    sakanayaさん、リポをつなぐとモーターが回りだす現象は解決しましたでしょうか?
    実は私も同じ現象になり、下記の方法で直りました。

    ・CLIタブから「set motor_pwm_rate=32000」と入力してEnter、次に「save」と入力し再度Enter。
    ・リポ、USBをつなぎ直して確認。

    私の場合、組み立て済み機体を購入したものの、CleanflightConfiguratorにて誤って設定を初期化してしまい、その後発生しました。
    ブラシモーター用の F3 Brushed を扱うのは初めてだったので、ひたすら海外のサイトなどを見てまわって見つけた内容です。

    もしも、もう解決済み、あるいは的を外していましたら申し訳ありません。

    返信削除

ご来訪者様の判別のため、
匿名希望の方もコメントの記入者欄に「名前/URL」 を選択し、
テキトーなペンネームを入れてくださいm(_ _)m
※ URLは不要。書いていただいてもOK。