2013a/Member/d.ichi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2013a/Member]]
*課題 [#z211f745]
-今回の課題はピンポン玉を運んでパスしてゴールさせるという...
-ルールのリンク
http://yakushi.shinshu-u.ac.jp/robotics/?2013a%2FMission2...
*機体解説 [#r9ca75b1]
-アームを回転させることでボールの発射と受け取りをスムーズ...
-重心を低くすることで安定性が増した。
#refhttp://yakushi.shinshu-u.ac.jp/robotics/?plugin=attac...
*プログラム紹介 [#ma516290]
#define zone1 37 //黒線の中央の値
#define zone2 45 //黒線の中央よりやや外側よりの値
#define zone3 60 //黒線と白紙部分の境目の値
#define zone4 65 //白紙部分の値
#define SPEED 45 //ロボットの進む速さ
#define LOWSPEED SPEED*0.625 //「SPEED」の0.625倍の速さ
#define mae OnFwd(OUT_BC,SPEED*0.8); //「SPEED」の0.8倍...
#define STEP 1 //一回の判定でロボが進む時間(この場合だと...
#define nMAX 100 //STEP秒間に赤外線センサーの値が37以下...
#define SIGNAL1 11 //「打った」と宣言する信号
#define SIGNAL2 12 //「打て」と宣言する信号
#define CONN 1 //通信の時に設定するスレーブの番号(1〜3ま...
int p=0; //センサーが黒線の上にあるとき、pを使ってカウン...
int n=0; //
int m=0; //交差点を通過した個数を数えるときにmを使う
int msg=0; //相手に送るメッセージ
sub migigawa(int x) //交差点をx回通過するまで右側をラ...
{
while(m < x) {
while(p < nMAX && m<x) {
if (SENSOR_4 < zone1) {
OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); ...
p++;
} else {
if (SENSOR_4 < zone2) {
OnFwd(OUT_B,SPEED);Off(OUT_C); //普通の右折
} else if (SENSOR_4 < zone3) {
mae;
} else if (SENSOR_4 < zone4) {
OnFwd(OUT_C,SPEED);Off(OUT_B); // 普通の左折
} else {
OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); ...
}
p=0;
}
Wait(STEP);
}
OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); ...
Wait(nMAX*STEP);
OnFwd(OUT_BC,SPEED);Wait(300);
p=0;
m++;
}
m=0;
}
↑「赤外線センサーの値がzone1(37)以下ならば小回りに右折し...
sub hidarigawa(int x) //交差点をx回通過するまでライン...
{
while(m < x) {
while(p < nMAX && m<x) {
if (SENSOR_4 < zone1) {
OnFwd(OUT_C,SPEED);Off(OUT_B); // 普通の左折
p++;
} else {
if (SENSOR_4 < zone2) {
OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); ...
} else if (SENSOR_4 < zone3) {
mae;
} else if (SENSOR_4 < zone4) {
OnFwd(OUT_B,SPEED);Off(OUT_C); //普通の右折
} else {
OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); ...
}
p=0;
}
Wait(STEP);
}
OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED);
Wait(nMAX*STEP);
OnFwd(OUT_BC,SPEED);Wait(300);
p=0;
m++;
}
m=0;
}
↑こちらは黒線の左側をライントレースするプログラムをhidrig...
task main ()
{
SetSensorLight(S4); //四番ポートに赤外線センサーを設置
Wait(2000); //ロボットを置く時間
//''一回目の缶当てスタート!''
migigawa(2); //交差点を二回カウントするまでライントレ...
Off(OUT_BC);Wait(1000); //休憩
RotateMotor(OUT_C,-SPEED,200);RotateMotor(OUT_B,SPEED,...
mae;OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //アームで...
mae;until(SENSOR_4 < 50);Off(OUT_BC); //黒線まで直進
OnRev(OUT_BC,SPEED);Wait(500);OnRev(OUT_BC,SPEED);unti...
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);Wait(500); //旋回
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 <...
hidarigawa(1); //左側をライントレースしながら交差点を...
Off(OUT_BC);Wait(1000);RotateMotor(OUT_BC,-SPEED,430);...
RotateMotor(OUT_B,-SPEED,300);RotateMotor(OUT_C,SPEED,...
Wait(1000);SendRemoteNumber(CONN,MAILBOX1,SIGNAL1); //...
OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT...
RotateMotor(OUT_BC,-SPEED,200); //打った状態からライン...
OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);RotateMotor(O...
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 <...
Off(OUT_BC);Wait(5000); //五秒待つ
hidarigawa(1); //左側ライントレース交差点を一回カウント
RotateMotor(OUT_BC,SPEED,100);Off(OUT_BC); //受け取る...
RotateMotor(OUT_BC,-SPEED,10);RotateMotor(OUT_C,SPEED,...
SendRemoteNumber(CONN,MAILBOX2,SIGNAL2); // 相手に「打...
Wait(500); //相手が打ってから球が来るまで待つ時間
OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //球を受け取る
OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Off(OUT_BC);R...
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 <...
Off(OUT_BC);Wait(7000); //七秒待つ
hidarigawa(1); //左側、交差点を一回カウント
RotateMotor(OUT_BC,SPEED,50);Off(OUT_BC); //打つ地点ま...
RotateMotor(OUT_B,-SPEED,400);Off(OUT_B);RotateMotor(O...
SendRemoteNumber(CONN,MAILBOX3,SIGNAL1); //「打つ」と...
OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT...
RotateMotor(OUT_BC,-SPEED,50);Off(OUT_BC); //打った時...
//一回目の缶当て終了!
//二回目の缶当てスタート
RotateMotor(OUT_C,-SPEED,50);
Wait(65000); //相手が準備できるまで待機
SendRemoteNumber(CONN,MAILBOX4,SIGNAL2); //「打て」と...
Wait(1500);OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //球...
RotateMotor(OUT_C,SPEED,50);Wait(5000); //相手が準備で...
RotateMotor(OUT_BC,-SPEED,200);
RotateMotor(OUT_C,-SPEED,180);RotateMotor(OUT_B,-SPEED...
RotateMotor(OUT_BC,SPEED,300);RotateMotor(OUT_B,SPEED,...
RotateMotor(OUT_BC,-SPEED,100);
SendRemoteNumber(CONN,MAILBOX5,SIGNAL1); //「打つぞ」...
Wait(500);OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,80,400...
Wait(1500);OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Of...
RotateMotor(OUT_BC,SPEED,50);
OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED); //ライントレー...
until(SENSOR_4 < 50);Off(OUT_BC); //ライントレースでき...
migigawa(1); //目の前のT字路をカウント
RotateMotor(OUT_BC,SPEED,350);RotateMotor(OUT_B,SPEED,...
RotateMotor(OUT_C,-SPEED,180);Off(OUT_BC);RotateMotor(...
SendRemoteNumber(CONN,MAILBOX6,SIGNAL2); //「打て」と...
Wait(1500); //球が来るのを待つ
OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //球を受け取る
Wait(1000);OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Of...
RotateMotor(OUT_BC,SPEED,50); //ライントレースできる体...
OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);until(SENSOR_4 <...
migigawa(1);
Off(OUT_BC);
RotateMotor(OUT_B,-SPEED,420);
RotateMotor(OUT_A,100,400); //缶に当てる
//二回目の缶当て終了!
}
}
*反省 [#n2794b0c]
-なかなか時間外の活動に参加できずメンバーの足を引っ張って...
-チームとしてはコースをクリアできたので良かった。
終了行:
[[2013a/Member]]
*課題 [#z211f745]
-今回の課題はピンポン玉を運んでパスしてゴールさせるという...
-ルールのリンク
http://yakushi.shinshu-u.ac.jp/robotics/?2013a%2FMission2...
*機体解説 [#r9ca75b1]
-アームを回転させることでボールの発射と受け取りをスムーズ...
-重心を低くすることで安定性が増した。
#refhttp://yakushi.shinshu-u.ac.jp/robotics/?plugin=attac...
*プログラム紹介 [#ma516290]
#define zone1 37 //黒線の中央の値
#define zone2 45 //黒線の中央よりやや外側よりの値
#define zone3 60 //黒線と白紙部分の境目の値
#define zone4 65 //白紙部分の値
#define SPEED 45 //ロボットの進む速さ
#define LOWSPEED SPEED*0.625 //「SPEED」の0.625倍の速さ
#define mae OnFwd(OUT_BC,SPEED*0.8); //「SPEED」の0.8倍...
#define STEP 1 //一回の判定でロボが進む時間(この場合だと...
#define nMAX 100 //STEP秒間に赤外線センサーの値が37以下...
#define SIGNAL1 11 //「打った」と宣言する信号
#define SIGNAL2 12 //「打て」と宣言する信号
#define CONN 1 //通信の時に設定するスレーブの番号(1〜3ま...
int p=0; //センサーが黒線の上にあるとき、pを使ってカウン...
int n=0; //
int m=0; //交差点を通過した個数を数えるときにmを使う
int msg=0; //相手に送るメッセージ
sub migigawa(int x) //交差点をx回通過するまで右側をラ...
{
while(m < x) {
while(p < nMAX && m<x) {
if (SENSOR_4 < zone1) {
OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); ...
p++;
} else {
if (SENSOR_4 < zone2) {
OnFwd(OUT_B,SPEED);Off(OUT_C); //普通の右折
} else if (SENSOR_4 < zone3) {
mae;
} else if (SENSOR_4 < zone4) {
OnFwd(OUT_C,SPEED);Off(OUT_B); // 普通の左折
} else {
OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); ...
}
p=0;
}
Wait(STEP);
}
OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); ...
Wait(nMAX*STEP);
OnFwd(OUT_BC,SPEED);Wait(300);
p=0;
m++;
}
m=0;
}
↑「赤外線センサーの値がzone1(37)以下ならば小回りに右折し...
sub hidarigawa(int x) //交差点をx回通過するまでライン...
{
while(m < x) {
while(p < nMAX && m<x) {
if (SENSOR_4 < zone1) {
OnFwd(OUT_C,SPEED);Off(OUT_B); // 普通の左折
p++;
} else {
if (SENSOR_4 < zone2) {
OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); ...
} else if (SENSOR_4 < zone3) {
mae;
} else if (SENSOR_4 < zone4) {
OnFwd(OUT_B,SPEED);Off(OUT_C); //普通の右折
} else {
OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); ...
}
p=0;
}
Wait(STEP);
}
OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED);
Wait(nMAX*STEP);
OnFwd(OUT_BC,SPEED);Wait(300);
p=0;
m++;
}
m=0;
}
↑こちらは黒線の左側をライントレースするプログラムをhidrig...
task main ()
{
SetSensorLight(S4); //四番ポートに赤外線センサーを設置
Wait(2000); //ロボットを置く時間
//''一回目の缶当てスタート!''
migigawa(2); //交差点を二回カウントするまでライントレ...
Off(OUT_BC);Wait(1000); //休憩
RotateMotor(OUT_C,-SPEED,200);RotateMotor(OUT_B,SPEED,...
mae;OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //アームで...
mae;until(SENSOR_4 < 50);Off(OUT_BC); //黒線まで直進
OnRev(OUT_BC,SPEED);Wait(500);OnRev(OUT_BC,SPEED);unti...
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);Wait(500); //旋回
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 <...
hidarigawa(1); //左側をライントレースしながら交差点を...
Off(OUT_BC);Wait(1000);RotateMotor(OUT_BC,-SPEED,430);...
RotateMotor(OUT_B,-SPEED,300);RotateMotor(OUT_C,SPEED,...
Wait(1000);SendRemoteNumber(CONN,MAILBOX1,SIGNAL1); //...
OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT...
RotateMotor(OUT_BC,-SPEED,200); //打った状態からライン...
OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);RotateMotor(O...
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 <...
Off(OUT_BC);Wait(5000); //五秒待つ
hidarigawa(1); //左側ライントレース交差点を一回カウント
RotateMotor(OUT_BC,SPEED,100);Off(OUT_BC); //受け取る...
RotateMotor(OUT_BC,-SPEED,10);RotateMotor(OUT_C,SPEED,...
SendRemoteNumber(CONN,MAILBOX2,SIGNAL2); // 相手に「打...
Wait(500); //相手が打ってから球が来るまで待つ時間
OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //球を受け取る
OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Off(OUT_BC);R...
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 <...
Off(OUT_BC);Wait(7000); //七秒待つ
hidarigawa(1); //左側、交差点を一回カウント
RotateMotor(OUT_BC,SPEED,50);Off(OUT_BC); //打つ地点ま...
RotateMotor(OUT_B,-SPEED,400);Off(OUT_B);RotateMotor(O...
SendRemoteNumber(CONN,MAILBOX3,SIGNAL1); //「打つ」と...
OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT...
RotateMotor(OUT_BC,-SPEED,50);Off(OUT_BC); //打った時...
//一回目の缶当て終了!
//二回目の缶当てスタート
RotateMotor(OUT_C,-SPEED,50);
Wait(65000); //相手が準備できるまで待機
SendRemoteNumber(CONN,MAILBOX4,SIGNAL2); //「打て」と...
Wait(1500);OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //球...
RotateMotor(OUT_C,SPEED,50);Wait(5000); //相手が準備で...
RotateMotor(OUT_BC,-SPEED,200);
RotateMotor(OUT_C,-SPEED,180);RotateMotor(OUT_B,-SPEED...
RotateMotor(OUT_BC,SPEED,300);RotateMotor(OUT_B,SPEED,...
RotateMotor(OUT_BC,-SPEED,100);
SendRemoteNumber(CONN,MAILBOX5,SIGNAL1); //「打つぞ」...
Wait(500);OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,80,400...
Wait(1500);OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Of...
RotateMotor(OUT_BC,SPEED,50);
OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED); //ライントレー...
until(SENSOR_4 < 50);Off(OUT_BC); //ライントレースでき...
migigawa(1); //目の前のT字路をカウント
RotateMotor(OUT_BC,SPEED,350);RotateMotor(OUT_B,SPEED,...
RotateMotor(OUT_C,-SPEED,180);Off(OUT_BC);RotateMotor(...
SendRemoteNumber(CONN,MAILBOX6,SIGNAL2); //「打て」と...
Wait(1500); //球が来るのを待つ
OnRev(OUT_A,20);Wait(1500);Off(OUT_A); //球を受け取る
Wait(1000);OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Of...
RotateMotor(OUT_BC,SPEED,50); //ライントレースできる体...
OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);until(SENSOR_4 <...
migigawa(1);
Off(OUT_BC);
RotateMotor(OUT_B,-SPEED,420);
RotateMotor(OUT_A,100,400); //缶に当てる
//二回目の缶当て終了!
}
}
*反省 [#n2794b0c]
-なかなか時間外の活動に参加できずメンバーの足を引っ張って...
-チームとしてはコースをクリアできたので良かった。
ページ名: