PX4で自作ドローンを動作させるまでのトラブル集

[PX4 User Guide](https://docs.px4.io/master/en/)を参考に、部品からドローンを組み立てて飛ばそうとしたのですが、色々とトラブルがあり悪戦苦闘したので、共有します。

ちなみに、その時の機体構成なんかはこちらに記事にしてます。
[https://qiita.com/sakaeda11/items/44ee98dcaf006273ca30](Pixracerを使ったドローンの組み立てと試験飛行手順)


# 1.QGroundControl(QGC)でWaiting For Vehicle Connectionと表示されて、機体が認識されない。

PCとフライトコントローラをUSBで繋いであげると、PC上に動作させているQGCで自動的に認識されて表示が切り替わるのですが、そうなってくれないことがあります。

**解決方法**
単純にフライトコントローラの起動に時間がかかっているだけでした。少し待つと接続されます。

<img width="500px" alt="ScreenShot 2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/1a74dcd2-c86b-f2de-7991-127f0609b6ea.png">


# 2.ドローンにバッテリーを差し込むと、QGCが、"Dangerously low battery"的なエラーを吐く
PC(QGC)とドローンをUSB接続した状態で、後からドローンにバッテリーを接続すると音声で、**"Dangerously low battery"**と鳴ってびっくりします。

バッテリーはほぼ新品&フル充電なのに、、機体の組み立てで問題が合ったのかも？？と心配になったりしまいた。

**解決方法**
これは、解決方法というか、実は問題なかった、というのが答えになります。

バッテリーを接続するとすぐにフライトコントローラはバッテリー残量推定を始めるのですが、この推定値が0%からだんだんと上がっていって、少し経つと現在のバッテリー残量を占めるようになります。
この推定値が上がりきるまでのタイミングのバッテリー残量が、エラー値になるようです。

(推定に掛かる時間の問題なのか、XTコネクタを差し込んでいるときに差し込み仕切るまでの時間の問題なのかは不明)

(この画面上部の"100%"というところがバッテリー残量。バッテリーを接続すると0から徐々に上がって行きます。)
<img width="500px" alt="ScreenShot 10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/1aa027f6-e6ae-0805-c255-b5dfb8f717bf.png">

# 3.RadioとFlight Modeのセットアップが出来ない
当初、まずは簡単な自律飛行をさせてみたいと思い、[プロポ](https://qiita.com/sakaeda11/items/289a1fba3800f6a7f0b8#proportional-controller)や[RC](https://qiita.com/sakaeda11/items/289a1fba3800f6a7f0b8#rc)なしの構成でつくっていたのですが、これらが無いとQGCで行うRadioとFlight Modeの設定を完了出来ず、、

結局プロポとRC無いとダメなの？
と困ってしまいました。

<img width="500px" alt="ScreenShot 7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/4275ff89-5d30-d190-2653-e99e75b7f095.png">

**解決方法**
とりあえず無視して大丈夫でした。
赤くなりますが、放置したままでmotor testやArmまでは行えました。
(この先どうやって飛ばすのか、を考えるとなにかしら考えないとですが。)


# 4.「[Arm](https://qiita.com/sakaeda11/items/289a1fba3800f6a7f0b8#armarmed)」しようとして「Preflight Fail： Compasses NN° inconsistent」とエラー表示される

以下の画面で、Disarmedと表示されているセレクトボタンから、Arm状態に切り替えようとしたのですが、
`Preflight Fail： Compasses 57° inconsistent`
と表示されて先にすすめませんでした。(57という部分は何度か試すと別の値になったりした)

<img width="500" alt="ScreenShot 12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/8bf9dd56-2c5a-b062-b45d-05204c1a7b4b.png">

**解決方法**
Compassのキャリブレーションをし直したら解決しました。

なお、その際フライトコントローラの向きが↓でいうROTATION_YAW_270の方向に組み立てていたのですが、
最初はQGCのデフォルトのROTATION_NONEのままにしていたので、ROTATION_YAW_270にしてキャリブレーションし直したので、
もしかしたら何か影響しているかもしれません。

# 5.QGCから**Motor Setup**を行おうとすると「Motor test command not support」と表示されて出来ない
https://docs.qgroundcontrol.com/en/SetupView/Motors.html
にあるようにQGCからMotor testをおこなってみたのですが、
<img width="500px" alt="ScreenShot 28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/d7ceb81e-4d6c-348c-1aea-63640398313f.png">
画像の様に「Motor test command not support」エラーが表示されて実行出来ませんでした。

バージョンの問題かと思って、最新のQGCを[ここ](https://docs.qgroundcontrol.com/en/getting_started/download_and_install.html)からダウンロードし、フライトコントローラにインストールするFirmwareも[ここ](https://github.com/PX4/Firmware/releases/tag/v1.11.0-beta1)のv1.11.0 Beta 1を適用してみたのですが状況変わらずでした。

**解決方法**
QGCのUIからは実行出来なかったので、
[こちらのコマンド](https://dev.px4.io/v1.9.0/en/middleware/modules_command.html)から実行してみました。

コマンド実行自体をどうやってやるのか？という話になるのですが、
[こちらで聞いたところ](https://discuss.px4.io/t/how-to-access-flight-controller-console-via-usb/17619)QGCのMAVLink consoleから実行出来ました。
コマンド詳細は上のリンク先にありますが、例えが

`motor_test iterate`

と実行すると以下の様な表示が出てモーターが順に動作しました。
<img width="1333" alt="ScreenShot 2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/d13f744b-a464-7900-3d07-3eabad3fa0c8.png">

動作風景動画はこちら。
[![https://youtu.be/IDg1FfwcAlo](http://img.youtube.com/vi/IDg1FfwcAlo/0.jpg)](https://youtu.be/IDg1FfwcAlo)



# 6.USBで接続したまま「Arm」しようとすると「Critical: Arming denied! Flying with USB is not safe」と表示される。(無線経由でQGCからArmする方法が分からない)

とりあえずモーターがまわるかをチェックするためにUSB接続したままArm出来ないか試してみたのですが、当然ながらNGでした。
QGCからArmするためには何らかの無線通信でQGCとフライトコントローラを接続する必要がありそうなのですが、やり方が分からず困りました。

**解決方法1**
以下におおよその事が書いてありました。
https://docs.px4.io/v1.9.0/en/telemetry/telemetry_wifi.html
https://docs.px4.io/v1.9.0/en/telemetry/esp8266_wifi_module.html

規定のWiFiモジュール(ESP8266)を利用していれば、デフォルトのSSID/PWにアクセスすることで良さそう

1. ESP8266をフライトコントローラにセットしておく
2. QGCとフライトコントローラをUSBで接続し、フライトコントローラのESP8266の[Serial Port設定](https://docs.px4.io/v1.9.0/en/peripherals/serial_configuration.html)を行っておく
3. PCのWiFi設定でESP8266のSSIDに接続する
4. QGCは自動的にフライトコントローラと接続する

と言った流れです。
自分の場合はESP8266のSSIDは**PixRacer**ではなく、**ArduPilot**でPWも**ardupilot**でした。
おそらく生産ロットによってい違うようです。
[参考：Arudupilot, ESP8266 wifi telemetry](https://ardupilot.org/copter/docs/common-esp8266-telemetry.html)

**解決方法2**
QGCからCBRK_USB_CHKの値を197848にして、USB接続チェックを無効化する
[Parameter Reference](https://docs.px4.io/v1.9.0/en/advanced_config/parameter_reference.html)を参照

# 7.「Failsafe enabled: no RC」と表示されてArm出来ない
"6"の対応で一歩進んだのですが、再び"Arm"しようとすると今度は「Failsafe enabled: no RC」と表示されてArm出来ませんでした。
<img width="500px" alt="ScreenShot 18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/823d61f0-0872-3c5f-4ac6-2c73b8d4f79f.png">

**解決方法**
QGCで「RC Loss Failsafe Trigger」を**Disabled**にすることでこのFailsafeを無効化することができました。

デフォルトの状態：
<img width="500px" alt="ScreenShot 21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/4f6064ed-23fa-a0e8-c1c2-0f9cc574382f.png">

無効化：
<img width="500px" alt="ScreenShot 22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124098/dbe86cd2-5bbd-20a9-8106-451698731fcc.png">

これで、一応Armed状態まで進めるようになりました。