sugarsweetrobotics / RTnoProxy

RTno = RTmiddleware + arduino. RTno project is developing PC library
http://www.ysuga.net/robot/rtm/rtc/rtno
Other
3 stars 1 forks source link

Windowsでの動作が遅い問題 #2

Open Nobu19800 opened 7 years ago

Nobu19800 commented 7 years ago

Windows 8.1とUbuntu 14.04上で同じプログラムを書き込んだArduinoを接続した状態でRTnoProxyを起動して動作確認をしているのですが、時間を計測したところWindowsの方がonExecuteに7倍ぐらい時間がかかります。

何か原因に心当たりがあるようでしたら教えていただけないでしょうか。

sugarsweetrobotics commented 7 years ago

すみません,わかっていたことなのですがサボっていました.

これはcoil::usleepのせいですね.

sugarsweetrobotics commented 7 years ago

https://github.com/sugarsweetrobotics/sleep_test

このレポジトリのコード,usleep(100)を30000回実行します.Ubuntu Linux 14.04のVM Ware FUSION上で実行して5.9秒ですが,Windowsだと計測不能です(時間がかかる).WIndowsでは1000回でも18秒くらいかかっています.VMのスペックはWindowsの方が上です.

実は,Transport.cppの中で,SerialPortに1ByteだけWriteするたびに100usecスリープしています.こうしないとArduino側がデータ漏れを起こしてしまうのです. これに対しては,WindowsではCOMポートに書き込んだ後にスリープをかける機能設定があったはずで,これをやれば性能が改善すると思います(coil::usleepよりはましだと信じているだけですが)

coil::usleepの性能が悪いのはOpenRTM-aistプロジェクトでは問題点かもしれませんね.

Nobu19800 commented 7 years ago

わざわざテストまで作っていただいてありがとうございます。怖い人ですみません。 とりあえず、coil::usleepは改善できれば改善する方向で考えたいと思います。