2013b/Member/tomato/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2013b/Member]]
#contents
*メンバー紹介 [#e1bd5c6a]
~tomato 工学部電気電子工学科 ロボット製作責任者、yno8様...
~satoT 農学部応用生命科学科 プログラミング製作責任者、...
*課題[#sfa50137]
概要 スタート地点から、ライントレースを使ってコースを時...
※ライントレースとは、床面に描いたラインをロボットが光セ...
~実際のコースは以下の通り
~&ref(ava4.JPG);
*ロボット作成 [#k2749e41]
~まず、普通にプログラミングを書いて、普通に課題をこなそう...
~結果として全然うまくいかなかった……。
**ロボットの問題点 [#g9d1318d]
~1、まず、課題の、ライントレースをする上での問題。カーブ...
~2、缶を運ぶために、なんらかの工夫が必要。
~3、ロボットが重いせいで、プログラミング上で、何秒と命令...
~この三つが課題をする上で最も難しく、出来ない原因だ。
**ロボット [#kbed7487]
~&ref(DSC_0196.jpg);
~1の問題点を解決するために、ロボットは三輪にした。この三...
~&ref(DSC_0197.jpg);
~上がライントレースをするために、地面の色を判定してくれる...
~&ref(DSC_0198.jpg);
~次に、缶を感知できるように、光センサーを設置した。缶は光...
~&ref(DSC_0199.jpg);
~缶はこのアームで掴んで(はさんで?)進んだ後に反転、ロボ...
~この完成したかのように思われたロボットだが、これだけでは...
**新しい問題点 [#a784731c]
~1、旋回するときに、スムーズに動くようになったのは良かっ...
~2、設計図通りではなくなったので、satoTがロボットを持っ...
~3、アームが長いため、缶を元の位置に戻せても、その後、缶...
**完成したロボット [#ne109303]
~&ref(ava3.JPG);
~まず、新しい問題点の3はアームを短くすることで解決した。
~新しい問題点1の缶をどかす際に、缶を投げてしまうことがな...
~アームの長さが左右対称ではないのは、缶を投げ飛ばしてしま...
~さらに言えば、この場合長いほうのアームしか実は必要がない...
~&ref(toma2.jpg);
**プログラミングで工夫したところ [#u5daba9e]
~この課題でのプログラミングで難しかったのは、交差点とL字...
~ライントレース自体は光センサーが感知した数字から、黒けれ...
~&ref(ペイント.jpg);
~問題である交差点は、黒ければ斜め前に進むのプログラムを実...
~&ref(aaa.jpg);
~さらに缶をどかし、元に戻して進むというのも、チームを苦し...
~缶をどかすのは、光センサーで缶に当たると、その値が白にな...
~さらに、プログラミング上で缶を元に戻した後、旋回の時にア...
*プログラミング作成 [#y58cd647]
**プログラムの省略のための定義付け [#b36c965e]
~「#define ○○ 命令式」と書くことで後に○○と打つと、命令式...
~このプログラムでの定義付けは以下の通り。
#define kurot 42 //kurotと打つと42という数がそこに書...
#define kurok 45 //kurokと打つと45という数がそこに書...
#define kurog 48 //kurogと打つと48という数がそこに書...
#define shiro 49 //shiroと打つと49という数がそこに書...
#define hi 2 //hiと打つと2という数がそこに書き込...
#define low 1 //lowと打つと1という数がそこに書き込...
#define sh SetPower(OUT_AC, hi); //車輪にかける力を...
#define sl SetPower(OUT_AC,low); //車輪にかける力を...
#define slh SetPower(OUT_A,low); SetPower(OUT_C,hi); ...
#define shl SetPower(OUT_A,hi); SetPower(OUT_C,low); ...
#define mae sh OnFwd(OUT_AC); //比較的速く前進する
#define ushiro OnRev(OUT_AC); //後進する
#define migi0 sl; OnFwd(OUT_A); Off(OUT_C); //右に比...
#define migi1 sl; OnFwd(OUT_A); OnRev(OUT_C); //右に旋...
#define migi2 slh;OnFwd(OUT_A); OnRev(OUT_C); //右に比...
#define hidari0 sl; Off(OUT_A); OnFwd(OUT_C); //左に比...
#define hidari1 sl; OnRev(OUT_A); OnFwd(OUT_C); //左に...
#define hidari2 shl; OnRev(OUT_A); OnFwd(OUT_C); //左に...
#define STEP 1 //STEPと打つと1という数がそこに書...
#define nMAX 7 //nMAXと打つと7という数がそこに書...
#define yasumi Off(OUT_AC); Wait(100); //1秒停止する
#define cross 40 //crossと打つ...
#define cross_line sl; OnFwd(OUT_AC); Wait(cross); yasu...
int p=0; //pという関数を置く
int x=1; //xという関数を置く
int n=0; //nという関数を置く
int y=0; //yという関数を置く
**サブルーチンを設定する [#ta87623e]
sub migime(){ //交差点を通るためのプログラ...
while(n < x){ //交差点をx回渡るまで
while(p < nMAX){ //ライントレースのプログラム...
if (SENSOR_2 < kurot){
migi1; //右に旋回する
p++; //黒が連続で感知されたこと...
} else {
if(SENSOR_2 < kurok){
migi0;
} else if(SENSOR_2 < kurog){
mae;
} else if(SENSOR_2 < shiro){
hidari0;
} else {
hidari1;
}
p=0;//黒が連続しなかったときに、カウンタをゼロに...
}
Wait(STEP);//光センサーで、ライン上か否かを調べる...
}
yasumi;//実際に交差点を突破する時のプログラム
hidari1;
Wait(nMAX*STEP*2);
cross_line;
n++;//交差点の数を数えることで、最後の方の直角を...
p=0;//ここで交差点かどうかを判断するカウンタをゼ...
}
}
sub hidarime(){//交差点を通るためのプログラム(左側ライ...
while(n < x){
while(p < nMAX){
if (SENSOR_2 < kurot){
hidari1;
p++;
} else {
if(SENSOR_2 < kurok){
hidari0;
} else if (SENSOR_2 < kurog){
mae;
} else if (SENSOR_2 < shiro){
migi0;
} else {
migi1;
}
p=0;
}
Wait(STEP);
}
yasumi;
migi1;
Wait(nMAX*STEP*2);
cross_line;
n++;
p=0;
}
}
sub migikata(){//直角カーブを通る時や、缶を運ぶ時に交差...
while(FastTimer(0) <= y ) {//缶を運ぶ時に、何秒か前に...
if (SENSOR_2 < kurot) {//通常のライントレース
migi1;
} else if (SENSOR_2 < kurok) {
migi0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
hidari0;
} else {
hidari1;
}
Wait(STEP);
}
}
sub hidarikata(){//直角カーブを通る時や、缶を運ぶ時に交...
while(FastTimer(0) <= y ) {
if (SENSOR_2 < kurot) {
hidari1;
} else if (SENSOR_2 < kurok) {
hidari0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
migi0;
} else {
migi1;
}
Wait(STEP);
}
}
sub migite(){ //缶を感知するまで通常(交差点で直進しな...
while(SENSOR_1 < 49) {
if (SENSOR_2 < kurot) {
migi1;
} else if (SENSOR_2 < kurok) {
migi0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
hidari0;
} else {
hidari1;
}
Wait(STEP);
}
}
sub hidarite(){//缶を感知するまで通常(交差点で直進しな...
while(SENSOR_1 < 49) {
if (SENSOR_2 < kurot) {
hidari1;
} else if (SENSOR_2 < kurok) {
hidari0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
migi0;
} else {
migi1;
}
Wait(STEP);
}
}
**メインタスク 実行するプログラム [#q520d856]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//缶を感知する光セン...
SetSensor(SENSOR_2,SENSOR_LIGHT);//ライントレースをす...
hidarite(); //缶を感知するまで左側をライントレース
ClearTimer(0); //リセット
y=400;hidarikata(); //普通に三秒間ライントレース
sss;OnFwd(OUT_C);OnRev(OUT_A);Wait(80); //180度旋回
sss;OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2 < 45);Of...
ClearTimer(0); //リセット
y=100;migikata(); //ちょっとライントレース
sss;OnRev(OUT_AC);Wait(75); //缶を置いていく
sss;OnFwd(OUT_A);Off(OUT_C);Wait(10); //180度旋回
sss;OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_2 < 45);Of...
sss;OnRev(OUT_A);OnFwd(OUT_C);Wait(30); //車体の角度...
x=4;hidarime();//交差点を通るためのプログラム(左側ラ...
hidarite();//缶を感知するまで左側をライントレース
ClearTimer(0); //リセット
y=400;hidarikata(); //普通に三秒間ライントレース
sss;OnFwd(OUT_C);OnRev(OUT_A);Wait(80); //180度旋回
sss;OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2 < 45);Of...
ClearTimer(0); //リセット
y=100;migikata(); //ちょっとライントレース
sss;OnRev(OUT_AC);Wait(100); //缶を置いていく
sss;OnFwd(OUT_A);Off(OUT_C);Wait(10); //180度旋回
sss;OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_2 < 45);Of...
sss;OnRev(OUT_A);OnFwd(OUT_C);Wait(30); //車体の角度...
hidarite();//缶を感知するまで左側をライントレース
}
*反省と感想 [#e71a078b]
~ほぼ毎日集まって、ロボットを作ったり、プログラミングを書...
~プログラミングがうまく出来ない時に、ロボットを作り直し、...
終了行:
[[2013b/Member]]
#contents
*メンバー紹介 [#e1bd5c6a]
~tomato 工学部電気電子工学科 ロボット製作責任者、yno8様...
~satoT 農学部応用生命科学科 プログラミング製作責任者、...
*課題[#sfa50137]
概要 スタート地点から、ライントレースを使ってコースを時...
※ライントレースとは、床面に描いたラインをロボットが光セ...
~実際のコースは以下の通り
~&ref(ava4.JPG);
*ロボット作成 [#k2749e41]
~まず、普通にプログラミングを書いて、普通に課題をこなそう...
~結果として全然うまくいかなかった……。
**ロボットの問題点 [#g9d1318d]
~1、まず、課題の、ライントレースをする上での問題。カーブ...
~2、缶を運ぶために、なんらかの工夫が必要。
~3、ロボットが重いせいで、プログラミング上で、何秒と命令...
~この三つが課題をする上で最も難しく、出来ない原因だ。
**ロボット [#kbed7487]
~&ref(DSC_0196.jpg);
~1の問題点を解決するために、ロボットは三輪にした。この三...
~&ref(DSC_0197.jpg);
~上がライントレースをするために、地面の色を判定してくれる...
~&ref(DSC_0198.jpg);
~次に、缶を感知できるように、光センサーを設置した。缶は光...
~&ref(DSC_0199.jpg);
~缶はこのアームで掴んで(はさんで?)進んだ後に反転、ロボ...
~この完成したかのように思われたロボットだが、これだけでは...
**新しい問題点 [#a784731c]
~1、旋回するときに、スムーズに動くようになったのは良かっ...
~2、設計図通りではなくなったので、satoTがロボットを持っ...
~3、アームが長いため、缶を元の位置に戻せても、その後、缶...
**完成したロボット [#ne109303]
~&ref(ava3.JPG);
~まず、新しい問題点の3はアームを短くすることで解決した。
~新しい問題点1の缶をどかす際に、缶を投げてしまうことがな...
~アームの長さが左右対称ではないのは、缶を投げ飛ばしてしま...
~さらに言えば、この場合長いほうのアームしか実は必要がない...
~&ref(toma2.jpg);
**プログラミングで工夫したところ [#u5daba9e]
~この課題でのプログラミングで難しかったのは、交差点とL字...
~ライントレース自体は光センサーが感知した数字から、黒けれ...
~&ref(ペイント.jpg);
~問題である交差点は、黒ければ斜め前に進むのプログラムを実...
~&ref(aaa.jpg);
~さらに缶をどかし、元に戻して進むというのも、チームを苦し...
~缶をどかすのは、光センサーで缶に当たると、その値が白にな...
~さらに、プログラミング上で缶を元に戻した後、旋回の時にア...
*プログラミング作成 [#y58cd647]
**プログラムの省略のための定義付け [#b36c965e]
~「#define ○○ 命令式」と書くことで後に○○と打つと、命令式...
~このプログラムでの定義付けは以下の通り。
#define kurot 42 //kurotと打つと42という数がそこに書...
#define kurok 45 //kurokと打つと45という数がそこに書...
#define kurog 48 //kurogと打つと48という数がそこに書...
#define shiro 49 //shiroと打つと49という数がそこに書...
#define hi 2 //hiと打つと2という数がそこに書き込...
#define low 1 //lowと打つと1という数がそこに書き込...
#define sh SetPower(OUT_AC, hi); //車輪にかける力を...
#define sl SetPower(OUT_AC,low); //車輪にかける力を...
#define slh SetPower(OUT_A,low); SetPower(OUT_C,hi); ...
#define shl SetPower(OUT_A,hi); SetPower(OUT_C,low); ...
#define mae sh OnFwd(OUT_AC); //比較的速く前進する
#define ushiro OnRev(OUT_AC); //後進する
#define migi0 sl; OnFwd(OUT_A); Off(OUT_C); //右に比...
#define migi1 sl; OnFwd(OUT_A); OnRev(OUT_C); //右に旋...
#define migi2 slh;OnFwd(OUT_A); OnRev(OUT_C); //右に比...
#define hidari0 sl; Off(OUT_A); OnFwd(OUT_C); //左に比...
#define hidari1 sl; OnRev(OUT_A); OnFwd(OUT_C); //左に...
#define hidari2 shl; OnRev(OUT_A); OnFwd(OUT_C); //左に...
#define STEP 1 //STEPと打つと1という数がそこに書...
#define nMAX 7 //nMAXと打つと7という数がそこに書...
#define yasumi Off(OUT_AC); Wait(100); //1秒停止する
#define cross 40 //crossと打つ...
#define cross_line sl; OnFwd(OUT_AC); Wait(cross); yasu...
int p=0; //pという関数を置く
int x=1; //xという関数を置く
int n=0; //nという関数を置く
int y=0; //yという関数を置く
**サブルーチンを設定する [#ta87623e]
sub migime(){ //交差点を通るためのプログラ...
while(n < x){ //交差点をx回渡るまで
while(p < nMAX){ //ライントレースのプログラム...
if (SENSOR_2 < kurot){
migi1; //右に旋回する
p++; //黒が連続で感知されたこと...
} else {
if(SENSOR_2 < kurok){
migi0;
} else if(SENSOR_2 < kurog){
mae;
} else if(SENSOR_2 < shiro){
hidari0;
} else {
hidari1;
}
p=0;//黒が連続しなかったときに、カウンタをゼロに...
}
Wait(STEP);//光センサーで、ライン上か否かを調べる...
}
yasumi;//実際に交差点を突破する時のプログラム
hidari1;
Wait(nMAX*STEP*2);
cross_line;
n++;//交差点の数を数えることで、最後の方の直角を...
p=0;//ここで交差点かどうかを判断するカウンタをゼ...
}
}
sub hidarime(){//交差点を通るためのプログラム(左側ライ...
while(n < x){
while(p < nMAX){
if (SENSOR_2 < kurot){
hidari1;
p++;
} else {
if(SENSOR_2 < kurok){
hidari0;
} else if (SENSOR_2 < kurog){
mae;
} else if (SENSOR_2 < shiro){
migi0;
} else {
migi1;
}
p=0;
}
Wait(STEP);
}
yasumi;
migi1;
Wait(nMAX*STEP*2);
cross_line;
n++;
p=0;
}
}
sub migikata(){//直角カーブを通る時や、缶を運ぶ時に交差...
while(FastTimer(0) <= y ) {//缶を運ぶ時に、何秒か前に...
if (SENSOR_2 < kurot) {//通常のライントレース
migi1;
} else if (SENSOR_2 < kurok) {
migi0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
hidari0;
} else {
hidari1;
}
Wait(STEP);
}
}
sub hidarikata(){//直角カーブを通る時や、缶を運ぶ時に交...
while(FastTimer(0) <= y ) {
if (SENSOR_2 < kurot) {
hidari1;
} else if (SENSOR_2 < kurok) {
hidari0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
migi0;
} else {
migi1;
}
Wait(STEP);
}
}
sub migite(){ //缶を感知するまで通常(交差点で直進しな...
while(SENSOR_1 < 49) {
if (SENSOR_2 < kurot) {
migi1;
} else if (SENSOR_2 < kurok) {
migi0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
hidari0;
} else {
hidari1;
}
Wait(STEP);
}
}
sub hidarite(){//缶を感知するまで通常(交差点で直進しな...
while(SENSOR_1 < 49) {
if (SENSOR_2 < kurot) {
hidari1;
} else if (SENSOR_2 < kurok) {
hidari0;
} else if (SENSOR_2 < kurog) {
mae;
} else if (SENSOR_2 < shiro) {
migi0;
} else {
migi1;
}
Wait(STEP);
}
}
**メインタスク 実行するプログラム [#q520d856]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//缶を感知する光セン...
SetSensor(SENSOR_2,SENSOR_LIGHT);//ライントレースをす...
hidarite(); //缶を感知するまで左側をライントレース
ClearTimer(0); //リセット
y=400;hidarikata(); //普通に三秒間ライントレース
sss;OnFwd(OUT_C);OnRev(OUT_A);Wait(80); //180度旋回
sss;OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2 < 45);Of...
ClearTimer(0); //リセット
y=100;migikata(); //ちょっとライントレース
sss;OnRev(OUT_AC);Wait(75); //缶を置いていく
sss;OnFwd(OUT_A);Off(OUT_C);Wait(10); //180度旋回
sss;OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_2 < 45);Of...
sss;OnRev(OUT_A);OnFwd(OUT_C);Wait(30); //車体の角度...
x=4;hidarime();//交差点を通るためのプログラム(左側ラ...
hidarite();//缶を感知するまで左側をライントレース
ClearTimer(0); //リセット
y=400;hidarikata(); //普通に三秒間ライントレース
sss;OnFwd(OUT_C);OnRev(OUT_A);Wait(80); //180度旋回
sss;OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2 < 45);Of...
ClearTimer(0); //リセット
y=100;migikata(); //ちょっとライントレース
sss;OnRev(OUT_AC);Wait(100); //缶を置いていく
sss;OnFwd(OUT_A);Off(OUT_C);Wait(10); //180度旋回
sss;OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_2 < 45);Of...
sss;OnRev(OUT_A);OnFwd(OUT_C);Wait(30); //車体の角度...
hidarite();//缶を感知するまで左側をライントレース
}
*反省と感想 [#e71a078b]
~ほぼ毎日集まって、ロボットを作ったり、プログラミングを書...
~プログラミングがうまく出来ない時に、ロボットを作り直し、...
ページ名: