*課題3:空き缶運搬ロボット [#edafccc1]
#ref(2018a-mission3.png,,100%)
*ロボット [#mc07e851]
#ref(IMG_1513.JPG,,50%)
#ref(IMG_1511.JPG,,50%)
**工夫した点 [#oe706004]
2つのRCXを積むことで高さを出した点
また、狙いをはじめの缶のタワーの上下をつかみ、真ん中は突き出して、過去だけつむことにして確実に点数を取りに行った点
*プログラム [#c313f4b8]
**下のRCX [#md1d12dd]
#define LOWPOWER 1
#define HIGHPOWER 6
#define B 39 //黒
#define W 40 //白
#define turn_r
OnFwd(OUT_A);OnRev(OUT_C);SetPower(OUT_AC,HIGHPOWER); //右旋回
#define turn_l
OnFwd(OUT_C);OnRev(OUT_A);SetPower(OUT_AC,HIGHPOWER); //左旋回
#define go
OnFwd(OUT_AC);SetPower(OUT_AC,LOWPOWER); //直進
#define catch_sita Off(OUT_B);SetPower(OUT_B,LOWPOWER);OnFwd(OUT_B); //下の缶を掴む
#define release Off(OUT_B);SetPower(OUT_B,LOWPOWER);OnRev(OUT_B); //下の缶を放す
#define stay Off(OUT_AC); //止まる
//通信用定義
#define CATCH_UE 11 //上の缶を掴ませる
#define STAY 12 //止まらせる
#define RELEASE 13 //上の缶を放させる
#define GO_TRACE 14& //トレースに戻る
#define PUSH 15 //真ん中の缶を落とさせる
#define DOWN 16 //上の缶を下ろさせる~
task main()~
{~
SetSensor(SENSOR_1,SENSOR_LIGHT);~
SetSensor(SENSOR_3,SENSOR_LIGHT);~
ClearMessage();~
int blackN = 0; //T字路の判断~
while(blackN <= 1){~
if(SENSOR_1 >= WHITE && SENSOR_3>= WHITE) ~
//トレース開始
//トレース開始~
go;~
}else if(SENSOR_3 <= BLACK && blackN == 0){ //曲がり角判断
go;Wait(50);
stay;Wait(50);
turn_r;
Wait(125);
blackN++; //黒に入った回数をカウント~
**上のRCX [#u9da0003]
#define LOWPOWER 2
#define catch_ue OnFwd(OUT_C);SetPower(OUT_C,LOWPOWER);Wait(100); //上の缶を掴む
#define release OnRev(OUT_C);SetPower(OUT_C,LOWPOWER);Wait(100);Off(OUT_C); //上の缶を放す
#define lift_up OnFwd(OUT_A);SetPower(OUT_A,LOWPOWER);Wait(100);Off(OUT_A); //上の缶を上げる
#define lift_down OnRev(OUT_A);SetPower(OUT_A,LOWPOWER);Wait(200);Off(OUT_A); //上の缶を下ろす
#define push OnFwd(OUT_B);SetPower(OUT_B,LOWPOWER);Wait(100);Off(OUT_B); //真ん中の缶を落とす
#define reload OnRev(OUT_B);SetPower(OUT_B,LOWPOWER);Wait(100);Off(OUT_B); //缶を落とす機構を戻す
#define stay Off(OUT_AC); //静止
//通信用
#define CATCH_UE 11 //上の缶を持ち上げる
#define STAY 12 //静止する
#define RELEASE 13 //上の缶を放す
#define GO_TRACE 14 //トレース動作に戻させる
#define PUSH 15& //真ん中の缶を落とす
#define LIFT_DOWN 16 //上の缶を下ろす
task main(){
ClearMessage();
int CT1=0; //缶のタワー1に対する動作の区別
while(CT1 == 0){
if(Message()==CATCH_UE)
{grip_ue; //上の缶を掴む
stay;Wait(50);
CT1++; //缶のタワー1に対する操作終わり
}else{
stay;
}
}
lift_up; //上の缶を持ち上げる ~
stay;Wait(50);~
push; //缶を押し倒す~
Wait(50);~
reload; //落とすのに使った機構を戻す~
stay;Wait(50);~
lift_down; //上の缶を下ろす~
SendMessage(GO_TRACE); //トレース再開~
}~
*反省 [#de373eeb]
結果は残念であったが、このロボティクス入門という講座を通して、ロボットを作り、プログラムを組むことで大変さや、プログラムがいかに不確実性にとむかがわかった。私のいる学科では特にプログラミングをするという予定はないと思うが、プログラムを組んだという経験はどこかで生かすことができるのではないかと思う。