- 追加された行はこの色です。
- 削除された行はこの色です。
[[2012b]]
目次
#contents
*ロボット [#xd9344e7]
**紹介・特徴 [#n6d53054]
分解し組み直すことでできなかったため、初期を基本に組み上げた。
#ref(robo01.jpg);ロボットを正面から見た写真
このようにベースが最初のロボットである。
#ref(robo02.jpg);
.
.
#ref(robo03.jpg);
アーム部分はボールが零れないようにレゴを使い固定した。
また、ボールを押し出す際に押し出せるようにアーム内部にレゴを組み込んだ。(写真はうまく撮ることができなかった)この部分を用いることでボールを押し出し、ゴールを決めることに成功した。
そして、側面はこのようになっている。
#ref(robo04.jpg);
.
.
#ref(robo05.jpg);
全体として、小型化に失敗してしまったが、初期のものより多少は小さくなっていると思う。
***反省 [#oaa82d02]
**反省 [#oaa82d02]
-初期の形を崩すことができず、初期の型から少しだけ小さくなっているだけになった。
-アームを追加することでボールを運ぶことには成功したが、ポールのことを忘れていてぶつかってしまった。
-周りの人のロボットの多くは動力を縦にして組むことでサイズを小さくしていたので次回はその発想を生かしたい。
***次回のために [#ob59e0ab]
**次回のために [#ob59e0ab]
-課題をよく読み、ロボットの知識を持った人にロボットの改造の仕方を学んでおく。
-記憶に残るもので、なおかつイメージ通りに動かせるようなものを作る。
-前もってイメージを作り、周りにも意見をもらうことでより質の高いロボットを作る。
*課題内容 [#abc4073f]
※先生のページのコピーです。
図のようなコースを各自で作成した上で、次のような動作をするロボットを作成せよ。
-1人目
++スタート地点から出発し、スタート地点外のすぐ近くに置かれたピンポン玉をつかむ。
++ピンポン玉をつかんだら速やかにスタート地点の境界の黒線に戻り、そこから黒線に沿って動いてゴール地点を目指す。ただしT字路では、直進、右折、左折を正しく判断させること。また、曲線部中央の障害物に接触しないようにすること。
++ゴール地点に到達したら、ゴールエリア外からピンポン玉をゴールにシュートする。
ただし、どうしてもエリア外からのシュートが難しい場合は、エリア内からシュートした後、エリアから出てもよい。
-2人目
++上の動作でスタートとゴールを逆にして同様の動きをするプログラムを作成せよ。ロボット本体は共通のものを使うとする。
#ref(2012b/Mission/2012b-mission1.png,100%,課題1のコース)
**課題達成のために [#z32adad4]
交差点の数を数え、ある回数でシュートするプログラム。
そして交差点を通過するためのプログラムを作るべきと感じたが、作成することができなかった。そのため時間指定により動くロボットを作った。
黒い線の右を通るか、左を通るかを切り替えることで交差点に悩まないようにした。
*プログラム [#id8269ae]
**プログラム内容 [#x9b22d78]
上に書いたようなプログラムを作ろうとしたが失敗したため、時間指定により動くプログラムを作った。
++黒い線上の場合は右に曲がり、白い線上の場合は左に曲がるプログラム。
++黒い線上の場合は左に曲がり、黒い線上の場合は右に曲がるプログラム。
このふたつを時間によって使い分けゴールまでライントレースを行った。
これにより、交差点等で悩むことがない。
#ref(robo06.jpg);
***プログラムのイメージ画像[#r47803dc]
&ref(robot.1.jpg);
この図のようなやり方でライントレースを行う。
&ref(robot3.jpg);
動かした例としてはこのようになる。
そして、ゴール前まで運ぶと
#ref(robot2.jpg);
という動きに切り替わる。
この動きを説明すると
+まず、(1)のような動きでゴールの方向を向く。
+向いたらロボットを停止させ、ボールを落ち着ける。
+アームをあげて、押し出す姿勢を作る。
+そして、(2)のように動く。この動きは100%で行い、ボールを強く押し出す。
+最後に枠外へ出るためにバックする。
***作成したプログラム [#d7898fd3]
#define right01 OnFwd(OUT_C,40);OnRev(OUT_B,20);
#define left01 OnFwd(OUT_B,40);OnRev(OUT_C,20);
#define THRESHOLD 45
#define STEP 10
#define left00 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);Wait(1200);
#define mae00 OnFwd(OUT_BC,20);Wait(600);
#define right00 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);Wait(400);
#define short_break00 Off(OUT_BC); Wait(1000);
#define mae01 OnFwd(OUT_BC,20);Wait(400);
#define short_break01 Off(OUT_BC); Wait(500);
#define right01 OnFwd(OUT_C,40);OnRev(OUT_B,20);//右に前進
#define left01 OnFwd(OUT_B,40);OnRev(OUT_C,20);//左に前進
#define THRESHOLD 45//閾値を設定
#define STEP 10//一回の判定で動く時間
#define left00 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);Wait(1200);//ボール回収時の左折
#define mae00 OnFwd(OUT_BC,20);Wait(600);//ボール回収時の前進
#define right00 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);Wait(400);//ボール回収時の右折
#define short_break00 Off(OUT_BC); Wait(1000);//一時停止
#define mae01 OnFwd(OUT_BC,20);Wait(400);//ボール回収時の前進
#define short_break01 Off(OUT_BC); Wait(500);//発射時の一時停止
task main()
{
/*ボールを回収するプログラム*/
left00;
mae00;
short_break00;
OnFwd(OUT_A,20);Wait(300);Off(OUT_A);
mae01;
right00;
SetSensorLight(S3);//光センサーを起動
short_break01
/*タイマーをセットし起動*/
long time1,timeA;
/*タイマーの初期化*/
time1 = 0;
timeA = 0;
time1 = CurrentTick();
/*指定時間の間黒線上なら左、白線上なら右へ曲がるプログラムで移動*/
while(5000 >= timeA)
{ //5秒間繰り返す
timeA = CurrentTick()-time1;
if(SENSOR_3 < THRESHOLD)
{
left01;
}else
{
right01;
}
Wait(STEP);
}
/*ここで黒線上なら右、白線上なら左へ曲がるプログラムに切り替える*/
short_break01
OnFwd(OUT_C,30);Wait(300);//切り替えが失敗しないようにプログラムの切り替え前に右側に振り切る
long time2,timeB; //二つ目のタイマーを作成
/*タイマーの初期化*/
time2 = 0;
timeB = 0;
time2 = CurrentTick(); //タイマーを起動
while(9000 >= timeB)
{ //9秒間繰り返す
timeB = CurrentTick()-time2;
if(SENSOR_3 < THRESHOLD)
{
right01;
}else
{
left01;
}
Wait(STEP);
}
/*ここで再び最初のプログラムに切り替える*/
short_break01;
OnFwd(OUT_B,30);Wait(300); //切り替えが失敗しないように左に振り切る
long time3,timeC; //三つ目のタイマーを作成
/*タイマーの初期化*/
time3 = 0;
timeC = 0;
time3 = CurrentTick(); //タイマーを起動
while(26000 >= timeC)
{ //26秒間繰り返す
timeC = CurrentTick()-time3;
if(SENSOR_3 < THRESHOLD)
{
left01;
}else
{
right01;
}
Wait(STEP);
}
/*ゴールをするためのプログラム*/
short_break01;
right00;
Off(OUT_BC);Wait(600);//ここでボールのゆれをとめる
OnFwd(OUT_A,-30);Wait(500);Off(OUT_A);
OnFwd(OUT_BC,100);Wait(300);Off(OUT_BC);
OnFwd(OUT_BC,-100);Wait(400);Off(OUT_BC);
}
**反省 [#f85ab0ac]
++交差点を通るプログラムを書くことができなかった。交差点を判断、通過する動作をカウントで数え、ゴールを決めたかったが、イメージだけで、動かすことができなかったのがとてももどかしかった。
-交差点を通るプログラムを書くことができなかった。交差点を判断、通過する動作をカウントで数え、ゴールを決めたかったが、イメージだけで、動かすことができなかったのがとてももどかしかった。
++時間を指定するやり方もこのやり方では電池によってずれてしまうだろうと感じた。
-時間を指定するやり方もこのやり方では電池によってずれてしまうだろうと感じた。
そのため、ゴールの斜めから右を向かせるようにして、多少のズレならゴールするようには意識したが、解決はしていないと思う。
++時間指定によるプログラムのため、応用が利かず、電池の消耗により、失敗することがでてきてしまう。つまり、安定性にかけている。
-時間指定によるプログラムのため、応用が利かず、電池の消耗により、失敗することがでてきてしまう。つまり、安定性にかけている。
**今後のために [#k9c3c363]
課題のページをみんなが作ると思うので、それをよく見て、理解することで次回につなげることができると思っている。また、交差点のプログラムの授業を振り返り、課題としてやっていこうと考えている。
-課題のページをみんなが作ると思うので、それをよく見て、理解することで次回につなげることができると思っている。また、交差点のプログラムの授業を振り返り、課題としてやっていこうと考えている。
-一つ一つのプログラムの意味を理解することでより正確に作ることができると感じたので行動していきたい。
*全体をとおして [#r8742b22]
***反省・感想 [#g0705045]
ロボットに関する知識も、プログラムに関する知識も足りないと痛感した。
期末までにはこの2つの知識をなんとしても得ることで、満足のいくものを創りあげたい。
また、自分の動かしたいもの、作りたいもの、イメージしていたものとの違いをとても感じている。この違いをなくせるようにしていきたいと思う。
そして、過去の先輩やネットから多くの情報を得られるので、それをコピーし、動かすことで知識を自分のものにしていきたい。