2014a/Member/yokkun/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2014a/Member]]
目次
#contents
*メンバー [#m584a447]
yokkun
sakar
sugaken
arara
*課題の説明 [#ad5bb19f]
2台のロボットで紙コップを収集し、同じ番号の書かれている紙...
フィールドの説明◦フィールドは課題1で使用した紙を2枚...
&ref(2014a/Member/yokkun/Mission2/2014a-mission2.png,50%);
◦図の右半分の黄色い地点には、その数字と同じ数字が書...
基本ルール
◦競技時間は審判が続行不能と判断するまで、あるいはリ...
◦図の右上のスタートエリアからスタートする(課題1と同...
◦図の左半分にある紙コップを集めて、それぞれ右半分に...
◦右半分の紙コップは10cm内の移動は認める
◦開始の合図から5秒以内にスタートボタンを押す作業を...
◦競技が終了するまで、ロボットに触ったり人間が遠隔で...
◦途中でうまく動かなくなった場合、1回限り再スタート...
◦同じ番号の紙コップに重ねることができれば、1組で10点
◦番号が1違いの紙コップに重ねれば、1組で2点
◦番号が2違いの紙コップに重ねれば、1組で0点
◦最終的な紙コップの位置が10cm以上動いた場合は、その...
技術点の計算方法以下の動作の精度・スピード・確実性などを...
◦紙コップを掴む動作 (4点)
◦紙コップをを運ぶ動作(3点)
◦紙コップを重ねる動作(4点)
◦2台のRCXまたはNXTの連携の良さ(3点)
◦自立型のロボットとしての形や動作の美しさ、斬新さ(2...
◦その他 (2点)
*ロボットの説明 [#q04941a7]
**ドライブベース[#a009d423]
ドライブベースは最初本体二つが通信しやすいように平行に横...
&ref(2014a/Member/yokkun/Mission2/IMG_2768.JPG,30%);
**センサー [#wa5184ac]
センサーはライントレースをするセンサーはドライブベースが...
&ref(2014a/Member/yokkun/Mission2/IMG_2767.JPG,30%);
**アーム [#o70ea650]
アームは一度に挟んで持ち上げることのできるアームにしまし...
&ref(2014a/Member/yokkun/Mission2/IMG_2771.JPG,30%);
*プログラム [#q6858d58]
**プログラム [#j829ac63]
Aにとりに行ってそこにおいてあったコップが1,2,3のどれ...
定義
#define CUPA1 111
#define CUPA2 112
#define CUPA3 113
#define GOFOR 200
#define GOBACK 201
#define ARMUP 202
#define ARMDOWN 203
#define GOA1 121
#define GOA2 122
#define GOA3 123
#define SKIT 45 //トレースのしきい値
#define JUDGE 45 //紙コップ判断のしきい値
#define HIGHPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIGHPOWER);//速度を...
#define set_power_L SetPower(OUT_AC,LOWPOWER);//速度を落...
#define turn_left1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C...
#define turn_left0 set_power_L;OnFwd(OUT_A); Off(OUT_C);...
#define turn_right0 set_power_L;OnFwd(OUT_C); Off(OUT_A)...
#define turn_right1 set_power_L;OnFwd(OUT_C); OnRev(OUT_...
#define go_forward set_power_H; OnFwd(OUT_AC); //直進
#define go_back(s) OnRev(OUT_AC); Wait(s); Off(OUT_AC); ...
#define STEP 1 //ライントレースの判断時間
#define noMAX 30 //右に行き過ぎた時、転回の最大回数
#define NOSTEP 200 //右に行き過ぎた時、左に戻るための時間
#define SENDTIME 300
・ライントレースのサブルーティン
課題1で三段階に分けてうまくいかなかったので五段階にしま...
sub line_trace(tim)
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //ライントレース用...
int nonline=0;
ClearTimer(1);
while(Timer(1) <= tim){
if (SENSOR_2 < SKIT-6){
turn_left1;
} else if (SENSOR_2 < SKIT-3) { //しきい値より...
turn_left0; //しきい値より...
} else if (SENSOR_2 < SKIT+3) { //しきい値より...
go_forward; //しきい値より...
} else { //右旋回をしす...
if(SENSOR_2 < SKIT+6) { //して戻る
turn_right0;
} else {
while (nonline < noMAX){
turn_right1;
nonline++;
}
turn_left1;
Wait(noMAX*STEP*NOSTEP);
}
nonline=0;
}
Wait(STEP); //停止 ...
}
}
・メインのタスク
紙コップの三つの識別は紙コップに何も塗らず白のままのもの...
task main()
{
SetSensor(SENSOR_3, SENSOR_LIGHT); //紙コップ識別用の...
go_forward; //4.3秒前に進む
Wait(430);
line_trace(800); //ライントレースを...
while(true){
・Aから1へ紙コップを運ぶ場合
if (SENSOR_3 < JUDGE-7){
Off(OUT_AC); ...
ClearTimer(0); ...
ClearMessage(); ...
while((Message() != 1)||(FastTimer(0)<SENDTIME)){ ...
SendMessage(CUPA1);
}
if(Message() == 1){
PlaySound(SOUND_CLICK);
}else{
PlaySound(SOUND_LOW_BEEP); ...
}
Wait(50);
}
until(Message() == GOFOR);
SendMessage(2); ...
OnFwd(OUT_AC); ...
Wait(80);
ClearTimer(0);
ClearMessage();
while((Message() != 3)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMUP);
}
if(Message() == 3){
PlaySound(SOUND_CLICK); ...
}else{
PlaySound(SOUND_LOW_BEEP); /...
}
Wait(50);
}
ClearMessage();
while(true){
if(Message() == GOA1){
SendMessage(4); //...
OnRev(OUT_AC); //...
Wait(100);
turn_left1; //3...
Wait(30);
OnFwd(OUT_AC); //3秒...
Wait(300);
line_trace();
until(SENSOR_3 < JUDGE-7);
Off(OUT_AC); //停止
go_back(100); //バック
ClearTimer(0);
ClearMessage();
while((Message() != 5)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMDOWN);
}
if(Message() == 5){
PlaySound(SOUND_CLICK); //音を...
}else{
PlaySound(SOUND_LOW_BEEP); //音を...
}
Wait(50);
until(Message() == GOBACK);
SendMessage(6);
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
}
・Aから2へ紙コップを運ぶ場合
else if(SENSOR_3 < JUDGE-3){
Off(OUT_AC); //停止
ClearTimer(0);
ClearMessage();
while((Message() != 1)||(FastTimer(0)<SENDTIME)){
SendMessage(CUPA2); //メ...
}
if(Message() == 1){
PlaySound(SOUND_CLICK); //音...
}else{
PlaySound(SOUND_LOW_BEEP); //音...
}
Wait(50);
}
until(Message() == GOFOR);
SendMessage(2);
OnFwd(OUT_AC); //8...
Wait(80);
ClearTimer(0);
ClearMessage();
while((Message() != 3)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMUP);
}
if(Message() == 3){
PlaySound(SOUND_CLICK); //音を...
}else{
PlaySound(SOUND_LOW_BEEP); //音を...
}
Wait(50);
}
ClearMessage();
while(true){
if(Message() == GOA2){
SendMessage(4); //メッセ...
line_trace();
until(SENSOR_3 < JUDGE-2);
Off(OUT_AC);
go_back(100); //後ろに...
ClearTimer(0);
ClearMessage();
while((Message() != 5)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMDOWN);
}
if(Message() == 5){
PlaySound(SOUND_CLICK); //音を鳴...
}else{
PlaySound(SOUND_LOW_BEEP); //音を...
}
Wait(50);
until(Message() == GOBACK);
SendMessage(6);
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
}
・Aから3へ紙コップを運ぶ場合
else if(SENSOR_3 > JUDGE+5){
Off(OUT_AC); //停止
ClearTimer(0);
ClearMessage();
while((Message() != 1)||(FastTimer(0)<SENDTIME)){
SendMessage(CUPA3); //メッセ...
}
if(Message() == 1){
PlaySound(SOUND_CLICK); //音を鳴...
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴...
}
Wait(50);
}
until(Message() == GOFOR);
SendMessage(2); //メッセ...
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
while((Message() != 3)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMUP); //メッセージ...
}
if(Message() == 3){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
}
ClearMessage();
while(true){
if(Message() == GOA3){
SendMessage(4); //メッセージ...
go_forward; //2秒前進
Wait(200);
turn_left0; //2秒左折
Wait(200);
line_trace(); //ライントレ...
until(SENSOR_3 > JUDGE+6);
Off(OUT_AC); //停止
go_back(100); //1秒下がる
ClearTimer(0);
ClearMessage();
while((Message() != 5)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMDOWN);
}
if(Message() == 1){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message() == GOBACK);
SendMessage(6); //メッセージを送る
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
}
}
}
・アームに関するプログラム
定義
#define CUPA1 111 //固有値の値
#define CUPA2 112
#define CUPA3 113
#define GOFOR 200
#define GOBACK 201
#define ARMUP 202
#define ARMDOWN 203
#define GOA1 121
#define GOA2 122
#define GOA3 123
#define HIGHPOWER 7 //パワーの数値
#define LOWPOWER 1
#define CATCHPOWER 4
#define set_power_H SetPower(OUT_AC,HIGHPOWER);// ア...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //
#define set_power_C SetPower(OUT_B,CATCHPOWER);//
#define STEP 1
#define SENDTIME 300
・メインのタスク
task main()
{
ClearMessage();
OnRev(OUT_AC); //アームを下げる
Wait(1200);
Off(OUT_AC); //停止
while(true){
・Aから1へ紙コップを運ぶ場合
if(Message() == CUPA1){
SendMessage(1); //メッセージを送る
OnFwd(OUT_AC); //アームを上げる
Wait(50);
ClearTimer(0);
ClearMessage();
while((Message() != 2)||(FastTimer(0)<SENDTIME)){
SendMessage(GOFOR);
}
if(Message() == 2){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(3);
OnRev(OUT_AC); //アームを下げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 4)||(FastTimer(0)<SENDTIME)){
SendMessage(GOA1);
}
if(Message() == 4){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
until(Message()==ARMDOWN);
SendMessage(5);
OnFwd(OUT_AC); //アームを上げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 6)||(FastTimer(0)<SENDTIME)){
SendMessage(GOBACK);
}
if(Message() == 6){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(7);
OnRev(OUT_AC); //アームを下...
Wait(150);}
・Aから2へ紙コップを運ぶ場合
else if(Message() == CUPA2){
SendMessage(1);
OnFwd(OUT_AC); //アームを上...
Wait(50);
ClearTimer(0);
ClearMessage();
while((Message() != 2)||(FastTimer(0)<SENDTIME)){
SendMessage(GOFOR);
}
if(Message() == 2){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(3);
OnRev(OUT_AC); //アームを下げ...
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 4)||(FastTimer(0)<SENDTIME)){
SendMessage(GOA2);
}
if(Message() == 4){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
OnRev(OUT_B); //アームを下げる
Wait(800);
}
until(Message()==ARMDOWN);
SendMessage(5);
OnFwd(OUT_AC); //アームを上げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 6)||(FastTimer(0)<SENDTIME)){
SendMessage(GOBACK);
}
if(Message() == 6){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(7);
OnRev(OUT_AC); //アームを下げて積み重ねる
Wait(150);
・Aから3へ紙コップを運ぶ場合
}if(Message() == CUPA3){
SendMessage(1);
OnFwd(OUT_AC); //アームを上げる
Wait(50);
ClearTimer(0);
ClearMessage();
while((Message() != 2)||(FastTimer(0)<SENDTIME)){
SendMessage(GOFOR);
}
if(Message() == 2){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(3);
OnRev(OUT_AC); //アームを下げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 4)||(FastTimer(0)<SENDTIME)){
SendMessage(GOA3);
}
if(Message() == 4){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMDOWN);
SendMessage(5);
OnFwd(OUT_AC); //アームを上げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 6)||(FastTimer(0)<SENDTIME)){
SendMessage(GOBACK);
}
if(Message() == 6){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(7);
OnRev(OUT_AC); //アームを下げて積み...
Wait(150);
}
}
*工夫展・反省点 [#l19dfa06]
・ドライブベースが最初通信を一番しやすいように組み立てた...
・センサーの位置を変えた。ライントレースをするセンサーは...
・途中で軽さを重視しすぎて最小限のブロックで作ったらアー...
・ドライブベースの重心が後ろにあることによりあえて二輪に...
・アームのモーターはもともと一つであったが紙コップをつか...
・本体の二つがしっかり通信するようにどちらも表を向けて直...
・ライントレースでカーブの時に安定するように値の違いを五...
・アーム一つで紙コップをキャッチして上げることができるア...
・アームはもともと左右どちらとも先っぽにタイヤをつけてい...
・最初の練習段階では本体二つがしっかり通信してくれていた...
・ドライブベースに関してもう少し工夫してアームの乗せる位...
*感想 [#k528904f]
プログラムはとても難しいものだと思った。一つでも間違っ...
今後この授業のおかげでプログラムをやってない人よりかは...
終了行:
[[2014a/Member]]
目次
#contents
*メンバー [#m584a447]
yokkun
sakar
sugaken
arara
*課題の説明 [#ad5bb19f]
2台のロボットで紙コップを収集し、同じ番号の書かれている紙...
フィールドの説明◦フィールドは課題1で使用した紙を2枚...
&ref(2014a/Member/yokkun/Mission2/2014a-mission2.png,50%);
◦図の右半分の黄色い地点には、その数字と同じ数字が書...
基本ルール
◦競技時間は審判が続行不能と判断するまで、あるいはリ...
◦図の右上のスタートエリアからスタートする(課題1と同...
◦図の左半分にある紙コップを集めて、それぞれ右半分に...
◦右半分の紙コップは10cm内の移動は認める
◦開始の合図から5秒以内にスタートボタンを押す作業を...
◦競技が終了するまで、ロボットに触ったり人間が遠隔で...
◦途中でうまく動かなくなった場合、1回限り再スタート...
◦同じ番号の紙コップに重ねることができれば、1組で10点
◦番号が1違いの紙コップに重ねれば、1組で2点
◦番号が2違いの紙コップに重ねれば、1組で0点
◦最終的な紙コップの位置が10cm以上動いた場合は、その...
技術点の計算方法以下の動作の精度・スピード・確実性などを...
◦紙コップを掴む動作 (4点)
◦紙コップをを運ぶ動作(3点)
◦紙コップを重ねる動作(4点)
◦2台のRCXまたはNXTの連携の良さ(3点)
◦自立型のロボットとしての形や動作の美しさ、斬新さ(2...
◦その他 (2点)
*ロボットの説明 [#q04941a7]
**ドライブベース[#a009d423]
ドライブベースは最初本体二つが通信しやすいように平行に横...
&ref(2014a/Member/yokkun/Mission2/IMG_2768.JPG,30%);
**センサー [#wa5184ac]
センサーはライントレースをするセンサーはドライブベースが...
&ref(2014a/Member/yokkun/Mission2/IMG_2767.JPG,30%);
**アーム [#o70ea650]
アームは一度に挟んで持ち上げることのできるアームにしまし...
&ref(2014a/Member/yokkun/Mission2/IMG_2771.JPG,30%);
*プログラム [#q6858d58]
**プログラム [#j829ac63]
Aにとりに行ってそこにおいてあったコップが1,2,3のどれ...
定義
#define CUPA1 111
#define CUPA2 112
#define CUPA3 113
#define GOFOR 200
#define GOBACK 201
#define ARMUP 202
#define ARMDOWN 203
#define GOA1 121
#define GOA2 122
#define GOA3 123
#define SKIT 45 //トレースのしきい値
#define JUDGE 45 //紙コップ判断のしきい値
#define HIGHPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIGHPOWER);//速度を...
#define set_power_L SetPower(OUT_AC,LOWPOWER);//速度を落...
#define turn_left1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C...
#define turn_left0 set_power_L;OnFwd(OUT_A); Off(OUT_C);...
#define turn_right0 set_power_L;OnFwd(OUT_C); Off(OUT_A)...
#define turn_right1 set_power_L;OnFwd(OUT_C); OnRev(OUT_...
#define go_forward set_power_H; OnFwd(OUT_AC); //直進
#define go_back(s) OnRev(OUT_AC); Wait(s); Off(OUT_AC); ...
#define STEP 1 //ライントレースの判断時間
#define noMAX 30 //右に行き過ぎた時、転回の最大回数
#define NOSTEP 200 //右に行き過ぎた時、左に戻るための時間
#define SENDTIME 300
・ライントレースのサブルーティン
課題1で三段階に分けてうまくいかなかったので五段階にしま...
sub line_trace(tim)
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //ライントレース用...
int nonline=0;
ClearTimer(1);
while(Timer(1) <= tim){
if (SENSOR_2 < SKIT-6){
turn_left1;
} else if (SENSOR_2 < SKIT-3) { //しきい値より...
turn_left0; //しきい値より...
} else if (SENSOR_2 < SKIT+3) { //しきい値より...
go_forward; //しきい値より...
} else { //右旋回をしす...
if(SENSOR_2 < SKIT+6) { //して戻る
turn_right0;
} else {
while (nonline < noMAX){
turn_right1;
nonline++;
}
turn_left1;
Wait(noMAX*STEP*NOSTEP);
}
nonline=0;
}
Wait(STEP); //停止 ...
}
}
・メインのタスク
紙コップの三つの識別は紙コップに何も塗らず白のままのもの...
task main()
{
SetSensor(SENSOR_3, SENSOR_LIGHT); //紙コップ識別用の...
go_forward; //4.3秒前に進む
Wait(430);
line_trace(800); //ライントレースを...
while(true){
・Aから1へ紙コップを運ぶ場合
if (SENSOR_3 < JUDGE-7){
Off(OUT_AC); ...
ClearTimer(0); ...
ClearMessage(); ...
while((Message() != 1)||(FastTimer(0)<SENDTIME)){ ...
SendMessage(CUPA1);
}
if(Message() == 1){
PlaySound(SOUND_CLICK);
}else{
PlaySound(SOUND_LOW_BEEP); ...
}
Wait(50);
}
until(Message() == GOFOR);
SendMessage(2); ...
OnFwd(OUT_AC); ...
Wait(80);
ClearTimer(0);
ClearMessage();
while((Message() != 3)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMUP);
}
if(Message() == 3){
PlaySound(SOUND_CLICK); ...
}else{
PlaySound(SOUND_LOW_BEEP); /...
}
Wait(50);
}
ClearMessage();
while(true){
if(Message() == GOA1){
SendMessage(4); //...
OnRev(OUT_AC); //...
Wait(100);
turn_left1; //3...
Wait(30);
OnFwd(OUT_AC); //3秒...
Wait(300);
line_trace();
until(SENSOR_3 < JUDGE-7);
Off(OUT_AC); //停止
go_back(100); //バック
ClearTimer(0);
ClearMessage();
while((Message() != 5)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMDOWN);
}
if(Message() == 5){
PlaySound(SOUND_CLICK); //音を...
}else{
PlaySound(SOUND_LOW_BEEP); //音を...
}
Wait(50);
until(Message() == GOBACK);
SendMessage(6);
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
}
・Aから2へ紙コップを運ぶ場合
else if(SENSOR_3 < JUDGE-3){
Off(OUT_AC); //停止
ClearTimer(0);
ClearMessage();
while((Message() != 1)||(FastTimer(0)<SENDTIME)){
SendMessage(CUPA2); //メ...
}
if(Message() == 1){
PlaySound(SOUND_CLICK); //音...
}else{
PlaySound(SOUND_LOW_BEEP); //音...
}
Wait(50);
}
until(Message() == GOFOR);
SendMessage(2);
OnFwd(OUT_AC); //8...
Wait(80);
ClearTimer(0);
ClearMessage();
while((Message() != 3)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMUP);
}
if(Message() == 3){
PlaySound(SOUND_CLICK); //音を...
}else{
PlaySound(SOUND_LOW_BEEP); //音を...
}
Wait(50);
}
ClearMessage();
while(true){
if(Message() == GOA2){
SendMessage(4); //メッセ...
line_trace();
until(SENSOR_3 < JUDGE-2);
Off(OUT_AC);
go_back(100); //後ろに...
ClearTimer(0);
ClearMessage();
while((Message() != 5)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMDOWN);
}
if(Message() == 5){
PlaySound(SOUND_CLICK); //音を鳴...
}else{
PlaySound(SOUND_LOW_BEEP); //音を...
}
Wait(50);
until(Message() == GOBACK);
SendMessage(6);
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
}
・Aから3へ紙コップを運ぶ場合
else if(SENSOR_3 > JUDGE+5){
Off(OUT_AC); //停止
ClearTimer(0);
ClearMessage();
while((Message() != 1)||(FastTimer(0)<SENDTIME)){
SendMessage(CUPA3); //メッセ...
}
if(Message() == 1){
PlaySound(SOUND_CLICK); //音を鳴...
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴...
}
Wait(50);
}
until(Message() == GOFOR);
SendMessage(2); //メッセ...
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
while((Message() != 3)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMUP); //メッセージ...
}
if(Message() == 3){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
}
ClearMessage();
while(true){
if(Message() == GOA3){
SendMessage(4); //メッセージ...
go_forward; //2秒前進
Wait(200);
turn_left0; //2秒左折
Wait(200);
line_trace(); //ライントレ...
until(SENSOR_3 > JUDGE+6);
Off(OUT_AC); //停止
go_back(100); //1秒下がる
ClearTimer(0);
ClearMessage();
while((Message() != 5)||(FastTimer(0)<SENDTIME)){
SendMessage(ARMDOWN);
}
if(Message() == 1){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message() == GOBACK);
SendMessage(6); //メッセージを送る
OnFwd(OUT_AC); //8秒前進
Wait(80);
ClearTimer(0);
ClearMessage();
}
}
}
・アームに関するプログラム
定義
#define CUPA1 111 //固有値の値
#define CUPA2 112
#define CUPA3 113
#define GOFOR 200
#define GOBACK 201
#define ARMUP 202
#define ARMDOWN 203
#define GOA1 121
#define GOA2 122
#define GOA3 123
#define HIGHPOWER 7 //パワーの数値
#define LOWPOWER 1
#define CATCHPOWER 4
#define set_power_H SetPower(OUT_AC,HIGHPOWER);// ア...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //
#define set_power_C SetPower(OUT_B,CATCHPOWER);//
#define STEP 1
#define SENDTIME 300
・メインのタスク
task main()
{
ClearMessage();
OnRev(OUT_AC); //アームを下げる
Wait(1200);
Off(OUT_AC); //停止
while(true){
・Aから1へ紙コップを運ぶ場合
if(Message() == CUPA1){
SendMessage(1); //メッセージを送る
OnFwd(OUT_AC); //アームを上げる
Wait(50);
ClearTimer(0);
ClearMessage();
while((Message() != 2)||(FastTimer(0)<SENDTIME)){
SendMessage(GOFOR);
}
if(Message() == 2){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(3);
OnRev(OUT_AC); //アームを下げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 4)||(FastTimer(0)<SENDTIME)){
SendMessage(GOA1);
}
if(Message() == 4){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
until(Message()==ARMDOWN);
SendMessage(5);
OnFwd(OUT_AC); //アームを上げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 6)||(FastTimer(0)<SENDTIME)){
SendMessage(GOBACK);
}
if(Message() == 6){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(7);
OnRev(OUT_AC); //アームを下...
Wait(150);}
・Aから2へ紙コップを運ぶ場合
else if(Message() == CUPA2){
SendMessage(1);
OnFwd(OUT_AC); //アームを上...
Wait(50);
ClearTimer(0);
ClearMessage();
while((Message() != 2)||(FastTimer(0)<SENDTIME)){
SendMessage(GOFOR);
}
if(Message() == 2){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(3);
OnRev(OUT_AC); //アームを下げ...
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 4)||(FastTimer(0)<SENDTIME)){
SendMessage(GOA2);
}
if(Message() == 4){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
OnRev(OUT_B); //アームを下げる
Wait(800);
}
until(Message()==ARMDOWN);
SendMessage(5);
OnFwd(OUT_AC); //アームを上げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 6)||(FastTimer(0)<SENDTIME)){
SendMessage(GOBACK);
}
if(Message() == 6){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(7);
OnRev(OUT_AC); //アームを下げて積み重ねる
Wait(150);
・Aから3へ紙コップを運ぶ場合
}if(Message() == CUPA3){
SendMessage(1);
OnFwd(OUT_AC); //アームを上げる
Wait(50);
ClearTimer(0);
ClearMessage();
while((Message() != 2)||(FastTimer(0)<SENDTIME)){
SendMessage(GOFOR);
}
if(Message() == 2){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(3);
OnRev(OUT_AC); //アームを下げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 4)||(FastTimer(0)<SENDTIME)){
SendMessage(GOA3);
}
if(Message() == 4){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMDOWN);
SendMessage(5);
OnFwd(OUT_AC); //アームを上げる
Wait(150);
ClearTimer(0);
ClearMessage();
while((Message() != 6)||(FastTimer(0)<SENDTIME)){
SendMessage(GOBACK);
}
if(Message() == 6){
PlaySound(SOUND_CLICK); //音を鳴らす
}else{
PlaySound(SOUND_LOW_BEEP); //音を鳴らす
}
Wait(50);
until(Message()==ARMUP);
SendMessage(7);
OnRev(OUT_AC); //アームを下げて積み...
Wait(150);
}
}
*工夫展・反省点 [#l19dfa06]
・ドライブベースが最初通信を一番しやすいように組み立てた...
・センサーの位置を変えた。ライントレースをするセンサーは...
・途中で軽さを重視しすぎて最小限のブロックで作ったらアー...
・ドライブベースの重心が後ろにあることによりあえて二輪に...
・アームのモーターはもともと一つであったが紙コップをつか...
・本体の二つがしっかり通信するようにどちらも表を向けて直...
・ライントレースでカーブの時に安定するように値の違いを五...
・アーム一つで紙コップをキャッチして上げることができるア...
・アームはもともと左右どちらとも先っぽにタイヤをつけてい...
・最初の練習段階では本体二つがしっかり通信してくれていた...
・ドライブベースに関してもう少し工夫してアームの乗せる位...
*感想 [#k528904f]
プログラムはとても難しいものだと思った。一つでも間違っ...
今後この授業のおかげでプログラムをやってない人よりかは...
ページ名: