こんにちは。Watayunです。
普段は自作ドローンを始めとする様々な物作りをおこなっています。私は中学1年のころからドローンを自作する活動を行っており、この記事ではその話をしたいと思います。
なお本記事は作ったドローンの紹介がメインであり、ドローン制作についての技術的な話はあまりないです。ご了承ください。
Watayunのtwitter(X)アカウント:https://x.com/wata_yun
作った機体たち
こんな感じです。ここで上げたのはちゃんと飛ぶ機体です。無論飛ばなかった機体が数多く存在します。成仏してもろて...
前2つはブラシ付きモーター+モータードライバを使用しており、最後の機体はブラシレスモーター+ESCを使用しています。また、最後の機体は飛行ロボコンという大会に出場した機体でもあります。この記事では最後の機体について詳しく話していきたいと思います。ちなみに機体名称は multicopter V5 『SEKIREI』 です。
ハードウェアについて
SEKIRIは機体のフレームがすべて3Dプリンター製パーツです。素材は軽量化PLAで、モーターと接触する部分だけABSを使用しています。
アームが2層構造になっていて、モーターと触れる部分のみがABSという感じです。
また、SEKIREIは上下の2層構造になっており、上段に制御基板やESC、モーターなどの飛行する上で必須のパーツが、下段にカメラや物資投下機構、視認用LEDなど飛行に必須でないパーツがついています。そのため、下段を取り外し、上段のみで飛行することもできます。その場合は飛行時間がちょっと伸びます。さらに上段には、アーチ状の飛びているパーツがあります。これは基板保護用のパーツで、ドローンがひっくり返った時に基板を保護します。しかし開発が進むと機体がひっくり返ることはまずなくなり、基板保護は持ち手としての第2の人生を歩むのでした。
回路について
SEKIREIは制御回路を自作しています。
設計はこんな感じです。SEKIREI基板の形は少し特殊ですが、これには意味があります。左右に飛び出ている部分はESCとサイズを合わせており、4in1タイプのESCを左右それぞれ1つ固定することができます。これで8つのモーターを制御できるというわけです。
そうやって設計した基板を業者に発注すると...
こうなるわけですね。あとはパーツを実装して完成です。
...............没基板は..........見なかったことにしましょう.........
基板を組み込んだらこんな感じです。マイコンはESP-WROOM-32E、IMUはBNO055を使用しています。
本基板ではESP32のプログラムの書き込みを行うために必要なpinを1箇所にまとめているため、そこに書き込み装置を接続することで、容易にプログラムを書き換えることができます。さらに安全装置として、基板上のスイッチがONになっていない、またはマイコンのセーフティが発動している場合、ESCへの信号を遮断する回路があります。これにより、マルチコプターに自分が触れている時に確実にモーターが動かないようにすることが出来ます。
本基板の外部への接続を紹介します。本基板には電源入力端子、プログラム書き換え用6pin端子、I2Cの4pinの端子、電源+信号線1つの3pinの端子×4があります。3pin端子の内1つは信号反転回路が接続しており、プロポ受信機を接続します。他はサーボやマイコン内蔵LEDなどを接続します。
ちなみにSEKIREIの制御基板を作った時に、合わせてESP32の1.27mmピッチ変換基盤を作りました。これ意外と需要はありそうですけど売ってないですね。
ソフトについて
SEKIREIは制御プログラムを自作しています。そのため、かなり自由なことができます。使用言語はArduinoが基本で、一部JavaScriptがあります。なんでJavaScriptと思われたかもしれませんが、後述のデバックシステムで使用しています。
まず平常時の飛行についてです。平常時はIMUから機体のオイラー角を取得して(SEKIREIで使用したIMUはマイコン内蔵でオイラー角を直接I2Cで取得できます)、プロポ受信機から来た機体の目標角度との差でPID制御を行い、各モーターの回転数を算出しています。PID制御は角度だけでなく角速度でも行うことにより、機体の安定性が大幅に上昇しました。なおゲイン調整は地獄。
また、本機体は飛行ロボコンにてミッション「耐故障制御」を行いました。飛行ロボコンを知らない方向けに「耐故障制御」が何かを説明すると、飛行中にモーターを1つ停止させ、墜落せずに機体を空中に維持するというミッションです。SEKIREIは制御プログラムを自作しているため、耐故障制御開始とともにモーター1つの回転数を0にし、他のモーターの回転数の算出プログラムを切り替えることにより、比較的容易に達成できました。オープンソースのフライトコントローラーを使っていると、このモーター回転数の算出式の切り替えが大変らしいですね。知らんけど。
SEKIREIにはオリジナルのwebデバックシステムがあります。マイコンがESP32であるため、ESP32のWIFI機能を用いてアクセスポイントを作成し、WEBサーバーを立ち上げています。このwebサーバーでJavaScriptを使用しているということですね。このwebデバックシステムでは、機体のROLL,PITCH,YAW,スロットル、バッテリー電圧がリアルタイムで表示される他、PIDゲインの変更、フライトログの取得、ESCキャリブレーション、モーターの個体差調整など様々なことが行えます。いちいちプログラムを書き替えずに調整が行えるためとても便利です。
こちらは実際にwebデバックシステムから取得したフライトデータをグラフ化したものです。ROLLとPITCHがそれぞれの目標角度を追いかけていることが分かります。ROLLとPITCH以外にもバッテリー電圧や各モーターの回転数もフライトデータとして取得できます。最初にシステムを構築するのは大変ですが、とても便利で開発が効率化できるのでおすすめです。
最後に
ここまでご視聴ありがとうございます。
本記事では、具体的なドローンの作り方には言及せずに、作ったドローンの紹介という形になりました。
ゆくゆくは技術的な記事も書けたらなと思います。
それでは良い物作りライフを!!