paint-brush
Raspberry Pi + ESP32 ドローンの構築: ロボット工学への第一歩@tohntobshi
10,329 測定値
10,329 測定値

Raspberry Pi + ESP32 ドローンの構築: ロボット工学への第一歩

Anton D2022/04/26
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

Anton は、ロボット工学への最初のステップ、特に Raspberry Pi + ESP32 ドローンについて書いています。 Anton は Blender でパーツを設計し、安価な 3D プリンターで 3D で印刷しました。ドローンはアプリによって制御され、ユーザーはアナログのようなアプリでドローンを監視および監視できます。アントンはそれについてのビデオも作成し、記事の最後に添付しました。

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Raspberry Pi + ESP32 ドローンの構築: ロボット工学への第一歩
Anton D HackerNoon profile picture

こんにちは、みんな!私の名前はアントンです。そして、ロボット工学への最初のステップ、特に Raspberry Pi + ESP32 ドローンについての話を共有したいと思います。 (動画も作って記事の最後に添付しました)

序文

話の冒頭で、私は Web 開発者 (React、Typescript など) として働いていて、C++ の知識があり、電子工学のスキルもありました。破れたヘッドフォン ワイヤをはんだ付けすることができました。問題は、Web 開発者として不満を感じ始めたことです。自分のしていることは物理的な世界に意味のある影響を与えていないからです。もちろん、現実の世界に影響を与えるソフトウェアのみのプロジェクトはたくさんありますが、私は最も単純なアプローチを取り、ロボット工学に飛び込むことにしました。


そこで私はこのテーマに関する本を何冊か読んだり、YouTube でビデオを見たり、いくつかの記事を読んだり、はんだ付け装置と 3D プリンターを購入したりしました。同様のジャンク。

最初のロボット

私の最初のロボットは、このキャタピラー プラットフォームでした。


私の最初のロボット


Blender でパーツを設計し、印刷しました。 Raspberry Pi を頭脳として使用し、電源バンクを電源として使用しました。リレーとトランジスタからモーターコントローラーをはんだ付けしました。この物を作る過程で、私は 1 つの問題に遭遇しました。すべてを組み立てたとき、モーターはほとんど動きませんでした。トランジスタのコレクタとエミッタを混同したことが判明し、それらを再はんだ付けした後、すべてが機能し始めました。それ自体では何もせず、遠隔操作のみであるため、これをロボットと呼ぶのは難しい.とにかく、作ってよかったと思い、自分を信じて、同じものを作ることにしましたが、飛ぶものでした。

二代目ロボット

いくつかの調査の後、ブラシレスモーター、電子速度コントローラー、モーターに高電流を供給できるリポバッテリーなど、従来のクワッドコプター部品を使用することにしました。頭脳として、私はまだ同じ Raspberry Pi を使用しました。 Raspberry Pi を ESC と接続する方法を見つけた後、すべての部品を保持するフレームの設計を開始しました。フレームの要件がそれほど厳しくないことを期待して、直感だけに頼ってそれを行っていました。これほど奇妙な形のドローンがまだ飛ぶことができるのを見たからです。


i2c バスにジャイロスコープ、加速度計、気圧計、磁力計を組み込んだボードも購入しました。 PID コントローラーが何であるかを知る前に、私の最初の直感的なアプローチは、その P コンポーネントが機能する方法に似ていました。つまり、ドローンが水平面から発散する角度に比例してモーター速度を増減するだけでした。


最初はそれほど難しい作業ではないと思っていましたが、うまくいかないことがたくさんあるので、何度も失敗した後、正しい方法でこれを行う方法がわかりませんでした。そして、ソフトウェアだけで何かを作るのとは反対に、実行のたびに物理的な損傷が発生する可能性があり、損傷した部品を交換して初めて次の試行が可能になります。また、小さな賃貸アパートでこれをテストするのは簡単ではありません。大きなガレージや物置などがあれば、ドローンの動きを制限するような構造を作ることができたでしょう。


上下の動きは靴ひもで制限されています


代わりに、靴ひもと自分の手を即席で使用する必要があり、軽度ではあるが不快な怪我をすることもありました.


ある時点で、マウスとキーボードでドローンを制御するのは不便だと思い、パラメーターを変更し、センサーの読み取り値を監視し、アナログのような UI でドローンを徐々に制御できるコントローラー アプリを作成することにしました。


モバイルアプリのスクリーンショット

別のスクリーンショット


最初は、何らかの理由で水平レベリング制御に焦点を当てていましたが、安全にテストすることはできず、さらに必要なのは自動高さ制御であることに気づきました。最初に考えたのは気圧計の読み取り値を使用することでしたが、屋内での高さを制御するのに十分な精度がなかったため (または単に間違った方法で使用しただけかもしれません)、地元の電子部品店で超音波センサーを購入しました。実際には、測定中にピンの 1 つを高くする奇妙なインターフェイスがあり、距離を推測するために時間をカウントする必要がありました。 Raspberry Pi が比較的アイドル状態のときは正常に動作しましたが、計算負荷がかかるとタイミングを逃し、読み取り値がガベージでした。そのため、これらのタイミングを測定し、結果を SPI インターフェイスで便利なデジタル形式で出力するためだけに、追加の AVR コントローラーをプロジェクトに追加する必要がありました。


また、自転車のブレーキ ケーブルを 2 本購入し、ドローンの動きを上下に制限する印刷されたガイドを購入しました。これにより、他の自由度を制御することを考えずに高さの制御に集中できるようになりました。

水平方向の動きはブレーキ ケーブルによって制限されます


そして、プロペラが作動している場合を除いて、それはちょっとうまくいき、40cm以上の高さで超音波センサーの読み取りを妨げる乱気流を作り出しました.ついにそれを見つけたとき、超音波センサーをレーザーセンサーに交換する必要がありました。


その時点で、すでに高さ制御はできていましたが、PID 制御を実装したにもかかわらず、水平レベリングが安定しませんでした。いくつかの理由を推測しましたが、どれが最も問題を引き起こしたのかはわかりません。しかし、ここにそれらがあります:


  • 最初のもの、そしておそらく最も重要なものについては、私は安価なプロペラを使用し (さらにそれらを印刷しようとしました)、それらのバランスをとる必要性を無視しました。最終的にこの問題に対処することに決めたとき、アプリに機能を追加して、最後の 100 個のジャイロスコープの読み取り値を取得し、最大値と最小値の間の範囲を出力しました。プロペラが作動しているときの範囲が大きいほど、バランスが崩れます。私はランダムにプロペラのブレードにダクトテープを貼り付け、それらを実行して値を確認しました。値が増加した場合 — おそらくそこに貼り付けるのは悪い場所であり、ノイズが減少した場合 — 私は正しい道にいるので、貼り付けようとしましたそれをさらに、または中心に近づけて再度チェックすることで、各プロペラのノイズを減らしました.
  • 考えられる 2 つ目の問題は、Raspberry Pi には 2 つの PWM チャネルしかなく、それで制御される ESC が 4 つあり、ソフトウェア PWM が十分に正確でなく、CPU サイクルを浪費する可能性があることです。 ESP32 は安価で入手しやすく、Raspberry Pi にはない多くのインターフェイスを備えているため、このタスクには ESP32 を使用することにしました。 SPI 経由で Raspberry Pi に接続された ESP32 を介して ESC を制御することから始め、最終的にすべてのフライト コントローラー ロジックを ESP32 に移動しました。
  • 3 番目の号はおそらく十分な剛性のフレームではなかったので、何度か再設計して印刷しました。
  • もう 1 つの問題は、傾斜角の推定に使用した相補フィルターの係数が最適ではないことです。統合されたジャイロスコープの読み取り値によって推定された角度の最適値は 0.999 で、加速度計によって測定された角度の最適値は 0.001 です。
  • 傾斜したドローンがローカルの z 軸を中心に回転すると、ピッチがロールに変わり、その逆になるとは考えていませんでした。
  • 傾斜角の非常に遅い振動は、いくつかの情報源が示唆するように P 係数を減少させる代わりに、P 係数を数回増加させることによって修正される場合があります。



開発プロセスのどこかで、モジュール間のワイヤの数と配置方法に不満を感じました。そこで、カスタム PCB を作成するスキルに時間を投資することにしました。ずっと考えていたのですが、高価な道具を買う必要があり、化学薬品を扱う必要があることに落胆しました。


実際、思ったよりも簡単でした。PCB の設計を作成するために、KiCAD のチュートリアルをいくつか見ました。中古のレーザー プリンターを 40 ドルで購入し、穴のない通常のアイロンを 5 ドルで購入し、最も高価なツールはドリル プレスで 75 ドルでした。化学薬品はそれほど危険ではないことが判明しました。触れても皮膚を溶かすことはありません。


KiCAD での設計

エッチング後、ソルダーレジスト塗布後


というわけで、4回目の試みでこのPCBを作りました。一番大変だったのは、実際にはんだマスクを適用することでした。この PCB が行うことは、センサー、ESP32、および Raspberry Pi を相互接続し、さまざまな部品に適切な電圧を供給することです。


アプリで現在のセンサーの読み取り値を示す派手なチャートは、ドローンの墜落を防ぐために分析するのが難しいことが判明しました.そこで、センサー データを記録する機能を追加し、飛行のビデオ レコードを使用してフレームごとに分析する Python スクリプトを作成しました。

フライト アナライザー スクリプト


以前にそれを行っていれば、前述の超音波センサーの故障によって引き起こされた問題の調査に費やす時間を大幅に短縮できたでしょう。


ある時点で、比較的安定した高さ、方向、および水平レベリング制御を達成しましたが、それでも水平方向のドリフトは回避できませんでした。また、IMU センサーのみを使用して水平方向のドリフトを取り除くことができることを誰かが知っている場合は、コメントでお知らせください。


いくつかの調査を行ったところ、一部のドローンが位置保持に GPS を使用していることがわかり、同じ手法を実装しようとしました。しかし問題は、それが外でしか機能しないということですが、外でも満足のいく結果を得ることができませんでした。その季節は風、雨、雪のひどい天候だったので、あまり挑戦せず、GPS でなんとかし、コンピューター ビジョンのアプローチを試みました。


青いマークを追跡するスクリプトのスケッチ


ドローンの底面にカメラを設置し、OpenCV ライブラリを使ってこの青いマークを床に固定してみました。いくつかの試行と微調整の後、結果は次のとおりです。


https://www.youtube.com/watch?v=poqQmvoBlP8

これで、手動制御や文字列なしで一点にホバリングできます。これが私の中間目標であり、最終的に達成できたので、進捗状況を文書化して共有することにしました。



ドローンからアプリへのビデオ ストリームの転送も追加したので、コンピューター ビジョンを使ってさまざまなアプローチを試し、床に特別なマークを付けずに一般的な位置を保持したり、他の機能を作成したりできます。




現在の構成では、ドローンは次のように作られています。ESP32 は、高さ、方向、およびレベリング制御を担当しています。下部にある IMU センサーとレーザー距離センサーからデータを取得します。モーター コントローラーにコマンドを与えるだけでなく、アプリとの通信とカメラからのデータを使用した位置制御を担当する raspberry pi からコマンドを受け取ります。


誰かがコードを見ることに興味がある場合

ESP32部分

ラズベリーパイ部分

クライアント Android アプリ


適切に動作するように頻繁に実装を変更したため、コードはあまりきれいではありません。多分私は将来それをきれいにするでしょう:)


また、私はそれについてのビデオを作りました:

https://www.youtube.com/watch?v=3mAFEW0YOJ0


ご清聴ありがとうございました!乾杯!