私は2台のコンピュータ間にUDP接続を作成しました。 コンピュータAは4ミリ秒ごとに送信する必要があります。コンピュータBにパケットを送り、ロボットアームをどこにどのように移動させるかをBに伝える。 Bのコンピュータはアーム位置の速度と加速度と荷物と位置の間の誤差を返信します...Pythonを使用した確定的な時間ソケット接続の作成
Aコンピュータはうまく動作しますが、見えないCコードプログラムがありますが、ロボットのために私はPythonコードを受け入れるだけで働いています。 私は、マルチスレッドプログラムを使ってBコンピュータでそうしようとしてきました.1つのスレッドがエラーと位置を返す唯一の機能を持っています。
UDPパッケージ(teledirigido.fbk.send(...))を送信する時間を決定してから、スリープさせて、コード実行時間を4ミリ秒。
class enviaDeterministico(threading.Thread):
def __init__(self,teledirigido):
self.teledirigido = teledirigido
# thanks to mordi
threading.Thread.__init__(self)
self.t = timeit.time
def run(self):
while 1:
self.empieza0 = self.t.time()
self.empieza = self.t.time()
self.teledirigido.cond.acquire()
self.teledirigido.fbk.send(self.teledirigido.lectura.enviarAmpliado())
self.acaba = self.t.time()
time.sleep((0.004-(self.acaba-self.empieza)))
self.teledirigido.cond.release()
self.acaba0 = self.t.time()
print 'tiempo entre envios %.6f'% (self.acaba0-self.empieza0)
第一の問題は、スリープメソッドが存在しないということである "(0.004-(self.acaba-self.empieza))" 引数、Pythonインタプリタは言う:
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "./conclase.py", line 210, in run
time.sleep(0.004-(self.acaba-self.empieza))
IOError: [Errno 22] Invalid argument
もしI decsecを使用します。 milisecondsではなく、プログラムはエラーを返さない。
私が見つけた2番目と最後の問題は、タイミングがかなり決定的ではないということです。この小さなコードを実行して終了する、時間を節約したイベントをPythonで作る方法はありますか?
私は多くの問題を抱えていますが、私はこの質問に誰かが答えてくれれば幸いです。
皆様、ありがとうございます! stackoverflowと使用するすべての人々は素晴らしいです!
あなたのIDを英語に翻訳した方が役に立ちます。 –