17
実実実実実実実実実実実実実 LEGO Mindstorms NXT 実実実実実実実実WEB http://robot-programming.jp/ 実実実実実実 実実実実実 実実実実実 実実実実 ,,, E-mail [email protected]

■ ロボットを前進させるには ( モータ制御 1)

Embed Size (px)

DESCRIPTION

実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB : http://robot-programming.jp/ 著者: 藤吉弘亘,藤井隆司,鈴木裕利,石井成郎 E-mail : [email protected]. ■ ロボットを前進させるには ( モータ制御 1). モータの接続. NXT の出力ポート A と C にモータを接続. 左のモータ: OUT_A 右のモータ: OUT_C. 前進プログラムの PAD. 10 秒前進するアルゴリズム. 処理の流れ. - PowerPoint PPT Presentation

Citation preview

Page 1: ■ ロボットを前進させるには ( モータ制御 1)

実践ロボットプログラミングLEGO Mindstorms NXT で目指せロボコン!

WEB : http://robot-programming.jp/著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎E-mail : [email protected]

実践ロボットプログラミングLEGO Mindstorms NXT で目指せロボコン!

WEB : http://robot-programming.jp/著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎E-mail : [email protected]

Page 2: ■ ロボットを前進させるには ( モータ制御 1)

■ ロボットを前進させるには ( モータ制御 1)■ ロボットを前進させるには ( モータ制御 1)

Page 3: ■ ロボットを前進させるには ( モータ制御 1)

モータの接続モータの接続

• NXT の出力ポート A と C にモータを接続

左のモータ: OUT_A

右のモータ: OUT_C

Page 4: ■ ロボットを前進させるには ( モータ制御 1)

前進プログラムの PAD前進プログラムの PAD

• 10 秒前進するアルゴリズム

処理の流れ

Page 5: ■ ロボットを前進させるには ( モータ制御 1)

モータ制御によるロボットの前進 (p.42: forward.nxc)モータ制御によるロボットの前進 (p.42: forward.nxc)

Page 6: ■ ロボットを前進させるには ( モータ制御 1)

■ ロボットを回転させるには ( モータ制御 2)■ ロボットを回転させるには ( モータ制御 2)

Page 7: ■ ロボットを前進させるには ( モータ制御 1)

回転回転

• ロボットを右に回転させるには

逆方向順方向

OnFwd(OUT_C, 75); OnRev(OUT_A, 75);

Page 8: ■ ロボットを前進させるには ( モータ制御 1)

右回転プログラムの PAD右回転プログラムの PAD

• 右回転するアルゴリズム

右回転 前進

10 秒間保持

停止

処理の流れC のモータ順回転A のモータ逆回転

2 秒間保持

停止

Page 9: ■ ロボットを前進させるには ( モータ制御 1)

モータの制御2 (p.45: rotation.nxc)モータの制御2 (p.45: rotation.nxc)

Page 10: ■ ロボットを前進させるには ( モータ制御 1)

ロボットを 90 度回転させるにはロボットを 90 度回転させるには

• 90 度回転させるには?→ 保持させる時間とモーターパワーを調節する

0.5 秒保持しなさい

task main(){ OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC);

OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);}

Page 11: ■ ロボットを前進させるには ( モータ制御 1)

一周するには?一周するには?

 前進

回転 前進

回転

 前進

回転

 前進

回転

Page 12: ■ ロボットを前進させるには ( モータ制御 1)

一周するプログラムの PAD (p.47)一周するプログラムの PAD (p.47)

一周 前進

10 秒間保持

停止

処理の流れC のモータ順回転A のモータ逆回転

0.5 秒間保持

停止

4 回繰り返す

Page 13: ■ ロボットを前進させるには ( モータ制御 1)

プログラム(一周)プログラム(一周)

• 一周するには→ 前進と回転を 4 回繰り返せばよい

100 周するには

→ 前進と回転を 400 回繰り返えす?

2800 行のプログラムを書く?

とても面倒!

task main(){ OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);}

Page 14: ■ ロボットを前進させるには ( モータ制御 1)

繰り返し繰り返し

• 同じ処理を繰り返すときは for 文を用いる

変数 i が 4 より大きいと終了→ 4 回繰り返す( i=0, 1, 2, 3 )

初期値 条件 増分処理

for ( i=0; i<4; i++ ) {

繰り返す内容を記述する

}

Page 15: ■ ロボットを前進させるには ( モータ制御 1)

task main(){ OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC);}

プログラム(一周 : for 文)プログラム(一周 : for 文)

task main(){ int i; for(i=0; i<4; i++) {

OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC); }}

Page 16: ■ ロボットを前進させるには ( モータ制御 1)

無限ループ( while 文)無限ループ( while 文)

task main(){ int i;

while(true) { OnFwd(OUT_AC, 75); Wait(10000); Off(OUT_AC); OnFwd(OUT_C, 75); OnRev(OUT_A, 75); Wait(500); Off(OUT_AC); }}

• while 文の条件を true にする– 無限ループ:終わりのないくり返し

Page 17: ■ ロボットを前進させるには ( モータ制御 1)

■■  演習問題 4-5 (p.49)  ■■■■  演習問題 4-5 (p.49)  ■■

• スパイラルや星形の軌跡を描くロボットの動きを実現