5

シリアルポート経由で通信している赤外線カメラ/トラッカーがあります。現時点では、これを行うために pyserial モジュールを使用しています。カメラは、追跡対象のオブジェクトの位置を 60 Hz のレートで更新します。追跡対象のオブジェクトの位置を取得するために、1 つの pyserial.write() を実行してから、pyserial.read(serialObj.inWaiting()) で着信応答をリッスンします。応答/位置が受信されると、while ループが再入力されます。私の質問は、このアプローチの信頼性と速度に関係しています。コンピュータが少なくとも 60Hz の速度で位置を取得する必要があります (そして、位置は UDP 経由でリアルタイム OS に送信されます)。これは Pyserial/Python でできることですか、それとも別の C ベースのアプローチを検討する必要がありますか?

ありがとう、ルーク

4

3 に答える 3

1

これは、速度よりも遅延の問題です。

Python は常にメモリの割り当てと解放を実行しますが、データが再利用される場合、同じメモリが C ライブラリによって再利用されます。したがって、OS (C ライブラリ / UDP/IP スタック) は、Python 自体よりも大きな影響を与えます。

RTOSマシンでシリアルポートを使用し、Cコードと事前に割り当てられたバッファを使用する必要があると本当に思います。

于 2011-10-02T21:46:00.503 に答える
0

私は、Python が問題なくデータに追いつくと考えています。私のアドバイスは、それを試してみることです.Pythonが遅れているように見える場合は、代わりにPyPyを試してください.PyPyは、内部ループのほとんどをマシンコードにコンパイルしてCのように高速化するPythonの実装です.

http://pypy.org/

于 2011-10-02T22:01:01.523 に答える
0

Pythonは順調に進んでいるはずですが、最善の方法は、1 秒あたりの読み取り数を監視することです。1 秒ごとに読み取りが完了した回数をカウントし、この数が少なすぎる場合は、パフォーマンス ログなどに書き込みます。また、pyserial 読み取り呼び出しがブロックされているため、I/O 部分を python プログラムの残りの部分 (存在する場合) から分離することを検討する必要があります。

于 2011-10-03T00:42:36.023 に答える