こんにちは、みんな!私の名前はアントンです。そして、ロボット工学への最初のステップ、特に 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 制御を実装したにもかかわらず、水平レベリングが安定しませんでした。いくつかの理由を推測しましたが、どれが最も問題を引き起こしたのかはわかりません。しかし、ここにそれらがあります:
開発プロセスのどこかで、モジュール間のワイヤの数と配置方法に不満を感じました。そこで、カスタム PCB を作成するスキルに時間を投資することにしました。ずっと考えていたのですが、高価な道具を買う必要があり、化学薬品を扱う必要があることに落胆しました。
実際、思ったよりも簡単でした。PCB の設計を作成するために、KiCAD のチュートリアルをいくつか見ました。中古のレーザー プリンターを 40 ドルで購入し、穴のない通常のアイロンを 5 ドルで購入し、最も高価なツールはドリル プレスで 75 ドルでした。化学薬品はそれほど危険ではないことが判明しました。触れても皮膚を溶かすことはありません。
というわけで、4回目の試みでこのPCBを作りました。一番大変だったのは、実際にはんだマスクを適用することでした。この PCB が行うことは、センサー、ESP32、および Raspberry Pi を相互接続し、さまざまな部品に適切な電圧を供給することです。
アプリで現在のセンサーの読み取り値を示す派手なチャートは、ドローンの墜落を防ぐために分析するのが難しいことが判明しました.そこで、センサー データを記録する機能を追加し、飛行のビデオ レコードを使用してフレームごとに分析する Python スクリプトを作成しました。
以前にそれを行っていれば、前述の超音波センサーの故障によって引き起こされた問題の調査に費やす時間を大幅に短縮できたでしょう。
ある時点で、比較的安定した高さ、方向、および水平レベリング制御を達成しましたが、それでも水平方向のドリフトは回避できませんでした。また、IMU センサーのみを使用して水平方向のドリフトを取り除くことができることを誰かが知っている場合は、コメントでお知らせください。
いくつかの調査を行ったところ、一部のドローンが位置保持に GPS を使用していることがわかり、同じ手法を実装しようとしました。しかし問題は、それが外でしか機能しないということですが、外でも満足のいく結果を得ることができませんでした。その季節は風、雨、雪のひどい天候だったので、あまり挑戦せず、GPS でなんとかし、コンピューター ビジョンのアプローチを試みました。
ドローンの底面にカメラを設置し、OpenCV ライブラリを使ってこの青いマークを床に固定してみました。いくつかの試行と微調整の後、結果は次のとおりです。
https://www.youtube.com/watch?v=poqQmvoBlP8
これで、手動制御や文字列なしで一点にホバリングできます。これが私の中間目標であり、最終的に達成できたので、進捗状況を文書化して共有することにしました。
ドローンからアプリへのビデオ ストリームの転送も追加したので、コンピューター ビジョンを使ってさまざまなアプローチを試し、床に特別なマークを付けずに一般的な位置を保持したり、他の機能を作成したりできます。
現在の構成では、ドローンは次のように作られています。ESP32 は、高さ、方向、およびレベリング制御を担当しています。下部にある IMU センサーとレーザー距離センサーからデータを取得します。モーター コントローラーにコマンドを与えるだけでなく、アプリとの通信とカメラからのデータを使用した位置制御を担当する raspberry pi からコマンドを受け取ります。
誰かがコードを見ることに興味がある場合
適切に動作するように頻繁に実装を変更したため、コードはあまりきれいではありません。多分私は将来それをきれいにするでしょう:)
また、私はそれについてのビデオを作りました:
https://www.youtube.com/watch?v=3mAFEW0YOJ0
ご清聴ありがとうございました!乾杯!