2018a/Member/iwa/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
#contents
*課題2 [#t7a78ea8]
下の図のようなコースを各チームで作成し、「ミッション」を...
#ref(2018a-mission2.png)
1,Aをスタート
2,Bを直進
3,Cで一時停止の後、直進
4,Dで一時停止の後、Xの空き缶をキャッチしてD地点に戻る
5,DからEに向かい、Eを直進
6,Fを左折
7,Gで一時停止の後、左折
8,Hで一時停止の後、右折
9,Iで一時停止の後、右折
10,Lを直進
11,Kを直進
12,Jで一時停止の後、空き缶をYに置きてJに戻りBに向かう
13,Bで一時停止の後、左折
14,Aで停止
*ロボットの概要 [#o2c74b41]
ロボットはなるべく前回の形をヒントにあまり変えないように...
最初はアームを上げ下げして缶を動かす仕組みではなく左右か...
*ロボットの画像 [#we50cd60]
**前面 [#a9334c75]
#ref(s_image1-min.jpeg)
アームが缶の大きさに対して非常に大きなっており、これは多...
そして、機体に必要な部品を前面に出さないことで部品に空き...
**背面 [#l0c49657]
#ref(s_image3-min.jpeg)
写真を見てみると課題1のときと同じような背面となっている...
**側面 [#x08ff52e]
#ref(s_image2-min.jpeg)
前面の説明で述べたように腕の可動部が2つあることがわかる。
写真から見て取れるが、機体が若干前へ傾いているのは重心が...
**センサー付近 [#a1347115]
#ref(s_image4-min.jpeg)
センサーと床が限りなく近くなっている。これは、遠くなれば...
光センサーを指示をだす部品から近くしてあるのは機体がプロ...
センサーはレゴの突起にはめることができる棒状の部品を使い...
*プログラミング [#j9c51b3b]
#define turnL OnFwd(OUT_A,30); OnFwd(OUT_B,-20); ...
#define turnR OnFwd(OUT_A,-20); OnFwd(OUT_B,30); ...
#define armUP OnFwd(OUT_C,-20); Wait(1500); Off(OUT_C); ...
#define armDW OnFwd(OUT_C,20); Wait(1500); Off(OUT_C); ...
左、右に曲がるプログラムはトレースするときに頻繁に使用す...
アームの上げ下げはプログラムをわかりやすくするために導入...
task main()
{
SetSensorLight(S2);
long t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Bを直進
}
}
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Cで一時停止...
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Dの直前の角ま...
}
}
RotateMotorEx(OUT_AB,-50,150,100,true,false);
Off(OUT_AB); //Dの直前の角...
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Dまでラインをト...
}
}
Off(OUT_AB);
Wait(1000); //Dで一時停止
armDW; //Xの空き缶をキ...
OnFwd(OUT_AB,-20);
Wait(300);
Off(OUT_AB); //バックしてライ...
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Eまでラインをトレ...
}
}
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Eを直進
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Fまでラインをトレース
}
}
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Fを左折
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Gまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Gで一時停止
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Gを左折
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Hまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Hで一時停止
OnFwd(OUT_B,20);
Wait(750);
Off(OUT_B); //Hで右折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Iまでラインをトレ...
}
}
OnFwd(OUT_B,20);
Wait(750);
Off(OUT_B); //Iで右折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Lまでラインをトレ...
}
}
OnFwd(OUT_AB,20);
Wait(500); //Lを直進
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Kまでラインをトレ...
}
}
OnFwd(OUT_AB,20);
Wait(500); //Kを直進
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Jまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Jで一時停止
OnFwd(OUT_A,20);
Wait(1000);
Off(OUT_A);
armUP //Yに空き缶を置く
OnFwd(OUT_A,20);
Wait(1000);
Off(OUT_A);
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Bまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Bで一時停止
RotateMotorEx(OUT_AB,-50,150,100,true,false);
Off(OUT_AB); //Bを左折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Aまでラインをトレ...
}
}
Off(OUT_AB); //Aで停止
}
トレースの仕方だが、他の班の多くが白、黒、グレー、・・・...
場合によって違うが白なら右、黒なら左に曲がるようにプログ...
交差点の判定の仕方は黒の判定所間をはかり0.3秒よりも長いと...
while (CurrentTick()-t0 <= 300) { //while内におい...
if (SENSOR_2 < 40){ //線の明るさが40...
turnL;
} else { //そうでなければ
turnR; //右にまがる
t0 = CurrentTick(); //はかっている時...
}
}
あとから思ったのが、トレースにつかうwhileから始まるプログ...
*結果 [#rbcca7ec]
良くも悪くも左右の動きを細かくしたため急な曲がり角も難な...
また、アームを大きくしたにも関わらず機体がぶれてしまって...
*感想・反省 [#r61e897d]
トレース自体は同じプログラムの繰り返しだったためにそこま...
トレースの判定を2色でしてみたが、それによってプログラム...
終了行:
[[2018a/Member]]
#contents
*課題2 [#t7a78ea8]
下の図のようなコースを各チームで作成し、「ミッション」を...
#ref(2018a-mission2.png)
1,Aをスタート
2,Bを直進
3,Cで一時停止の後、直進
4,Dで一時停止の後、Xの空き缶をキャッチしてD地点に戻る
5,DからEに向かい、Eを直進
6,Fを左折
7,Gで一時停止の後、左折
8,Hで一時停止の後、右折
9,Iで一時停止の後、右折
10,Lを直進
11,Kを直進
12,Jで一時停止の後、空き缶をYに置きてJに戻りBに向かう
13,Bで一時停止の後、左折
14,Aで停止
*ロボットの概要 [#o2c74b41]
ロボットはなるべく前回の形をヒントにあまり変えないように...
最初はアームを上げ下げして缶を動かす仕組みではなく左右か...
*ロボットの画像 [#we50cd60]
**前面 [#a9334c75]
#ref(s_image1-min.jpeg)
アームが缶の大きさに対して非常に大きなっており、これは多...
そして、機体に必要な部品を前面に出さないことで部品に空き...
**背面 [#l0c49657]
#ref(s_image3-min.jpeg)
写真を見てみると課題1のときと同じような背面となっている...
**側面 [#x08ff52e]
#ref(s_image2-min.jpeg)
前面の説明で述べたように腕の可動部が2つあることがわかる。
写真から見て取れるが、機体が若干前へ傾いているのは重心が...
**センサー付近 [#a1347115]
#ref(s_image4-min.jpeg)
センサーと床が限りなく近くなっている。これは、遠くなれば...
光センサーを指示をだす部品から近くしてあるのは機体がプロ...
センサーはレゴの突起にはめることができる棒状の部品を使い...
*プログラミング [#j9c51b3b]
#define turnL OnFwd(OUT_A,30); OnFwd(OUT_B,-20); ...
#define turnR OnFwd(OUT_A,-20); OnFwd(OUT_B,30); ...
#define armUP OnFwd(OUT_C,-20); Wait(1500); Off(OUT_C); ...
#define armDW OnFwd(OUT_C,20); Wait(1500); Off(OUT_C); ...
左、右に曲がるプログラムはトレースするときに頻繁に使用す...
アームの上げ下げはプログラムをわかりやすくするために導入...
task main()
{
SetSensorLight(S2);
long t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Bを直進
}
}
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Cで一時停止...
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Dの直前の角ま...
}
}
RotateMotorEx(OUT_AB,-50,150,100,true,false);
Off(OUT_AB); //Dの直前の角...
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Dまでラインをト...
}
}
Off(OUT_AB);
Wait(1000); //Dで一時停止
armDW; //Xの空き缶をキ...
OnFwd(OUT_AB,-20);
Wait(300);
Off(OUT_AB); //バックしてライ...
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Eまでラインをトレ...
}
}
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Eを直進
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Fまでラインをトレース
}
}
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Fを左折
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Gまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Gで一時停止
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Gを左折
t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Hまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Hで一時停止
OnFwd(OUT_B,20);
Wait(750);
Off(OUT_B); //Hで右折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Iまでラインをトレ...
}
}
OnFwd(OUT_B,20);
Wait(750);
Off(OUT_B); //Iで右折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Lまでラインをトレ...
}
}
OnFwd(OUT_AB,20);
Wait(500); //Lを直進
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Kまでラインをトレ...
}
}
OnFwd(OUT_AB,20);
Wait(500); //Kを直進
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Jまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Jで一時停止
OnFwd(OUT_A,20);
Wait(1000);
Off(OUT_A);
armUP //Yに空き缶を置く
OnFwd(OUT_A,20);
Wait(1000);
Off(OUT_A);
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Bまでラインをトレ...
}
}
Off(OUT_AB);
Wait(1000); //Bで一時停止
RotateMotorEx(OUT_AB,-50,150,100,true,false);
Off(OUT_AB); //Bを左折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick(); //Aまでラインをトレ...
}
}
Off(OUT_AB); //Aで停止
}
トレースの仕方だが、他の班の多くが白、黒、グレー、・・・...
場合によって違うが白なら右、黒なら左に曲がるようにプログ...
交差点の判定の仕方は黒の判定所間をはかり0.3秒よりも長いと...
while (CurrentTick()-t0 <= 300) { //while内におい...
if (SENSOR_2 < 40){ //線の明るさが40...
turnL;
} else { //そうでなければ
turnR; //右にまがる
t0 = CurrentTick(); //はかっている時...
}
}
あとから思ったのが、トレースにつかうwhileから始まるプログ...
*結果 [#rbcca7ec]
良くも悪くも左右の動きを細かくしたため急な曲がり角も難な...
また、アームを大きくしたにも関わらず機体がぶれてしまって...
*感想・反省 [#r61e897d]
トレース自体は同じプログラムの繰り返しだったためにそこま...
トレースの判定を2色でしてみたが、それによってプログラム...
ページ名: