open-rdc / One_Legged_Robot

One legged robot programs.
GNU General Public License v3.0
1 stars 0 forks source link

通信とサーボモータの制御時間 #2

Closed yasuohayashibara closed 9 years ago

yasuohayashibara commented 9 years ago

大学院生の勉強会でソースコードを読んだので,その時に気づいたことを連絡します.

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という関数があるかどうか確認していませんが...)

以上です.

KoheiIzumi commented 9 years ago

@yasuohayashibara

返信遅れてしまって申し訳ありません。

1)コンピュータとのシリアル通信に関して

int sleep = ReadSerial(); // get character(sleep time)
↑ カンマが入力されるまで受信する.(プロトコルの最後にカンマが入るか確認して下さい.)
SerialErrorCheck();
↑ \nが入力されるまで待つ,(これが前後にあるので読み飛ばしが発生するおそれがあります.)
  1. プロトコルの最後にカンマが入るように文字列生成の部分を修正しました。
  2. 最後のSerialErrorCheckは不要だったので消しました。
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で一脚ロボットを動作させることが出来ました。

KoheiIzumi commented 9 years ago

問題は解決したのでcloseします。

ありがとうございました。