- 追加された行はこの色です。
- 削除された行はこの色です。
[[2019a/Member]]
[[#adc6e636]]
目次
#contents
*課題について [#zbc4d0e4]
**課題内容 [#a8d8a0f8]
**戦略 [#n4aee92c]
*ロボットについて [#h66aa068]
**カブトロボ [#wea32682]
**クワガタロボ [#j48e441f]
*プログラミングについて [#s723a639]
**定義の設定 [#rdfcc3ec]
以下、defineを使用し定義したプログラミングである。
***値 [#oc2ce9bd]
***動作 [#i6ce8b6a]
**サブルーチン関数の設定 [#i12ffb23]
***ライントレース [follow_line] [#j80370e9]
この関数は光センサーでコースの線の明度を計測し、~
条件に沿って指定した動作をしながら線上を動ていくものだ。~
以下がその関数である。~
-左側の直線トレース
sub follow_line_l()
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<MOVE_TIME){
if(SENSOR_1>W1){
rot_r;t0=CurrentTick();
}
else if(SENSOR_1>W2){
turn_r;t0=CurrentTick();
}
else if(SENSOR_1>G){
go_straight;t0=CurrentTick();
}
else if(SENSOR_1>B1){
turn_l;t0=CurrentTick();
}
else{
rot_l;
}
}
}
-右側の直線トレース
sub follow_line_r()
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<MOVE_TIME){
if(SENSOR_1>W1){
rot_l;t0=CurrentTick();
}
else if(SENSOR_1>W2){
turn_l;t0=CurrentTick();
}
else if(SENSOR_1>G){
go_straight;t0=CurrentTick();
}
else if(SENSOR_1>B1){
turn_r;t0=CurrentTick();
}
else{
rot_r;
}
}
}
詳細について述べていく。今回は左側直線トレースを取り上げる。~
光センサーがコースの線路の明度を計測。明度ごとに設定された命令をこなす。~
明度と命令の設定は以下。~
#ref(2019a/Member/ohta/Mission2/表.png,50%,ライン)
この表を図化したものが以下である。~
緑→が前進、オレンジ→が回転、青→が旋回を示している。~
(*見やすくするため、〇の中の数字は定義した値にしている。)
#ref(2019a/Member/ohta/Mission2/ライン制御.png,50%,ライン)
「follow_line_l」をフローチャート化すると次のようになる。
#ref(2019a/Member/ohta/Mission2/チャート改.png,65%,チャート)
始めにCurrentTickをt0に(リセット)する。~
次に「CurrentTick()-t0<MOVE_TIME」によってCurrentTickの計測時間が~
MOVE_TIME(250)を超えるまでwhileの中をループし続ける。~
while文の中にはif文、else文で構成されていて、光センサーの値によって処理が~
異なるようになっている。光センサーの値が43より大きい値の時(黒以外の時)~
CurrentTickの値は命令遂行後、常にリセットされ、ループは継続される。~
しかし光センサーの値が45以下の時(黒の時)、CurrentTickはリセットされない。~
この状態が一定の時間(MOVE_TIME)続くことで、交差点であると判断し、~
このループから抜け、止まる構造となっている。~
***一時停止 [short_brake] [#k9d9ee68]
***後進 [back] [#kb6e37bf]
***球のギャッチ [arm_down] [#hebd3031]
***球のシュート [shoot] [#y4aa30b8]
**メインプログラム [#ee4940a2]
***カブトver. [#uc771d5d]
task main()
{
Off(OUT_A);
go_straight;
Wait(1000);
Off(OUT_BC);
follow_line_l();
short_break();
rot_r;
Wait(400);
Off(OUT_BC);
go_straight;
Wait(800);
Off(OUT_BC);
arm_down();
turn_r;
Wait(3500);
Off(OUT_BC);
shoot();
Wait(1000);
rot_r;
Wait(3800);
Off(OUT_BC);
go_straight;
Wait(6600);
Off(OUT_BC);
arm_down();
back(3000);
OnRL(0,-SPEED_L);
Wait(300);
Off(OUT_BC);
shoot();
}
***クワガタver. [#t17493b1]
task main()
{
go_straight;
Wait(1000);
Off(OUT_BC);
rot_l;
Wait(2800);
Off(OUT_BC);
go_straight;
Wait(3000);
Off(OUT_BC);
rot_l;
Wait(4500);
Off(OUT_BC);
go_straight;
Wait(3000);
turn_l;
Wait(8700);
Off(OUT_BC);
Wait(27000);
OnFwd(OUT_A,50);
Wait(700);
OnRev(OUT_BC,60);
Wait(700);
Off(OUT_BC);
shoot();
}
*感想 [#q27b2dd6]
**ロボットについて [#j1247e19]
**プログラミングについて [#sae6b3ab]
**ロボコンの結果について [#d3103ef1]
**この講義を通して [#kd0bcbb3]