Closed yasuohayashibara closed 9 years ago
@yasuohayashibara
返信遅れてしまって申し訳ありません。
1)コンピュータとのシリアル通信に関して
int sleep = ReadSerial(); // get character(sleep time)
↑ カンマが入力されるまで受信する.(プロトコルの最後にカンマが入るか確認して下さい.)
SerialErrorCheck();
↑ \nが入力されるまで待つ,(これが前後にあるので読み飛ばしが発生するおそれがあります.)
2)サーボモータの制御時間に関して
SetTimeAndPosition(0x01, servo1_angle, servo1_time);
SetTimeAndPosition(0x02, servo2_angle, servo2_time);
wait_ms(sleep); // sleep(ms)
↑ wait(sleep+max(servo1_time, servo2_time))の方が良いと思います.
(maxという関数があるかどうか確認していませんが...)
wait(sleep + std::max(servo1_time, servo2_time))に変更しました。
一番重大だったboostのシリアル受信のバグも無事デバッグ出来て、GAで一脚ロボットを動作させることが出来ました。
問題は解決したのでcloseします。
ありがとうございました。
大学院生の勉強会でソースコードを読んだので,その時に気づいたことを連絡します.
1)コンピュータとのシリアル通信に関して
int sleep = ReadSerial(); // get character(sleep time) ↑ カンマが入力されるまで受信する.(プロトコルの最後にカンマが入るか確認して下さい.) SerialErrorCheck(); ↑ \nが入力されるまで待つ,(これが前後にあるので読み飛ばしが発生するおそれがあります.)
【参考】fscanf関数 http://www.eleki-jack.com/arm/2010/12/mbed-5.html
2)サーボモータの制御時間に関して
SetTimeAndPosition(0x01, servo1_angle, servo1_time); SetTimeAndPosition(0x02, servo2_angle, servo2_time); wait_ms(sleep); // sleep(ms)
↑ wait(sleep+max(servo1_time, servo2_time))の方が良いと思います. (maxという関数があるかどうか確認していませんが...)
以上です.