Dropbox

DJI Mini2の360度パノラマ写真をFacebookに360度写真として認識させる

Mavic Miniに搭載されていなくて、とても残念な思いをしていたパノラマ写真の撮影がDJI Mini2で可能になりました。さっそく一番試してみたかったスフィア、360度写真を撮って来ました。

比較対象がSparkなのは容赦いただきたいですが、その差は大きかったです。Sparkでは46枚の写真を100秒ほどかけて撮影します。mimi2は26枚の写真を47秒ほどで撮影します。撮影時間が短いのはありがたいです。

Sparkで試していた頃のDJI GO4はパノラマ写真を自動的に合成してはくれますが出来が今ひとつでした。そのためPCにすべての写真を転送しMicrosoft ICEで合成するしかありませんでした。現在のDJI Flyはかなり上手くパノラマ写真を合成してくれます。ただし解像度は4096×2048なので元の26枚の写真を上手に合成した場合に比べるとだいぶ劣ります。しかしながら360度写真としてFacebookにアップロードする分には十分であると思います。

より高解像度のパノラマ写真が必要な場合はSparkの時に書いた手順が使えますので以下のリンクをご覧ください。

DJI Spark スフィア撮影(360度パノラマ)したものをVR化する

さて、ここからが本題です。DJI Flyが作り出した360度パノラマ写真は、そのままRicho Thetaのアプリなどに取り込んで携帯電話上でVR的に楽しんだり編集することが可能です。ところがFacebookにアップロードするとただの四角い写真にしかなりません。FacebookにVR写真として認識させるためには写真ファイルの属性情報であるexifの中でRicho Thetaで撮影した写真であると偽ることが必要になります。これを携帯電話上で行うというのが、この記事の主旨です。

追加情報: iPhoneのFacebookアプリで投稿のプレビューでは360度写真として表示されているのに、実際に投稿すると普通の四角い写真になってしまうことがあるようです。その場合safariを使用してFacebookに投稿すれば良いという情報をいただきました。iPhoneに限らずこういうことが発生する可能性があります。その時はブラウザーを使用してみてください。

必要なのはexif情報としてMakeに”Ricoh”、Modelに”Ricoh Theta S”と書き込むことです。それを可能にする携帯電話アプリケーションを探せば携帯電話だけで作業を完了することが出来ます。他にもっと良いものがあるかもしれませんが、私が見つけた無料アプリを紹介しておきます。

[ iPhoneアプリケーション ]
iOSではなかなか適当なアプリケーションが見つかりません。唯一見つかったのがEXIFマスターというアプリケーションです。下のようなテンプレートを設定しておくとワンタッチで必要な情報をセット出来ます。ただし時々広告ビデオを見なければなりません。課金すると広告を出ないように出来るようですが試してはいません。

[ Androidアプリケーション ]
アンドロイドにはexif編集アプリケーションが沢山見つかります。とりあえず、調子が良さそうなのはPhoto EXIF Editor
Power Exif-Photo Exif Viewerです。使い方はとても簡単なので、あらためてここで紹介する必要もないでしょう。スクリーンショットだけ下に貼り付けておきます。

[ サンブル投稿 ]
MSICEで作成した10000×5000ピクセルのパノラマ写真
iPhoneのDJI Flyが作成した4096×2048ピクセルのパノラマ写真

Betaflight Dump/Diffの読み方Serial編

機体の設定をDump/Diffのテキストファイルから読み解きたいことがまれにあります。大部分は意味のある文字列が書いてありますし、受信機の種類などは記憶していたりするので良いのですがConfiguratorのPortページのデータが曲者です。どのUARTが受信機だったとか、VTXのプロトコルがIRC TrampだったかSmartAudioだったとか重要な項目ですが、記憶するのは難しいですしDump/Diffデータも意味不明の数字でしかありません。ということで、これについて調べたことを書いておきます。タイトルはSerial編として続きがあるように見えますが、次に何かDump/Diffで困ったことが見つからない限り書く予定はありません。

上はとある機体のPortsタブです。これに対応するDumpデータは以下のようになっています。
# serial
serial 20 1 115200 57600 0 115200
serial 0 8192 115200 57600 0 115200
serial 1 64 115200 57600 0 115200

最初のserial 20で始まる行はdiffの出力には現れません。これはUSB VCPに相当すると容易に想像が付きます。またserial 0がUART1でserial 1であるというのもほぼ確信を持って言えるでしょう。それに続く数値もPortsタブの設定を変化させて探っていけば自分が必要な項目は拾い出せるとは思いますが、今ひとつスマートではありませんし確信を持って語ることは出来ません。

正しい情報を得るべくソースコードを読んで探していたのですが、結局ドキュメントにまとめて書かれていることが分かりました。ということでbetaflight/docs/Serial.mdを読んでいただければ全ては解明します。

それだけではつれないので簡単に説明を加えておきます。serialに続く最初の数字がポートでUART番号から1を引いたものです。またUSBは20、softserialは30から始まります。
その次の数字がFunctionで、これが今回知りたかったものです。その後にボーレート(シリアルインターフェースの速度)がいくつか続きます。Ports画面には速度はひとつしか表示されていないのが謎ですが、とりあえずあまり変更するものではないので置いておきます。

Functionについては次のように定義されています。

2. Serial Port Function

Function Value
FUNCTION_NONE 0
FUNCTION_MSP 1
FUNCTION_GPS 2
FUNCTION_TELEMETRY_FRSKY_HUB 4
FUNCTION_TELEMETRY_HOTT 8
FUNCTION_TELEMETRY_LTM 16
FUNCTION_TELEMETRY_SMARTPORT 32
FUNCTION_RX_SERIAL 64
FUNCTION_BLACKBOX 128
FUNCTION_TELEMETRY_MAVLINK 512
FUNCTION_ESC_SENSOR 1024
FUNCTION_VTX_SMARTAUDIO 2048
FUNCTION_TELEMETRY_IBUS 4096
FUNCTION_VTX_TRAMP 8192
FUNCTION_RCDEVICE 16384
FUNCTION_LIDAR_TF 32768
FUNCTION_FRSKY_OSD

IT屋さんにはおなじみの数字が書かれています。これは10進数ですが、バイナリーにするとひとつのビットになります。これはひとつのポートに複数のFunctionをもたせることが出来るようにしているからです。現実性は無視して例を上げるとUART1にGPSとFRSKY Telemetryの機能を持たせた場合は2+4で6にセットされます。

最初にあげた例に戻ってみます。

serial 0 8192

はUART1がFUNCTION_VTX_TRAMP、また

serial 1 64

はUART2がFUNCTION_RX_SERIALであることが分かります。ということでPorts画面と一致していることがわかります。

DJI中国の下取りサービス

DJI中国には中国語で「以旧换新」と呼ばれる下取りサービスがあります。中国だけのサービスですし紹介してもしょうがない気もしますが、そのスピードにちょっと感心したので時系列を中心に書いておきたいと思います。

下取りに出したのはMavic mini fly more comboです。申込みは中国のDJI Storeで行いますが、実際のオペレーションは爱回收という携帯電話の下取りで有名な会社が行います。経過等はDJI Storeで細かく確認出来ます。

買取額は現金ではなくDJI Storeで使用できるDJI貨幣として支払われます。もともと下取りサービスですので、次にDJIの商品を購入することが前提のサービスになっています。

– 月曜日のお昼過ぎにDJI Storeで申し込み。機体のコンディションや付属品の有無などを自己申告すると引き取り予定額が提示されます。宅配便の引取希望時間を入力して申し込みが完了。引き取り時間は一時間単位で、申込み時間の直後から指定可能。宅配業者は中国で一番信頼されている顺丰(SF)です。
– 申込みから約一時間後に引き取り完了。
– 火曜日の午前に爱回收に到着してインスペクション開始。
– 火曜日午後7時にインスペクション完了の連絡。問題なしで最初の提示金額がDJI貨幣として自分のDJIアカウントに振り込まれた。そのままDJI mini2 fly more comboを発注。
– 水曜日の朝9時過ぎに発送の通知が来た。深センより発送されるので、やや時間はかかる。
– 金曜日の午後2時頃にmini2の配達完了。

下取り価格は、おそらくネットオークションサイトよりは少ないと思いますが、とにかく簡単で煩わしいこと一切なしであることと、スピードの速さから良いサービスと思います。

BLHeli_SのRPMフィルター対応無料ファームウェア」の更新版です。

BLHeli_M 16.9 + Betaflight 4.2を用いたRPMフィルターの設定手順を書いてみました。

BLHeli_MはBLHeli_Sハードウェア向けの無料ファームウェアです。

注意)
– BLHeli_MはJazzMavericそのもので、このバージョン16.9でRPMフィルターを設定してまったく問題がないのかどうかは今ひとつ不明です。詳しくは別の記事をご覧ください。
– 2020/11/26くらいに書いています。Betaflightも頻繁に更新されますので、ここで書かれていることが何時までも正しいとは限りません。

[ BLHeli_Mの導入 ]
Configuratorを導入し、そこからフラッシュを行います。
一般的なESCファームウェアのフラッシュと同じです。YouTubeの”How to Flash BLHeli_M“という動画が参考になります。わたしは16.9 [Blheli_M Official]というのを導入しました。RPMフィルターはBLHeli_Mであれば使えます。PWM周波数の変更がonfiguratorにありますが、これはBLHeli_M 16.9以上が必要なようです。

[ Betaflightの設定 ]
公式ガイドに従います。
ここでは主なポイントを書いておきます。

使用したのはBetaflightのバージョンは4.2.0です。

< Configuration >

– ESC/Motor ProtocolはDSHOT300を選択しています。これはGyro/PID Loopを8K/4Kにしているためです。もしPID Loopを8KにするならばDSHOT600にしなければなりません。
– Bidiretional DShotをオンにします。これをオンにすることによりRPMフィルターが使用できるようになります。
– Motor Polesは実際のモーターの磁石の数に合わせなければなりません。一般的には5インチなどで使用するモーターは14、3インチ以下の小型モーターでは12になっているようです。ちゃんと自分でベルに付いている磁石の数を数えてください。

< PID Tuning/Filter Settings >

RPMフィルターは自動的にオンになっているはずです。Dynamic Notchフィルターのみ以下のように調整が必要です。
– Dynamic Notch Width Percent: 0
– Dynamic Notch Q: 250
この設定はBF 4.3対応のConfiguratorでは自動で行われるようです。フィルターについては機体の状態によってはさらなるチューニングが必要かもしれませんが、基本的にはここまでで飛ばせます。

[ テスト ]
Betaflight ConfiguratorのMotorタブで実際にモーターを回して回転数が表示されるかどうかを調べます。

Motorタプを表示すると各モーターのところにRとEという項目が出てきます。Rは回転数、Eはエラー頻度を表しています。一般的にはリポを接続していない状態ではESCに電源が供給されていないのでEが100%になり赤字で表示されます。

プロペラを外した状態で、リポを接続します。そして画面右側の”I understnad the risks…”のスイッチをオンにします。これでモーターを回す準備が出来ました。各モーターのスライダーもしくはMasterスライダーを少し上げて各モーターの回転数が表示されればテスト完了です。

Whoopフレーム修理用接着剤

Mr Shutterbugが動画の中で紹介していたWhoopフレームの修理に使えるE6000と書かれた接着剤を試してみました。

確かにフレームの素材によく馴染んで強力に接着されます。普通に飛ばして問題ないレベルです。いずれフレーム交換するにせよ、面倒ですし接着して飛ばせるのは有り難いです。

ESCのハードウェアは大きく分けて2つの種類があります。BLHeli_32と BLHeli_Sです。以前は悩むことはありませんでしたが、昨年末からBetaflightのRPMフィルターが出現し、またWhoopではPWMを48KHzにすると飛行時間が伸びるなどと言われだしました。BLHeli_32では標準ファームウェアでどちらもサポートしているので問題ありませんが、BLHeli_S用の標準ファームウェアはRPMフィルターを動かすのに必要なBidirectional DSHOTのサポートがありません、またPWM周波数も24KHzに固定されています。

そこで登場したのが標準以外のBLHeli_S用ファームウェアです。いくつか登場していますので、わたしの理解の範囲でそれらについて書いてみます。

[ JESC ]
最初に登場したのがJESCです。PWM 48KHz/96KHzを使用するだけならば無料で使用できます。Bidirectional DSHOTを使用するためには有料ライセンス(4個なら$4.99,20個で$23.19等)を購入してライセンスの書き込みが必要になります。
安定しています。とくに問題を指摘されている様子もないので安心感があります。わたしも最近20個分のライセンスを購入してまだ未使用が多数あるので、悩まずにこれを使用しておけば良いのですが、どうしても色んなのを試してみたくて次に紹介するBLHeli_Mで実験中です。

[ JazzMaveric/BLHeli_M ]
次に待望の無料版として登場したのがJazzMavericです。これのPWM 48KHz版でRPMフィルターを使用して随分と飛ばしていて特に問題は感じていませんでしたが、Betaflight公式ページによるとバージョン16.73以降でのRPMフィルターの使用は推奨しないということです。16.73を使用すればよいのですが、このバージョンはPWM 24KHz版しかありません。

そして、最近になってJazzMavericがいつの間にかBLHeli_Mというものに進化しているのに気づきました。ファームウェアの書き込みは専用のConfiguratorから行います。2020年11月13日現在、このConfiguratorで書き込めるのはBLHeli_S 16.7 Official, BLHeli_M 16.71 Official beta, BLHeli_M 16.9 Officialの3つのバージョンです。

PWM周波数の変更は従来はファームウェアの書き換えで行っていましたがBLHeli_MではConfiguratorで行うようになっています。

飛行時間の変化で実験してみた結果、BLHeli_M 16.71では、このPWM周波数の変更は有効ではないようです。PWM 48KHz/96KHzを使用する場合はBLHeli_M 16.9を導入する必要があります。

BLHeli_Mは何かしら変更されているとは言えJazzMavericそのものです。そこで問題となるのはRPMフィルターを使用して良いかどうかということです。BLHeli_M 16.71はおそらく問題ないと思います。BLHeli_M 16.9がどうなのかは今ひとつ分かりません。

UAV Techの人が16.9で問題は見当たらないと言っているので大丈夫な気がします。わたしもしばし16.9でRPMフィルターを使用して飛ばしてみたいと思います。

[ bluejay ]
これはまだ始まったばかりのプロジェクトです。Change Logを見ると最初のバージョンが2020-10-18に出てその後積極的な更新が行われています。
PWM周波数の対応、RPMフィルターの対応は当然として、何かしら新規性があるようですが、まだ良く調べていません。そのうち試してみたいと思っています。

昨年末くらいだと思いますがESCを48KHzで使用することによりWhoopサイズでは電池の持ちが改善するということを聞きました。当時、BLHeli_Sを使用する機体ではJazzMavericもしくはJESCの48KHzバージョンのファームウェアを導入することでPWM周波数の変更するしかありませんでした。自分でバッテリーの持ちの改善具合をテストしてみたいと思いながらもファームウェアを焼き直してまで試すことはありませんでした。

最近になってBLHeli_Mというファームウェアの存在を知りました。これはJazzMavericの流れを組むものでConfiguratorでPWM周波数が選択できます(導入はこのConfiguratorから行います。無料でRPMフィルターが使用できます)。これにより気軽にPWM周波数を変更出来ますので、やっと自分で電池の持ちの変化を確認する気になりました。

テストに使用した機体:

Beta65 Pro Frame
FC HBSfpv F4
BetaFPV 0802SE 22000KV
GEMFAN 1219-3
BetaFPV Z02 AIO Camera 5.8G VTX
TBS Crossfire Nano RX
BETAFPV 260mAh BT2.0
Emuflight 0.3.2 + MOCKINGBIRD準拠の構成
BLHeli_M 16.9

EmuFlightのPower TabでWarning Cell Voltageを3.3V、Minimum Cell Voltageを3.2Vに設定しました。
BLHeli_Mの構成で既定値から変更しているのは2つで、Startup Powerを1.50、Motor TimingをMediumHighにしています。

テスト方法:


電池6本をナンバーリングし、充電器の決まったチャネルで充電することにより電池と充電ポートの個体差による影響を排除。
PWMを24KHzに設定し、6本の電池で順にアングルモード室内飛行しアームからLow BatteryとLand Nowが表示されるまでの時間を計測した。その後PWMを48KHzと96KHzに設定して同じテストを行った。

結果:

24KHz 48KHz 96KHz
Low Battery Land Now Low Battery Land Now Low Battery Land Now
1 133 149 156 173 162 178
2 125 142 148 166 156 172
3 122 138 152 163 148 160
4 124 141 151 166 149 165
5 129 138 153 166 147 157
6 119 128 152 158 144 156
Average Time(s) 125.33 139.33 152.00 165.33 151.00 164.67
Improve% to 24KHz 21% 19% 20% 18%

結論:
24KHzと48KHzの差は明確です。数値としては96KHzより48KHzの方が少し良いですが誤差の範囲です。面白いのはDVRを並べて見てみるとCurrent Drawはそれぞれあまり変わらなくて電圧の低下が24KHzだけ速いです。もしかすると瞬発力などは24KHzの方が強いのかも知れませんが、それを定量的な観測をする方法を思いつきません。

このバッテリー持ちの改善効果は小さい機体だけとの話しです。機体サイズを変えてテストしてみたいですが大きな機体になると屋外テストが必要ですしなかなか手が出そうにありません。

Lumenier AXII HDの再テスト

DJI Digital FPVゴーグル用アンテナLumenier AXII HDアンテナのテストは一度行っていますが、急いでテストしたため自分でも結果に自信が持てなかったので再テストを行いました。

前回のテストと同じ場所で少しコースを変えてテストしました。今回は各アンテナ構成で二度飛ばして同じような結果になることを確認しました。またゴーグルが記録している数値データの評価も行いました。取れているデータを見てみると信号の強さは4段階しかありませんので評価からは除外しました。遅延が使えそうな気がしていましたが、実際に限界状態で飛ばしている時と数値の悪さ加減が今ひとつ一致していませんでした。ということで、一番状態をよく表しているのがビットレートでした。それぞれのアンテナ構成で2回飛んだうちで良い方のデータをグラフにして比較しました。

X軸は時間あるいは場所に相当しますが各フライトの速度は違うので完全には一致しません。そこで信号が悪くなり始めた特定の場所をビデオから判断して各グラフの位置をそこで合わせました。

結果をみるとDJIのオリジナルアンテナは早くから脱落し始めています。そして画面をロストしてしまい機体を元の位置に戻すことが出来ませんでした。二度のフライトとも同じでした。あとは微妙な違いです。しかしながらパッチアンテナを下にした方が落ち込みが大きいです。実際に飛ばした時の感じからも危うさを感じました。パッチアンテナを上にした場合と混合構成はほぼ同じ結果でした。飛ばしていた時の気持ち的には前回の結果も有ってパッチアンテナを上にした時の方が安定していたように感じました。データをみたりビデオを見る限りほぼ差はなかったのかもしれません。

わたしの結論としてはパッチアンテナは上に付けて使っていこうと思っています。

さらに最新版ではいろいろと変わりました。v0.62での例はhttps://www.nkozawa.com/blog/archives/7178をご覧ください。

最新版導入したら随分と画面が変わっていました。導入などはこの記事を見ていただくとして新しい画面についてはPIDtoolbox v0.44を御覧ください。

BlackBoxログは奥深くなかなか完全に使いこなすことは難しいですが、なんとなく少しずつ使うようにしています。今までは標準のBetaflight Blackbox Explorerを使用していました。これは時系列での事象を確認するのに適したツールです。この動作のときにはpropwashが起きているとかスティックの動きに追従出来ていないとか、受信機からの信号が失われてfailsafeになる様子、あるいはクラッシュ後にdis-armする代わりに飛行モード切り替えスイッチ動かしているみたいな事も分かります。

もう一つのBlockboxを解析するツールであるPIDtoolboxについて簡単な使い方を調べたので、それについて書いてみたいと思います。私自身が使いこなすというレベルではないので走らせ方と初歩的な解説にとどまります。それすら間違ったことを書いている可能性を踏まえて読んでみてください。PIDtoolboxはログ全体を見渡して統計的な処理を施し、視覚に訴えるデータを表示するツールです。PIDの調整やジャイロのノイズに対して絶対値で語るだけの知識がなくても調整前後あるいは良い機体と悪い機体のデータをグラフで比較することにより問題点が見えてきます。

[ 導入 ]
PIDtoolboxはGithubにて開発管理が行われています。ダウンロードはreleaseページで行います。2020/09/10時点の最新バージョンはv0.392です。以下の話は、このバージョンでの話です。

Windows版もMac版もほとんど同じです。ダウンロードしたzipファイルを展開しruntime_installation_file/MyAppinstaller_webというプログラムを実行し導入作業を行います。このインストーラーの主な目的はMATLABという外部プログラムの導入です。ところが、ついでにPIDtoolboxをプログラムメニューにも登録します。これが曲者でWindowsスタートメニューあるいはmacOSのアプリケーションからPIDtoolboxを起動しても動きません。もうひとつの外部プログラムであるblackbox_decodeがうまく動かないからです。macOSでは予めblackbox_decodeを単独で一度だけ走らせて置く必要があります(野良プログラムを動かすための儀式を済ませておくためです)。
結局のところ、zipを展開したところにあるmain/PIDtoolboxを直接起動するのが良いようです。MATLABは必要なので先のインストーラーの実行はスキップ出来ません。

< 補足 > 2023/05/23
v0.61ではインストールされた場所からの起動して動くようになっています。導入時にblackbox_decodeを展開したフォルダーを指定するようになったことがミソのようです。

[ ファイルの選択と読み込み ]

Select File [A]とSelect File [B]と2つのblackbocログが選択出来ます。PIDやフィルターの設定前後のログを同時に表示して比較する事が出来ます。Windowsでは任意の場所のログファイルを開くことが出来るようですが、macOSではログファイルをプログラムのあるフォルダー(zip展開後のmain下)にコピーしておく必要があるようです。

< 補足 > 2023/05/23
v0.61で試したところ、ログファイルは任意の場所にあるものを指定するようになりました。逆にmainフォルダーはログファイルを一時的にコピーする場所になりましたので、そこにコピーして使用することは出来なくなりました。

ファイルを選択後”Load+Run”を押します。ログによってはSELECT LOG NUMBERというダイアログが出ます。たいていの場合はdurationの一番長いものを選べば良いと思います。

最初に現れるのはBlackbox Explorerと似たような画面です。横軸が時間で上のチェックボックスで選択したデータが表示されます。ここで重要なのは統計的解析に先立ってデータの範囲を選択しておくことです。st(s)とend(s)というフィールドを使用します。st(s)には予め2と入力されています。これで離陸後の安定飛行部分が指定されてます。end(s)はログの最後になっているため、着陸時の乱れたジャイロデータも含まれてしまいますので、適当に値を調整します。

除外された範囲はグラフ上でグレーアウトされるので視覚的に確認できます。

[ Spectral Analyzer ]
Spectral Analyzerボタンを押すと新しいウインドウが開きます。そこで表示したいデータを選択してRunボタンを押します。

この機能はノイズの分布とフィルターの効き具合を確認するのに適しています。そこで上の例ではGyro, Gypro prefilt, Dterm, Dterm prefiltを選択しています。prefiltはフィルターする前のデータです。残念ながらGyro prefiltは既定値のままでは取れませんので、ここでは意味のあるデータは表示されていません。

グラフの横軸はスロットルで縦軸は周波数です。Gyroの値の0から80Hzくらいは実際の機体の挙動から発生するものです、それより高い周波数はノイズあるいは異常振動と考えられます。スロットルを上げるとややノイズが多くなっていますが、Gyroを見る限り問題のない機体と言えます。実際に飛び方もモーターの熱も問題ありません。Dtermにノイズが多いようなので何かしら問題があるようですが、まだ良く分かっていません。

2-Dというチェックボックスを入れると周波数分布が表示されます。これを見るとDtermもまずまずフィルターされているので、問題ないのかも知れません。別の機体のデータではもっと綺麗なDtermグラフが得られるので、やはりちょっと気になります。

[ Step Resp Tool ]
データの比較例を紹介するためにまず2つのデータを読み込んでみます。

データBは既定値のPID, データAはD値を少し強くしたものです。

Step Resp Toolボタンを押すと下のようなウインドウが開くのでRunボタンを押します。

PID制御の状態を表したグラフです。操縦者はスティックを動かしてドローンをコントロールします。スティックの動きはFCで処理されてsetpointという値を作り出します。これはドローンが操縦者の意図にそって動いた時に出力されるべきGyroの値を示します。別の言い方をするとPIDコントローラーはGyroの値がsetpointを追従するようにモーターの回転を制御します。理想的にはBlackbox Explorerでsetpointとgyroデーターを表示した時にぴったりと重なることです。実際にはGyroが幾分遅れますし、オーバーシュートしたりなかなか安定しなかったりします。

Blackbox Explorerでは個々の動作について追従具合を見ますがStep Resp Toolではログ全体を見渡して総合的な追従具合を表現しています。立ち上がりの速さがレスポンスの良さを表現し、そのあと1に収束している様子を見ます。この例では立ち上がりでいくらかのオーパーシュートがあり、徐々に1に収束しています。

この例では、最初PIDを既定値で飛ばしたて得たデータが右側の状態です。試しにDを少し増やして飛ばしたのが左側です。左はサンプル数が少なくてギクシャクしたグラフですが、ヴァイブレーションとまでは言わないですが、どうも右より収束が良くない気がします。ということでDを増やしたのはあまり良いことではなかったように思えます。もともとの状態は悪くはない気がします。実験的にもうちょっとPIDを変化させて、このグラフが変わるかどうかを見てみたいと思っています。

[ PID Error Tool ]

これについては語られるほどの知識がありません。おそらくは左のグラフで幅が小さいほうが望ましいのでしょう。この場合、2つのログに大きな差はないものと思います。

[ PIDtoolboxを使うに至った事例 ]
ちゃんと飛ぶのだけれどモーターが加熱してしまう機体のログをBlackbox Explorer調べてみました。

モーターのトレースが小刻みに振動しています。他の機体ではもっとなめらかに変化しています。Gyroに注目するとPitchの様子が明らかにおかしいです。この時点ではPIDtoolboxを使う前でした。山の間隔を調べてみるとどうも80Hz付近のように見えたのでStatic Notch Filterで70-90Hzあたりを減衰させてみました。

これで飛ばしてみました。しかしながらログをみてもほとんど変化がありません。フィルターが思うように効いていないのか周波数を間違ったのか、そのあたりをはっきりさせるためにPIDtoolboxを使ってみることにしました。

Gyroのフィルター前のデータを取得するためにBlackboxにGYRO_SCALEDを指定した。

それで取得したログのSpectra Analyzerのグラフです。

左の2つが既定値のフィルター、右側が80Hzを中心としたstatic notchフィルターを入れたデータです。それぞれのGyroとGyro prefiltを表示しています。

– まずびっくりしたのは周波数的にはまんべんなく分布していることです。波形に特徴があるので特定周波数が特に強いはずですが、このグラフには表れていません。
– Gyro [B]を見ると80Hz付近が切り取られているのでstatic notchフィルターは確かに効いています。
– Gyro prefiltを見ると実は300Hzより上の周波数にデータが出ている、これらは効果的にフィルター群で取り除かれていたということを認識しました。300Hzから500Hzにかけてのスペクトラムが右肩上がりなのはスロットルポジションに追従して変化している、言い換えるとモーターの回転数に影響されたものだと推測出来ます。

それにしても、PitchのGyroの様子がおかしいという確認は出来ましたが原因も対策もよく分かりません。このSpectral Analyzerを見ると飛べているのが不思議に見えますが、Blackbox Explorerを見ると実際は機体の動きは取れていて、その波に小刻みにノイズが乗っている感じに見えます。FCの問題に思えますが、まだ結論は出ていません。

DJI Digital FPV System向けの社外アンテナはいくつか発売されています。割と高いこともあり、またストックアンテナで十分に強力なのでなかなか手が出ませんでした。実際、手持ちのパッチアンテナなども試してはみましたが、わざわざ付け替えるほどでは無い気がしていました。

Lumenier AXII HDコンボを使用するとストックアンテナよりもコンパクトになることが魅力的でした。アンテナを外すことなくバックパックに入れらるのはとても便利です。

性能がストックアンテナとあまり変わらなくてもコンパクトさ故に使ってみることにしました。せっかく入手したので簡単に比較テストを行いました。また、疑問点としてパッチアンテナは上と下のどちらに付けるべきかということへの自分なりの回答探しでもあります。

家の近所のスポットでアナログでもDJI FPVでも比較的近距離なのに200mWでは超えられない場所があります。そこでのテストです。

実験はそれぞれの構成で一度の飛行しか行っていませんので、あまり信頼性は高くはないかも知れません。結果はAXII HDのパッチアンテナを上、スタピを下に付けたら初めてその限界点を超えてまた戻ってくることが出来ました。本来なら同じテストをもう一度行うべきですが暑さと時間の制約で行えませんでした。また別の場所でテストしてみたいと思います。