レースに使っていたフライトコントローラーにArdupilotをインストールする。

息子の大学の研究室に買ったままの状態のドローンがあり、教授からこれを飛ばす様に言われたらしいのですが、これがまた数十万円もする機体で、慣れ親しんだレース機の様に墜落上等!!なモノとは緊張感が違う様です。
この機体のフライトコントローラー(以下FC)にはPixhawk(これも10万円前後するやつ!)が載っていて、ファームウェアにはArdupilotが書き込まれています。

FCのオープンソースなファームは各種ありますが、レーシングドローンだとBetaflightがメジャーなのに対し、オートパイロット用途ではこのArdupilotPX4等が多く使われている様です。

Ardupilotを初めて知ったのはMake:日本版Vol09の記事でした。この頃はArduinoベース(なのでArdupilotという名前)でしたが最近はPixhawkが主流になっています。

で、いきなり何十万円もする機体を飛ばす前に、落ちてもダメージが少ない5インチ程度の機体を使ってArdupilotに慣れたいという希望が出てきた様です。そこで手持ちのFCにArdupilotをインストールできないか調べてみました。上手くいけば自作フライトコントローラーのHOIHOI-FCに載せられるかもしれません。(下まで読んで貰えると現状のHOIHOI-FCには載せられなかった事が分かるのですが)

何はともあれArdupilotをビルド

必ずしも手元でビルドできる必要は無いかもしれませんが、最終的にHOIHOI-FCに載せるとしたら設定を変えてビルドする必要が出てきそうです。
という事で今回もWSL(Windows Subsystem for Linux)上にビルド環境を作ってみます。
基本は下記のドキュメントに沿って作業していきました。

https://ardupilot.org/dev/docs/building-setup-windows10_new.html
https://ardupilot.org/dev/docs/building-setup-linux.html
https://github.com/ArduPilot/ardupilot/blob/master/BUILD.md

という事で、まずはWSLを開き、GithubのArdupilotリポジトリをクローンします(gitの環境は予めインストールしてあります)。
但しその前に改行コードを勝手にCRLFに変更しない設定にしておきます。「CRLFにする」設定のままで作業すると、後々エラーが出てしまったのです。

git config --global core.autocrlf false   ←勝手にCRLFに書換えない設定。
git clone --recurse-submodules https://github.com/Ardupilot/ardupilot

出来上がったardupilotディレクトリに移動して設定スクリプトを実行しました。

cd ardupilot
Tools/environment_install/install-prereqs-ubuntu.sh -y

スクリプトが.profileに加えた変更を反映させます(ログインし直しても良いですが)。

. ~/.profile

ビルド可能なボード名一覧を参照し、この中からMatekF405をビルドしてみました。
(MatekF405を選んだのはBetaflight用HOIHOI-FCをビルドした時、MatekF411を元に作成したので今回も近いボードで試したいから)

./waf list_boards    ←ビルド可能なボード一覧を見る
./waf configure --board MatekF405 
./waf copter

暫くすると”adrupilot/build/MatekF405/bin/”の下に”arducopter_with_bl.hex”ができました。
FCがMatekF405であれば、このままファイルを書き込めば良い筈です。

HOIHOI-FC用にビルドできるか?

ではHOIHOI-FC用の設定を作ろうと思います。
各FC用の設定はどうやら”ardupilot/libraries/AP_HAL_ChibiOS/hwdef”の下にFC名のディレクトリを作ってそこに置く様です。
先ほどのMatekF405だと”ardupilot/libraries/AP_HAL_ChibiOS/hwdef/MatekF405″で、この中に”hwdef-bl.dat”,”hwdef.dat”の二つのファイルがあります。
よってこのディレクトリをHOIHOI-FCディレクトリとして丸ごとコピーした後に変更を加えていこうと思います。
・・・ところがHOIHOI-FCに載せているマイコン、STM32F411はArdupilotでサポートされていない事が分かりました。
wikiによるとフラッシュメモリが1MB以上必要との事。STM32F411は512KBなのでファームが入りきらない様ですね。
ならばSTM32F722もHOIHOI-FCに載せた事があるのでこれならどうだっけ?・・こちらも512KBでサポート対象外ですね。 うーん、なんてこった。

iFLIGHT SuccexF405に載せてみる。

このまま止める訳にもいかず、手持ちの中からArdupilotがサポートしているFCを探したところ、iFLIGHTのSuccexF405がありました。このボードに載っているSTM32F405(フラッシュ容量1MB)ならOKです。

ではSuccexF405のファームをビルドして書き込んでみます。書き込み方法は“1/3三田式3型改1製作記さん”のブログ“を参考にしました。
まずFCのBOOTボタンを押しながらUSBに接続する事によりDFUモードで起動し、STM32CubeProgrammerで先ほどのファームを指定して「Download」ボタンを押すと書き込みが始まります

書込みは特に問題なく終了しました。
一旦USBケーブルを外し、今度はBOOTボタンを押さずに接続すると・・・反応ありません。
WindowsのデバイスマネージャーにCOMxとして認識されるはずなんですけどねぇ。

そこでSTM32CubeProgrammerでVerifyをやると不一致のエラーがでました。上手く書けていない様ですね。
結局、消去ページで一旦全体消去をしてから同様の書き込みをするとVerifyも一致し正常に動作する様になりました。「Download」ボタンで自動的に消去もやってくれる訳ではない様です。

以上によりMissionPlannerとも接続でき、まだ細かい所はこれからですがArdupilotとして動作し始めました。

次はGPSやコンパスを繋ぐ必要がありますね。。。