飛行ロボットを作成する

約1年前、CROC 「Flying Robots」からの競争に関するメッセージがありました。 自律飛行ロボットの設計に参加し、経験を積むことが、私にとって興味深いものになりました。 残念ながら、時間がないために競争から離れなければなりませんでしたが、問題を解決することに関心が残っていました。 簡単に言えば、競技の課題は、ポイントAからポイントBに飛んで、壁の穴を飛んで戻ります。







何が起こったのか、そしてこの段階でカットされた。





この問題の解決策は明らかに2つの部分に分かれています。 1つは「壁にぶつかることなく壁に沿って飛行する」方法で、2つ目は着陸です。 ロボットを宇宙に向けるために、超音波距離計を使用することにしました。 少なくとも3つのセンサー(下、前、左、前、右)が必要であることがわかりました。 着陸はカメラの助けを借りて行われる予定でしたが、これはまだポイントに達していませんでした。



すべてのロジックを搭載した完全に自律的なロボットを構築したかったのです。 実際、航空機の積載能力の問題、操作の容易さ、転倒への抵抗、低価格の問題から、同軸に配置されたネジを備えたおもちゃのラジコンヘリコプター、モデルHawkspy LT-711を選択することになりました。 あるサイトでは、彼は50グラムまで荷物を持ち上げることができると述べられていました。 そして、実験で実際に完全に充電されていないことが示されたように、彼は標準的な100グラムのチョコレートの半分を静かに育てました。



「壁に沿って」飛行するには、まず、高度を維持できる必要があります。 実際、この投稿でこのサブタスクの解決策を説明します。



ヘリコプター本体は簡単に取り外しでき、飛行制御を担当する電子機器をすぐに見ることができます。 ボードを詳しく調べた結果、無線受信機の出力とデコーダーの入力を接続することにより、制御信号の伝送に侵入できることがわかりました。





1-無線受信機の出力(デコードされた信号); 2-デコーダー入力(生成された信号を供給する); 3-地球; ボードの背面で、ピン1と2を接続するトラックが切断されました。



したがって、既存の制御回路を使用でき、すべてをゼロからはんだ付けすることはできません。 しかし、このためには、制御信号を処理する必要がありました。 信号のリバースエンジニアリングの問題を解決します。







信号を観察した後、私はなんとか特徴的なパターンを特定しました。 写真は、マーキングのある典型的な信号を示しています。 その結果、信号が非常に単純にエンコードされていることが明らかになりました-4バイト。 コントロールパネルで遊んで信号の変化を観察すると、信号のどの部分が何に関与しているかを復元できました。 次のことが判明しました。





lt-ヘリコプター本体の電球をオン/オフします。 sm-ターボモード。



最も難しいのは、チェックサムを推測することでした。 チェックサムは2段階で考慮されることが判明しました。最初はバイトごとに信号が合計され、次に結果のバイトの上半分と下半分が合計されます。



この段階で、準備手順のほとんどが完了し、マイクロコントローラ用のファームウェアの書き込みを開始する時がきました。 stm32f4discoveryマイクロコントローラーが長い間横になっていたので、それを使い始めることにしました。 時間の大部分は、環境の設置と調整に費やされました。 MacOSを持っているので、ラップトップにlinaroとopenocdを含むarmovskiyツールチェーンをインストールする必要がありました。 周辺機器を操作するためのライブラリからの例の1つが採用され、基礎として変更されました。 信号をデコードおよびエンコードするためのサブルーチンが転送されました。 受信機が受信した信号は、マイクロコントローラープログラムによってデコードされます。 コントロールアクションの上下、左/右回転、前進/後退(およびその他)は個別の番号として表示されます。 この時点でそれらを変更するのは簡単です。 次に、エンコードが元の形式で実行され、ヘリコプターの通常のデコーダーに送信されます。



高さ測定の問題を解決するために、超音波距離測定センサーLV-MAXONAR-EZ0が使用されました 。 センサーは、UARTインターフェイスを介してマイクロコントローラーに接続され、インチ単位での可視性のコーン内のオブジェクトまでの距離を与えました。

したがって、ファームウェアは以下を実行しました。高さセンサーから読み取り値を取得し、 PIDコントローラーを使用してネジの回転速度を制御しました







センサーの動作をデバッグするために、STMマイクロコントローラ用の非常に便利なツールSTM Studioがあり、プログラムの動作を中断することなく変数の値を監視できます。 確かに、それはWindowsでのみ動作しますが、USBデバイス(デバッグボード)を投げて、仮想マシンにドライバーをインストールしても問題はありません(私はPDを使用しました)。 信号は仮想シェルを完全に通過しますが、変更や目に見える遅延はありません。そのため、センサーの動作をオンラインで監視することにより、何が起こっているのかを非常に容易に把握できます







テスト飛行に関しては、追加されたすべての電子機器の重量が50グラムを超えていることが判明したため、ヘリコプターは低く離陸し、ほぼ即座にゆっくりと悲しげに地面に移動しました。 このすべての電子機器の重量を減らす方法を考えなければなりませんでした。 チップを自分でボードにはんだ付けすることはできないので、デバッグボードを同じチップのより小さくて軽いMINI-m4に交換することで問題を解決しました。 ファームウェアを再プログラムする必要は特にありませんでした。いくつかのパラメーターを置き換え、使用するピンの名前を変更します。







設計全体のデバッグは、PIDコントローラーのパラメーターを選択することで構成されていましたが、ヘリコプターの最も単純な数学モデルを記述し、diffurシステムのオイラー標準法で解決することで、ヘリコプターの動作が明らかになりました。 彼が振動し、最終的に静止状態になることは明らかでした。 したがって、振動状態から早期に抜け出すためのパラメータの選択には、それほど時間がかかりませんでした。 テスト飛行の過程で、ヘリコプターを鋭く植えなければならないことがあったため、いくつかの詳細を変更する必要がありました。 幸いなことに、このヘリコプターモデルのスペアパーツを見つけることは問題ではありませんでした。 最後のステップは、高さセンサーから取得したデータにフィルタリングを追加することでした。 飛行中に、ヘリコプターは時々少し落ちて、それから鋭く飛びました。 したがって、さらなる開発の最初のステップの1つは、テレメトリ記録機能の実装です。 判明したように、センサーは時々クラッシュし、明らかに間違った値を示しましたが、フィルタリングを追加することでこの問題を解決しました。



便宜上、ヘリコプターには2つのモードがあります。 ジョイスティックが範囲の上半分にある場合、ヘリコプターは1メートルの高さを保持し、ジョイスティックが下半分にある場合、これは着陸モードです。



Githubコード



映像



最も単純な数学モデル


マットモデル。PIDコントローラーの影響下でのヘリコプターの動作を想像できます。 なぜなら これに遭遇したことはありませんでしたが、さまざまなグラフを見ると、テスト飛行中のヘリコプターの挙動を予測できます。 PIDコントローラー係数をねじることも簡単です。これにより、時間を大幅に節約できます。 再コンパイルと再フラッシュが必要になるたびに。







モデルは非常に原始的で、一次元です。 誰かが改善のためのアイデアを持っているなら、私は聞いてうれしいです。






All Articles