2016b/Member/suzukaze/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題概要 [#j1be51d4]
今回の課題はピッチャーロボットとバッターロボットが所定の...
*ピッチャー [#o0c1b59c]
**機体 [#zbb559c9]
機体のメインはボールの発射機構である。私の班はボールを転...
&ref(2016b/Member/suzukaze/Mission3/DSC_0067[1].JPG,10%,...
また、ボールを機体の真ん中を転がす機構にしたため、センサ...
**プログラム [#ca91d0bb]
defineは方向転換とセンサ−用の直進と角度制御用の直進、それ...
#define TURNR(A) RotateMotorEx(OUT_BC,40,A,100,true,true...
#define TURNL(L) RotateMotorEx(OUT_BC,40,L,-100,true,tru...
#define TYOKUSIN OnFwdSync(OUT_BC,40,0); ...
#define CM(K) RotateMotorEx(OUT_BC,40,20.47315*K,0,true,...
#define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);Rota...
サブルーチン(BASYO)はライトセンサーでラインを検知してそ...
sub BASYO()//ラインを検知して超えるプログラム
{
SetSensorLight(S1);
TYOKUSIN;
until(SENSOR_1<35);
Off(OUT_BC);
Wait(500);
CM(5);
Wait(500);
}
プログラムの流れとしては、まずゴールにぶつからないように...
task main()
{
int SIREI;//子機からの信号を入れる場所
TURNR(110);
CM(36);
TURNR(150);
repeat(3){ //ラインを3回超えるまで
BASYO();
}
CM(-13);//位置の調節のためバック
TURNR(130);
until(BluetoothStatus(1)==NO_ERR);//通信
RemotePlayTone(1,440,1000);//通信
Wait(1000);
RemoteStartProgram(1,"DAGEKI.rxe");//通信
while(SIREI<12){
ReceiveRemoteNumber(MAILBOX1,true,SIREI);//通信
if(SIREI==11){
PlaySound(SOUND_CLICK);
Wait(200);
HASSYA;
SIREI=0;//通信
}
}
}
最初は超音波センサーを使ったバッターの検知等も試したが正...
*バッター [#nd60736e]
私は基本的にピッチャーを担当したのでバッターにはあまり詳...
**機体 [#p88534ec]
私たちの班ではボールをキャッチしてから発射する方法をとっ...
&ref(2016b/Member/suzukaze/Mission3/DSC_0071[1].JPG,10%,...
こちらも超音波センサーを使わず、ライトセンサーのみとなっ...
**プログラム [#s29b8532]
ここではバッターが最初の位置から位置に着くまでのプログラ...
defineは角度制御、ライントレースともに必要なのでそのため...
#define go_straight(t) RotateMotor(OUT_BC,50,t); ...
#define go_nonstop OnFwd(OUT_BC,50); ...
#define turn(t) RotateMotorEx(OUT_BC,60,t,100,tr...
#define turn_right OnFwd(OUT_B,40); ...
#define turn_right_slow OnFwd(OUT_B,40); OnRev(OUT_C,30)...
#define turn_left OnFwd(OUT_C,40); ...
#define turn_left_slow OnFwd(OUT_C,40); OnRev(OUT_B,30)...
#define go_line OnFwd(OUT_BC,40); ...
#define FOLLOW_TIME 5000
#define SASETSU OnRev(OUT_BC,50); Wait(400); Off...
ライントレース用のプログラム。黒の濃さによって曲がり方を...
sub FOLLOW_LINE()//ライントレース
{
long t0=CurrentTick();
while(CurrentTick()-t0<FOLLOW_TIME){
if(SENSOR_3<=38){
turn_right;
}else if(SENSOR_3<=45){
turn_right_slow;
}else if(SENSOR_3<=50){
go_line;
}else if(SENSOR_3<=59){
turn_left_slow;
}else{
turn_left;
}
}
Off(OUT_BC);
}
ライントレースを始める場所まで移動、その後、位置調整する。
sub BEGIN()//ライントレースを始めるまでの向き、位置調整
{
Wait(1500);
turn(120); //障害物回避
go_straight(1300);
PlaySound(SOUND_CLICK);
go_nonstop;
until(SENSOR_3<=40);//ラインを検知
Off(OUT_BC);
PlaySound(SOUND_CLICK);
Wait(1000);
SASETSU; //ライントレース位置を調整
}
ライントレースの後に所定の位置に着き、ピッチャーの方を向...
sub READY()//最後の位置、向き調整
{
go_straight(500);
OnRev(OUT_BC,50);
until(SENSOR_3<=40);
Off(OUT_BC);
PlaySound(SOUND_CLICK);
Wait(1000);
turn(20);
go_straight(400);
turn(-70);
PlaySound(SOUND_UP);
}
上記サブルーチンを順番通り繋げたもの
task main()
{
SetSensorLight(S3);
BEGIN();
FOLLOW_LINE();
READY();
}
*通信 [#g7b8458f]
ここでは通信の開始、つまりボールを投げて打つところのプロ...
defineとしてボールの発射装填(ピッチャー)、ボールのキャ...
#define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);Rota...
#define CATCH Wait(500);RotateMotor(OUT_A,70,45);Wait(10...
#define UTU RotateMotor(OUT_A,-90,45);Wait(1000);ボール...
#define TURN(s,t) RotateMotorEx(OUT_BC,40,s,t,true,true)...
まず、親機であるピッチャーが子機の通信が準備できるまで待...
until(BluetoothStatus(1)==NO_ERR);//子機と通信ができるま...
RemotePlayTone(1,440,1000);//子機の音を出させる
Wait(1000);
RemoteStartProgram(1,"DAGEKI.rxe");//子機のプログラムを...
開始するプログラム
int x=1;//回数を計るために定義
task main()
{
UTU;//アームを上げておく
while(x<6){
BATTING();//下で説明
}
SendRemoteNumber(0,MAILBOX1,12);//親機のプログラムを...
}
サブルーチンの中身1部抜粋
sub BATTING()
{
SendRemoteNumber(0,MAILBOX1,11);//親機に指令を出す
Wait(1500);//キャッチのタイミング調整
CATCH;
if(x==1){
TURN(80,100);//ゴールに向きを合わせる
UTU;
TURN(80,-100);//元の向きに戻る
x = x+1;//次のゴールを狙うための操作
子機が親機に指令を出すことで親機が動く
while(SIREI<12){
ReceiveRemoteNumber(MAILBOX1,true,SIREI);//子機からの指...
if(SIREI==11){ //指令によりifのなかに入る
PlaySound(SOUND_CLICK);
Wait(200);
HASSYA;
SIREI=0;//必要かどうか不明
上記の繰り返し(バッター)
} else if(x==2){
TURN(95,-100);
UTU;
TURN(95,100);
x = x+1;
} else if(x==3){
TURN(40,100);
UTU;
TURN(40,-100);
x = x+1;
} else if(x==4){
TURN(45,-100);
UTU;
TURN(45,100);
x = x+1;
} else {
TURN(45,-100);
UTU;
TURN(45,100);
x = x+1;
}
}
*まとめ [#kf28480a]
位置に着くところや通信のプログラムはかなりよくできたと思...
終了行:
#contents
*課題概要 [#j1be51d4]
今回の課題はピッチャーロボットとバッターロボットが所定の...
*ピッチャー [#o0c1b59c]
**機体 [#zbb559c9]
機体のメインはボールの発射機構である。私の班はボールを転...
&ref(2016b/Member/suzukaze/Mission3/DSC_0067[1].JPG,10%,...
また、ボールを機体の真ん中を転がす機構にしたため、センサ...
**プログラム [#ca91d0bb]
defineは方向転換とセンサ−用の直進と角度制御用の直進、それ...
#define TURNR(A) RotateMotorEx(OUT_BC,40,A,100,true,true...
#define TURNL(L) RotateMotorEx(OUT_BC,40,L,-100,true,tru...
#define TYOKUSIN OnFwdSync(OUT_BC,40,0); ...
#define CM(K) RotateMotorEx(OUT_BC,40,20.47315*K,0,true,...
#define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);Rota...
サブルーチン(BASYO)はライトセンサーでラインを検知してそ...
sub BASYO()//ラインを検知して超えるプログラム
{
SetSensorLight(S1);
TYOKUSIN;
until(SENSOR_1<35);
Off(OUT_BC);
Wait(500);
CM(5);
Wait(500);
}
プログラムの流れとしては、まずゴールにぶつからないように...
task main()
{
int SIREI;//子機からの信号を入れる場所
TURNR(110);
CM(36);
TURNR(150);
repeat(3){ //ラインを3回超えるまで
BASYO();
}
CM(-13);//位置の調節のためバック
TURNR(130);
until(BluetoothStatus(1)==NO_ERR);//通信
RemotePlayTone(1,440,1000);//通信
Wait(1000);
RemoteStartProgram(1,"DAGEKI.rxe");//通信
while(SIREI<12){
ReceiveRemoteNumber(MAILBOX1,true,SIREI);//通信
if(SIREI==11){
PlaySound(SOUND_CLICK);
Wait(200);
HASSYA;
SIREI=0;//通信
}
}
}
最初は超音波センサーを使ったバッターの検知等も試したが正...
*バッター [#nd60736e]
私は基本的にピッチャーを担当したのでバッターにはあまり詳...
**機体 [#p88534ec]
私たちの班ではボールをキャッチしてから発射する方法をとっ...
&ref(2016b/Member/suzukaze/Mission3/DSC_0071[1].JPG,10%,...
こちらも超音波センサーを使わず、ライトセンサーのみとなっ...
**プログラム [#s29b8532]
ここではバッターが最初の位置から位置に着くまでのプログラ...
defineは角度制御、ライントレースともに必要なのでそのため...
#define go_straight(t) RotateMotor(OUT_BC,50,t); ...
#define go_nonstop OnFwd(OUT_BC,50); ...
#define turn(t) RotateMotorEx(OUT_BC,60,t,100,tr...
#define turn_right OnFwd(OUT_B,40); ...
#define turn_right_slow OnFwd(OUT_B,40); OnRev(OUT_C,30)...
#define turn_left OnFwd(OUT_C,40); ...
#define turn_left_slow OnFwd(OUT_C,40); OnRev(OUT_B,30)...
#define go_line OnFwd(OUT_BC,40); ...
#define FOLLOW_TIME 5000
#define SASETSU OnRev(OUT_BC,50); Wait(400); Off...
ライントレース用のプログラム。黒の濃さによって曲がり方を...
sub FOLLOW_LINE()//ライントレース
{
long t0=CurrentTick();
while(CurrentTick()-t0<FOLLOW_TIME){
if(SENSOR_3<=38){
turn_right;
}else if(SENSOR_3<=45){
turn_right_slow;
}else if(SENSOR_3<=50){
go_line;
}else if(SENSOR_3<=59){
turn_left_slow;
}else{
turn_left;
}
}
Off(OUT_BC);
}
ライントレースを始める場所まで移動、その後、位置調整する。
sub BEGIN()//ライントレースを始めるまでの向き、位置調整
{
Wait(1500);
turn(120); //障害物回避
go_straight(1300);
PlaySound(SOUND_CLICK);
go_nonstop;
until(SENSOR_3<=40);//ラインを検知
Off(OUT_BC);
PlaySound(SOUND_CLICK);
Wait(1000);
SASETSU; //ライントレース位置を調整
}
ライントレースの後に所定の位置に着き、ピッチャーの方を向...
sub READY()//最後の位置、向き調整
{
go_straight(500);
OnRev(OUT_BC,50);
until(SENSOR_3<=40);
Off(OUT_BC);
PlaySound(SOUND_CLICK);
Wait(1000);
turn(20);
go_straight(400);
turn(-70);
PlaySound(SOUND_UP);
}
上記サブルーチンを順番通り繋げたもの
task main()
{
SetSensorLight(S3);
BEGIN();
FOLLOW_LINE();
READY();
}
*通信 [#g7b8458f]
ここでは通信の開始、つまりボールを投げて打つところのプロ...
defineとしてボールの発射装填(ピッチャー)、ボールのキャ...
#define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);Rota...
#define CATCH Wait(500);RotateMotor(OUT_A,70,45);Wait(10...
#define UTU RotateMotor(OUT_A,-90,45);Wait(1000);ボール...
#define TURN(s,t) RotateMotorEx(OUT_BC,40,s,t,true,true)...
まず、親機であるピッチャーが子機の通信が準備できるまで待...
until(BluetoothStatus(1)==NO_ERR);//子機と通信ができるま...
RemotePlayTone(1,440,1000);//子機の音を出させる
Wait(1000);
RemoteStartProgram(1,"DAGEKI.rxe");//子機のプログラムを...
開始するプログラム
int x=1;//回数を計るために定義
task main()
{
UTU;//アームを上げておく
while(x<6){
BATTING();//下で説明
}
SendRemoteNumber(0,MAILBOX1,12);//親機のプログラムを...
}
サブルーチンの中身1部抜粋
sub BATTING()
{
SendRemoteNumber(0,MAILBOX1,11);//親機に指令を出す
Wait(1500);//キャッチのタイミング調整
CATCH;
if(x==1){
TURN(80,100);//ゴールに向きを合わせる
UTU;
TURN(80,-100);//元の向きに戻る
x = x+1;//次のゴールを狙うための操作
子機が親機に指令を出すことで親機が動く
while(SIREI<12){
ReceiveRemoteNumber(MAILBOX1,true,SIREI);//子機からの指...
if(SIREI==11){ //指令によりifのなかに入る
PlaySound(SOUND_CLICK);
Wait(200);
HASSYA;
SIREI=0;//必要かどうか不明
上記の繰り返し(バッター)
} else if(x==2){
TURN(95,-100);
UTU;
TURN(95,100);
x = x+1;
} else if(x==3){
TURN(40,100);
UTU;
TURN(40,-100);
x = x+1;
} else if(x==4){
TURN(45,-100);
UTU;
TURN(45,100);
x = x+1;
} else {
TURN(45,-100);
UTU;
TURN(45,100);
x = x+1;
}
}
*まとめ [#kf28480a]
位置に着くところや通信のプログラムはかなりよくできたと思...
ページ名: