5

要件の簡単な説明

(ここにはたくさんの良い答えがあります。すべてのおかげで、これが飛んだら更新します)。

検出器はトラックに沿って走り、曲線距離の関数として、いくつかの異なる物理パラメータをリアルタイム (決定論的) に測定します。ユーザーは、このプロセス中にボタンをクリックしてウェイポイントを「マーク」し、GUI を使用して各ウェイポイントの詳細を入力できます (人間の時間ですが、データ取得は継続されます)。

これに続いて、システムは取得したデータに対して一連の計算/フィルター/変更を実行し、各ウェイポイントに入力された制約を考慮します。このプロセスの出力は、曲線距離の関数としての一連の補正です。

プロセスの 3 番目の部分では、トラックに沿って再度実行しますが、今回はトラックを修正する物理システムに修正を書き込みます (やはり曲線距離の関数として)。

あなたの入力/コメント/警告に対する私の現在の考え

私が判断したいのは、PC + FPGA でこれを実行できるかどうかです。FPGA が「データ取得」を行い、PC で C# を使用してバッファからデータを読み取ります。ウェイポイント情報は、WPF/Winforms アプリケーションを介して入力し、データベース/フラットファイル/保留中の「処理」にストックすることができます。

処理には F# を使用します。

FPGA は、情報を物理マシンに「書き込む」ために使用されます。

私が現在予見できる問題の 1 つは、処理アルゴリズムがサンプリング周波数を必要とする場合、バッファするデータの量が大きくなりすぎる場合です。これは、処理の一部 (少なくともユーザー入力を必要としないビット) を FPGA にオフロードすることを意味します。残念ながら、唯一の前処理アルゴリズムはカルマン フィルターであり、FPGA で実装するのは難しいと私がググったところからわかりました。

フィードバックをお寄せいただければ幸いです。

更新 (追加情報はいつでもここに追加されます)

カルマン フィルターの入り口では、1 ミリ秒ごとに 1 回見ています。しかし、カルマン フィルターの反対側では、1 メートルごとにサンプリングすることになります。これは、ここで話している速度では 1 秒あたり約 2 になります。

したがって、より正確な質問は次のようになると思います。

  1. FPGAにカルマンフィルターを実装することは可能だと思わ れますが、 それがどのように可能であるかを理解するには、どちらの主題についても十分に理解していません.

  2. また、カルマンの FPGA 実装が 1 ミリ秒ごとに循環できるかどうかもわかりませんが、問題はないと思います。

  3. 私の理解が正しければ、FPGA には大量のメモリがありません。プロセスの 3 番目の部分では、(およそ) 4 x 400 の double の配列をルックアップ テーブルとして使用するために送信しますが、これは実行可能ですか?

  4. また、2 つのプロセス (データの読み取り/書き込み) を切り替えることは、FPGA を毎回再プログラミングすることを意味しますか、それとも 2 つのプロセスを切り替えるように指示できますか? (両方を並行して実行し、どちらか一方を無視することも可能かもしれません)。

  5. 私が見た別のオプションは、 Avalda FPGA Developerを使用して F# を VHDL にコンパイルすることです。

4

7 に答える 7

3

目標、顧客、予算、信頼性、期限について言及していないため、回答するのは難しいですが...

FPGAを忘れてください。別のソリューションでリアルタイム要件を満たせないことがわかっている場合を除き、設計、開発環境、およびインターフェイスを簡素化してください。

予算があれば、まず LabView を検討します。

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

LabView は、データ取得システムとユーザー GUI をすべて 1 台の PC で提供します。私の経験では、「実際の」プログラミング環境のように感じられないため、開発者はLabViewを選択しませんが、あなたが説明した問題には絶対にお勧めします.

コンパイル済み言語を使用することに決めた場合は、リアルタイム データ取得コンポーネントを RTOS を備えた組み込みターゲットに分離します。できれば、スケジュールとスレッドの分離に MMU を利用し、C で記述できるターゲットに分離します。実際の RTOS を取得すると、実行する必要があるプロセスを現実的にスケジュールでき、必要に応じてそれらをデバッグできるはずです! このオフターゲット システムは、定義済みのインターフェイスを使用してできるだけシンプルに保ちます。必要なデータを取得するのに十分なだけ行うようにしてください。

次に、メンテナンス用の共通インターフェイス ファイルを使用して、インターフェイスを PC GUI に実装します。PC へのデータ転送には、USB2 やイーサネットなどの標準インターフェイスを使用します。FTDI チップは、このようなことに最適です。

于 2009-02-23T03:01:55.633 に答える
2

トラックに沿って移動しているので、サンプリング周波数は10kHz以下であると想定する必要があります。12 Mb USB(フルスピード)でも、そのレートでデータをPCに簡単にオフロードできます。

数学データの本格的な処理には、Matlabが最適です。でもF#のことは聞いたことがないのでコメントできません。

4x400ダブルスは問題ありません。ローエンドFPGAでさえ、数百kbのメモリを備えています。

読み取りと書き込みを切り替えるために画像を変更する必要はありません。これはFPGAで常に行われます。

于 2009-02-13T19:21:17.947 に答える
2

ここに提案があります。

FPGA コンセプトをダンプします。TI から DSP 評価ボードを入手してください。あなたを満足させるのに十分なギガフロップスを備えたものを選んでください。ワーキング セットを格納するのに十分な RAM。

C でプログラムします。TI は小さな RT カーネルを提供します。

シリアルポートやイーサネットなど、何でも PC と通信します。

データが失われないように、PC で調理されたデータをハンドシェイクで送信します。DPS には十分な RAM があり、PC に上級の瞬間がある間、データを保存できます。

DSP のパフォーマンスに問題はありません。

リアルタイム ビットは RAM の MP を使用してリアルタイムで実行します。処理は高速で、GUI はタイム クリティカルではありません。

于 2009-02-23T05:20:16.627 に答える
1

私はあなたが説明したようなハイブリッドシステムを含む多くの組み込みエンジニアリングを行いました。処理する必要のあるデータレートとサイズでは、FPGAが必要かどうかは疑問です...PCに接続するための既製のデータ取得システムを見つけるだけです。

遭遇する最大の問題は、ハードウェアAPIの言語バインディングに関連していると思います。これまで、ハードウェアからデータを取得する最も簡単な方法であるという理由だけで、Cおよびアセンブリ(さらにはForth)で多くのソフトウェアを開発する必要がありました。

于 2009-02-23T02:00:27.167 に答える
1

すべての処理をオフラインで行うことができるように思えます。その場合は、オフラインが最適です。つまり、プロセスを 3 つのステップに分けます。

  1. データ収集
  2. データ分析
  3. データ分析に基づく物理システムの修正。

データ収集

標準インターフェースを使用してデータを収集できない場合は、おそらくカスタム インターフェースを使用する必要があります。インターフェイスについて詳しく知らずに FPGA を使用する必要があるかどうかを判断するのは困難です。カスタム インターフェイスの構築にはコストがかかるため、アプローチを選択するにはトレードオフの調査を行う必要があります。いずれにせよ、これが FPGA ベースの場合は、FPGA をシンプルに保ち、生データの取得に使用してください。現在のハード ドライブ テクノロジでは、後処理のために数百ギガバイトのデータを簡単に保存できるため、生データをディスク ドライブに保存します。必要がなければ、FPGA に 1 次元のカルマン フィルターを実装することはできません。

データ分析

ハードドライブにデータを取得したら、データ分析のための多くのオプションがあります. F# を既に知っている場合は、F# を使用してください。Python と Matlab には、利用可能なデータ分析ライブラリが多数あります。

このアプローチにより、すべての処理をリアルタイムで実行する必要があるソリューションよりも、データ分析ソフトウェアのテストがはるかに簡単になります。結果が正しくないように思われる場合は、データを再度収集しなくても、簡単に分析を再実行できます。

物理システムの修正

データ分析の結果を取得し、トラックに沿って検出器を再度実行し、インターフェイス カードを介して適切な入力を供給します。

于 2009-02-22T14:48:50.340 に答える
1

Microsoft Robotics Studio には、特にリアルタイムの側面で役立つリンク テキストがあるかもしれません。CCR - Concurrency Coordination Runtime には、既に多くの考慮事項があり、シミュレーション ツールは、分析に役立つモデルの構築に役立つ可能性があります。

于 2009-02-21T13:21:23.383 に答える
1

PCへの接続は何ですか?.Net は、ストリームを使用してデータ入力を処理できるため、ネットワーク ベースの接続である場合に適しています。

F# や大規模なデータ セットを含む関数型プログラミング言語に関する唯一の警告は、メモリの使用量です。それらは素晴らしく、数学的に証明可能ですが、多くの再帰からスタック オーバーフロー例外が発生すると、プログラムが機能せず、時間と労力を失うことになります。

C# は、GUI を開発する必要がある場合に最適です。winforms と GDI+ を使用すると、多大な労力を費やすことなく、何かを使用できるようになります。

データ レートと接続に関する詳細情報をお知らせください。さらにサポートを提供できますか?

于 2009-02-17T12:56:06.547 に答える