画像は、 Anton Lopatinのブログから取得され、わずかに編集されています。 まあ、非常に刺激的です。
こんにちは、コミュニティ
最後のトピックでは、 ARMマイクロプロセッサCortex M3およびMATLAB / Simulinkを使用して、組み込みシステムのモデル指向設計に入門しました。 潜水を続け、タスクを複雑にします。 タイトルイラストのコンセプトがまだ遠いのは残念ですが、最も重要なノードの1つである砲塔ホーミングシステムの開発プロセスを示してみます。
以下はかなりの数の画像ですが、それらがなければ退屈で明確ではありません。
ハードウェア
最初のトピックとは異なり、次のようになりました。
- aimaginからタイの友人からFiO Stdデバッグボード。 それなしでは、Simulink用のRapidSTM32ライブラリでの作業は少し困難です。 RapidSTM32のハードウェアキーとして、および制御モジュールとして使用されます。 ボードには、STM32F103RET6の石があります。
- 2つのシンプルなサーボモーターSG-5010
- WEBカメラLogitech HD Webcam C270 しかし、レビューや写真ほど魅力的ではありません。
- 一対の抵抗器、配線、コネクタ、ブレッドボード、古いプリンターの電源、ワットマン紙のゴムバンド、銅線、ミニUSBケーブル、ラップトップ、そして最も重要なことは、セーフティシート(Uncle Sasha製、ベッドとして使用)の自家製はんだごてホルダー。
美しいコンセプトとは別の違いは、私たちのクラフトにとって「膝の上に組み立てられる」というコンセプトが可能な限り現実に近いということです。 急速な発展の顕著な例。 高速、安価、効率的。
問題とサブタスクのステートメント
主なタスクは、ターゲットをキャプチャおよび追跡する機能を実装することです。 目標を達成するには、次のことを行う必要があります。
- PCとの接続を確立します。
デバイスはHIDとして認識され、USB経由でラップトップをリッスンします。 - ホーミングヘッドを機械化します。
ダイオードの点滅を停止し、サーボに移動します。 メカトロニクスで働く知恵の理解の古典。 - 鉄の側に制御システムを作成します。
毛皮。 コンポーネント+ HILは、鉄の側により複雑な制御アルゴリズムを必要とします。 少なくともPIDコントローラーの使用。 TAUは私たちのすべてです! - ビデオを認識し、ホスト側で制御信号を発行するためのアルゴリズムを実装します。
オブジェクトを追跡するには、このオブジェクトを識別する必要があります。 今のところ、私のラップトップがこれを行いますが、将来的にはこのタスクをARMの強力な肩に移すことが可能になるでしょう。 ここでは、TI OMAP3530プロセッサのbigleボードを詳しく見る価値があるかもしれません。 それ以外の場合は。
ホスト側モデル
ビデオ処理および制御信号の発行の機能が割り当てられた折りたたみモデルは、次のようになります。
チャネルに分割されたビデオ信号は、検出および処理サブシステムに送信されます。 その後、出力信号はUSB経由で制御ボードに送信されます。
特定の波長のレーザーによってオブジェクトが強調表示されているとします。 ビデオ認識サブシステムの主なタスクは、特定の色調の選択、起こりうる干渉の除去、オブジェクトの位置に関する簡潔な信号の発行です。 「ブル」には、赤いスカーフではなく、緑色を使用しますが、これもそれほど重要ではありません。 ここでムーブメントを縛ることができます...
検出サブシステムは次のようになります。
フィルターサブシステムは次のようになります
開発プロセス中にビデオ認識に慣れたため、最も単純なアルゴリズムを選択しました。 分割されたビデオ信号は、指定された条件に応じて(RGBパーセンテージの代わりに)trueまたはfalseを返す条件の分岐を通過します。 数値からわかるように、緑色に注目しました。
システムの出力では、ビデオではなく、ゼロのフィールドとユニットの閉じた島からマトリックスを取得します。 受信した情報の処理サブシステムは、受信した「島」の領域と中心を決定し、境界と同等の円でそれらの輪郭を描き、マトリックスの中心からオブジェクトの中心までの距離も決定します。 鉄の側では、最大の島の行と列、および島の数とともにエラーが送信されます。 これと同じnum == 0の場合、タレットはスタンバイモードになり、地形の水平水平スキャンを実行します。 エラーは、画像の絶対中心からではなく、長方形の「ゼロゾーン」の境界からカウントされます。 このゾーン内では、オブジェクトは「キャプチャされた」と見なされ、カメラはその位置を固定します。 追加の構造はすべて元のビデオに合わせて調整され
追加のグラフィックスとエラー定義を描画するためのサブシステムは次のようになります。
Simulinkは、プログラムの新しいバージョンをリリースする前に、 "Reglace"とマークされたブランドのブロックを交換する必要があることを事前に思い起こさせてくれます。 そうしないと、モデルと互換性がなくなります。
実行中のSimulinkへのバインドはオプションです。 同じSimulink Coderを使用して、C ++コードを生成し、WindowsとLinuxの両方のスタンドアロンアプリケーションを構築できます。 私はまだこれが得意ではないため、アクセラレータモード、つまり、実行速度を上げるための部分コンパイルモードで動作するSimulinkモデルに限定しました。
アイアンサイドモデル
マイクロコントローラーに注ぐためのコードが生成されるSimulinkモデルは、次の図のようになります。 単一のクロッキングで実行されます。これは、更新後のモデルのすべてのブロックで同じ色が強調表示されていることから明らかです。 前述のように、加算や乗算などの基本ブロックに加えて、モデルには2つのPIDコントローラーが含まれています。 むしろ、微分成分の係数がゼロであるため、PIでさえもです。
パラメータは経験的に手動で選択されました。 しかし、より深刻なシステムの場合、MATLABには、必要な制御パラメーターを設定できる実験データに基づいて線形制御システムを「調整」するための特別なControl System Toolboxがあります。
小さな比例係数とゼロ微分は、システムの各要素が寄与するかなり顕著な時間遅延によるものです。
SaturationブロックとDead Zoneブロックの割り当ては、ピクトグラムのグラフから明らかだと思います。
最初は、「スタンバイ」モードと「戦闘」モードの実装は有限状態マシンを使用して考案されましたが、問題はより簡単に解決できることが判明しました。 したがって、 FSMはまだ登場していません。 この概念は、エレガントなStateflowツールを使用してSimulink内に実装され、MKに簡単に流し込まれます。
コードの生成、コンパイル、および入力は、MATLABから完全に実行されます。 Keilは個別に実行する必要さえありません。
開発プロセス自体
上記のすべては、開発段階ではなく、大部分がすでに結果です。
servはありませんでした(ハードウェアコンポーネント自体の欠如を読んでください)が、システム操作アルゴリズムはこのようないモンスターのようなドラフトモデルで作成されました。
その後、彼女は次のようになりました。
これらのモデルの主な特徴部分は、PCのみを使用してシステムの動作を評価することを可能にしたメカニカルサブシステム(前の図で青で強調表示)です。 私の場合、サーボの回転角速度とレギュレーターのPI係数を最適化することが重要でしたが、システムの完全な機械的解析も可能です。
Solidworksのアセンブリは次のようになりました。
そして、これはアセンブリの動きのシミュレーションがSimulinkモデル内で既にどのように見えるかです:
Solidworks内のダイナミクスとスタティックをシミュレートするための非常に深刻なツールがありますが、私はまだMATLABとより密接に連携しています。 アセンブリは、SimMechanics Linkユーティリティを使用してエクスポートされます。 ここで彼女について多くのことが書かれています。
一言で言えば、「鉄」が到着したとき、私はすでにほとんどすべての準備ができていました。 不要なものをすべて削除し、モデルを2つのコンポーネント(ホストとターゲット)に分割しました。
試験結果
そして最後に、フィールドテストのビデオ:
はい、かなりいビルドです。 スーパーダイレクトハンドの賞品については、確かに主張していません。
ノートパソコンの画面では次のことが起こります。
結論
ポジティブ:
- 開発には最小限の時間とリソースしかかかりませんでした。 すべてが問題なく機能し、簡単にアップグレードできます。 「トリガー」を実装するのは簡単なことではありません。 ボードにはさらに
100500個のポートが残っています。 オブジェクトの中心がキャプチャゾーンにあるときに条件ブランチを追加するだけで、ログがフィードされます。 1を特定のポートに移動し、チェーンからレールガンを下げてショットをシミュレートします。
有益なネガティブ:
- 猫をターゲットとして使用することに失敗しました。 グレーのカモフラージュは検出できず、マークを付けようとして失敗しました。 さらに、彼はまた騒々しいサーブを恐れています。 私は自分ですべてを体験しなければなりませんでした。
- 作業の速度と安定性を高めるには、さらに改善する必要があります。 機械部分は最も不機嫌でした。 サーボキャリブレーションは、試運転に割り当てられたほとんどの時間を要しました。 プロジェクトのさらなる発展に伴い、高品質のデバイスに切り替えることが必要になります。場合によっては、その後の改良と独自のフィードバックの導入が必要になります。
- 照明や周囲の背景に応じてカメラの明るさ設定が自動的に変更されることに対処できませんでした。 これが認識システムの選択性に影響したことは明らかです。 将来的には、制御ボードに直接接続した別のカメラモジュール(対応するバックライトでIR範囲に焦点を合わせる可能性があります)を使用する予定です。
- 多大な喜びと無限の感謝を込めて、私はコメントで合理的な批判に留意します。 ここに追加します!
更新:
UPD#1プロジェクトソース
ホストとターゲットのMATLABモデル
Solidworksでビルドする
UPD#2国内メーカー
愛国的なアイデアに馴染みのない人(および配信にSimmechanicsを使用していない人)には、MSTUのロボットが生産前にメカニックの数学的モデリングに使用する国内(より強力ではない) UMツール「Universal Mechanism」を使用できます。 そしてそれらだけではありません。 デモはこちら 。
彼はSimulinkと話すことができます。 詳細については、haupraiser yupychにお問い合わせください 。