Open Nobu19800 opened 7 years ago
すみません,わかっていたことなのですがサボっていました.
これはcoil::usleepのせいですね.
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プロジェクトでは問題点かもしれませんね.
わざわざテストまで作っていただいてありがとうございます。怖い人ですみません。 とりあえず、coil::usleepは改善できれば改善する方向で考えたいと思います。
Windows 8.1とUbuntu 14.04上で同じプログラムを書き込んだArduinoを接続した状態でRTnoProxyを起動して動作確認をしているのですが、時間を計測したところWindowsの方がonExecuteに7倍ぐらい時間がかかります。
何か原因に心当たりがあるようでしたら教えていただけないでしょうか。