2012b/Member/Yuto/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*Mission1レポート [#z35c28af]
[[2012b/Member]]
#contents
**課題 [#qadfb787]
-ボールを回収
-ライントレースを用いてゴールのある場所まで運ぶ
-ボールをシュートする
以上の3つをこなすロボットの作成。~
使用できるのは配られたパーツのみ、光センサは1個だけという...
***コース説明 [#fd0ede4b]
#ref(2012b/Member/Yuto/Mission1/IMG_0623-3.jpg,50%,コース)
コースの概形は写真のようになっている。~
このようにカーブにもゆるいものや急なもの、直角なものなど...
この写真に無くて加工して書いたが、本来このようにT字の交差...
私のプログラムの場合、赤丸の部分がボールの位置(こちらがス...
途中、黄色い丸の部分に障害物がある。
**ロボットについて [#x3cb738b]
#ref(2012b/Member/Yuto/Mission1/IMG_0619 .jpg,50%,ロボッ...
ロボットの中にボールを回収することを考えて作った結果こう...
サイズは幅17cm,長さ16cm,高さ14cmと割と大型。~
大きすぎて障害物が避けられなくなってしまった。~
タイヤ2個とパーツで作った足2個で支えられている。~
#ref(2012b/Member/Yuto/Mission1/IMG_0622-1.jpg,50%,裏側)
上の写真は裏側から見た様子。~
赤丸の部分にボールを取り込む構造になっている。~
モーターを3個、ライントレースをするために光センサ1個を使...
2つのモーターで左右それぞれのタイヤの制御をしている。~
残りの1つのモーターでロボット内にボールの取り込み、シュー...
#ref(2012b/Member/Yuto/Mission1/IMG_0618.jpg,50%,モーター)
上の写真はボールを取り込み、シュートを行うモーターの構造。~
左のアームが下りると右の部分が引っ込み、左のアームが上が...
このモーターと本体を別々に作った為、下の写真のような欠点...
#ref(2012b/Member/Yuto/Mission1/IMG_0620-1.jpg,50%,欠点1)
赤丸の部分では上で説明した仕組みを動かすための重要なゴム...
しかし、直そうにしても中々対処できない。~
本体側のパーツは本体の強度に影響するもので、動かそうにも...
結局今回は動作に影響がなかったのでそのままになっているが...
&br;
本体から作った事で起こった問題はこれだけではない。~
#ref(2012b/Member/Yuto/Mission1/IMG_0621 .jpg,50%,欠点2)
上の写真はロボットとNXT本体の接合部である。~
NXTはこの黒いペグ2個だけで無理矢理くっつけている。~
そのためNXTを持って上へ持ち上げると簡単に外れてしまう。~
本当はNXTにパーツを付けていく方が無難なのだが、本体から作...
これも改善すべき点の1つと言えるだろう。~
**プログラムについて [#t8659c56]
プログラムの前にまずはロボットについてもう1つ話さなければ...
それはタイヤと光センサとの距離が遠いことだ。~
これの距離が近いほどカーブの後の交差点をスムーズに読むこ...
***定義 [#mff5487a]
#define THRESHOLD 44/*閾値*/
#define SPEED 40/*基準の速度*/
#define SPEED_L 25/*旋回時の速度*/
閾値と速度の定義。~
閾値はセンサの最高値が57,最低値が38でその中間値前後の数値...
速度は通常走行時との基準値と旋回時の速度の2種類を定義して...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define turn_left OnRL(SPEED_L,-SPEED_L);/*左旋回*/
#define turn_right OnRL(-SPEED_L,SPEED_L);/*右旋回*/
#define STEP 1/*while文の動作の待機時間(1/1000秒)*/
#define nMAX 300/*急カーブかそうでないかの境界*/
3種類のモーターを用いているが、Aのモーターはボールの取り...
***サブルーチン [#cc0a52f7]
サブルーチンはボールを取り込むプログラムとボールをシュー...
sub get(){
/*ボールを取り込むプログラム*/
OnRL(-SPEED,-SPEED);
Wait(1300);
Off(OUT_BC);
OnFwd(OUT_A,70);
Wait(300);
Off(OUT_A);
OnRL(SPEED,SPEED);
Wait(1600);
Off(OUT_BC);
OnRL(SPEED,-SPEED);
Wait(1300);
Off(OUT_BC);
OnRL(SPEED,SPEED);
Wait(300);
Off(OUT_BC);
}
#ref(2012b/Member/Yuto/Mission1/IMG_0624.PNG,70%,get)
図で上のサブルーチンを表現するとこのようになる。(画像は[[...
ロボットは赤色で、凸の方に光センサがあり、その反対側が取...
アームは上げた状態から始まり、ボールを取り込んだ後枠の中...
そしてライントレースする線の方向を向き、枠から出るように...
sub shoot()
{
/*ボールをシュートするプログラム*/
OnRL(SPEED,SPEED);
Wait(1700);
Off(OUT_BC);
OnRL(SPEED,-SPEED);
Wait(1300);
Off(OUT_BC);
OnRev(OUT_A,70);
Wait(300);
Off(OUT_A);
}
#ref(2012b/Member/Yuto/Mission1/IMG_0625.PNG,70%,shoot)
図で上のサブルーチンを表現するとこのようになる。(画像は[[...
最初にも話したが、このロボットはタイヤと光センサの距離が...
従って最後のゴールの枠に対してもまっすぐではなく、斜めに...
これではどこで枠まで来たのかが判断できないということで、...
変数nOnlineがnMAXより大きくなった後、このプログラムの基準...
これを利用して、枠の正面まで動かし、シュートするようにし...
最後までライントレースをしていないのでこれが良いのかどう...
***本体 [#i638c247]
task main()
{
get();
int count=0;/*ボールを出したことをを表し、while文を抜け...
int flag=0;/*説明はプログラム外の文参照*/
int gain;/*センサの値と閾値の差分を入れる変数*/
int nOnline=0;/*黒線を連続で読んだ数*/
long t0=CurrentTick();/*動作を始めた時の現在時間を入れ...
SetSensorLight(S1);
while(count!=1){
if(SENSOR_1<=THRESHOLD-5){
if(flag==2&&(CurrentTick()-t0>=3000)){
shoot();
count=1;
}else if(flag==1&&(CurrentTick()-t0>=10000)&&( nOnlin...
flag=2;
t0=CurrentTick();/*一つの時間での処理が終わったと判...
}else if(flag==0&&(CurrentTick()-t0>=20000)){
flag=1;
/*A*/
turn_left;
Wait(400);
t0=CurrentTick();/*一つの時間での処理が終わったと判...
}else if(flag==0){
/*センサーの値が40より下の場合は...
turn_right;
}else{
if(flag==1&&(CurrentTick()-t0>=10000)){
/*B*/
OnRL(SPEED,-SPEED);
}else{
turn_left;
}
}
nOnline++;
}else if(SENSOR_1>=THRESHOLD+7){
/*センサーの値が51以上の場合は黒...
if(flag==0){
turn_left;
}else{
turn_right;
}
nOnline=0;
}else{
/*センサーの値が40-50の範囲内の場...
gain=THRESHOLD-SENSOR_1;
if(flag==0){
OnRL(SPEED-gain,SPEED+gain);
}else{
OnRL(SPEED+gain,SPEED-gain);
}
nOnline=0;
}
Wait(STEP);
}
}
まず、変数flagについてだが、これは主にライントレースをす...
最初(flag=0の時)は黒線の右側でライントレースをし、大体1つ...
この切り替えの時に、白線の上にいると脱線してしまう。~
そこでコメントAの部分で左旋回をし、少なくとも黒線の上に乗...
左側でのライントレースをしてから10秒後にflag=2になるが、...
これでゴール前の急カーブを曲がり切れるようにコメントBの部...
**反省点 [#a4f6e948]
-タイヤと光センサの距離をもっと近づけるべきだった。
-障害物に接触しないサイズにする必要があった。
-本体を中心としたロボット作成をすべきだった。
**感想・考察 [#p90b341c]
構想をそのまま形にするのはなかなか難しいことだと感じた。~
このロボットでも一応成功はしているが、やはり交差点は判断...
プログラムの前に、まず本体の構造を重要視すべきだと実感し...
&br;
終了行:
*Mission1レポート [#z35c28af]
[[2012b/Member]]
#contents
**課題 [#qadfb787]
-ボールを回収
-ライントレースを用いてゴールのある場所まで運ぶ
-ボールをシュートする
以上の3つをこなすロボットの作成。~
使用できるのは配られたパーツのみ、光センサは1個だけという...
***コース説明 [#fd0ede4b]
#ref(2012b/Member/Yuto/Mission1/IMG_0623-3.jpg,50%,コース)
コースの概形は写真のようになっている。~
このようにカーブにもゆるいものや急なもの、直角なものなど...
この写真に無くて加工して書いたが、本来このようにT字の交差...
私のプログラムの場合、赤丸の部分がボールの位置(こちらがス...
途中、黄色い丸の部分に障害物がある。
**ロボットについて [#x3cb738b]
#ref(2012b/Member/Yuto/Mission1/IMG_0619 .jpg,50%,ロボッ...
ロボットの中にボールを回収することを考えて作った結果こう...
サイズは幅17cm,長さ16cm,高さ14cmと割と大型。~
大きすぎて障害物が避けられなくなってしまった。~
タイヤ2個とパーツで作った足2個で支えられている。~
#ref(2012b/Member/Yuto/Mission1/IMG_0622-1.jpg,50%,裏側)
上の写真は裏側から見た様子。~
赤丸の部分にボールを取り込む構造になっている。~
モーターを3個、ライントレースをするために光センサ1個を使...
2つのモーターで左右それぞれのタイヤの制御をしている。~
残りの1つのモーターでロボット内にボールの取り込み、シュー...
#ref(2012b/Member/Yuto/Mission1/IMG_0618.jpg,50%,モーター)
上の写真はボールを取り込み、シュートを行うモーターの構造。~
左のアームが下りると右の部分が引っ込み、左のアームが上が...
このモーターと本体を別々に作った為、下の写真のような欠点...
#ref(2012b/Member/Yuto/Mission1/IMG_0620-1.jpg,50%,欠点1)
赤丸の部分では上で説明した仕組みを動かすための重要なゴム...
しかし、直そうにしても中々対処できない。~
本体側のパーツは本体の強度に影響するもので、動かそうにも...
結局今回は動作に影響がなかったのでそのままになっているが...
&br;
本体から作った事で起こった問題はこれだけではない。~
#ref(2012b/Member/Yuto/Mission1/IMG_0621 .jpg,50%,欠点2)
上の写真はロボットとNXT本体の接合部である。~
NXTはこの黒いペグ2個だけで無理矢理くっつけている。~
そのためNXTを持って上へ持ち上げると簡単に外れてしまう。~
本当はNXTにパーツを付けていく方が無難なのだが、本体から作...
これも改善すべき点の1つと言えるだろう。~
**プログラムについて [#t8659c56]
プログラムの前にまずはロボットについてもう1つ話さなければ...
それはタイヤと光センサとの距離が遠いことだ。~
これの距離が近いほどカーブの後の交差点をスムーズに読むこ...
***定義 [#mff5487a]
#define THRESHOLD 44/*閾値*/
#define SPEED 40/*基準の速度*/
#define SPEED_L 25/*旋回時の速度*/
閾値と速度の定義。~
閾値はセンサの最高値が57,最低値が38でその中間値前後の数値...
速度は通常走行時との基準値と旋回時の速度の2種類を定義して...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define turn_left OnRL(SPEED_L,-SPEED_L);/*左旋回*/
#define turn_right OnRL(-SPEED_L,SPEED_L);/*右旋回*/
#define STEP 1/*while文の動作の待機時間(1/1000秒)*/
#define nMAX 300/*急カーブかそうでないかの境界*/
3種類のモーターを用いているが、Aのモーターはボールの取り...
***サブルーチン [#cc0a52f7]
サブルーチンはボールを取り込むプログラムとボールをシュー...
sub get(){
/*ボールを取り込むプログラム*/
OnRL(-SPEED,-SPEED);
Wait(1300);
Off(OUT_BC);
OnFwd(OUT_A,70);
Wait(300);
Off(OUT_A);
OnRL(SPEED,SPEED);
Wait(1600);
Off(OUT_BC);
OnRL(SPEED,-SPEED);
Wait(1300);
Off(OUT_BC);
OnRL(SPEED,SPEED);
Wait(300);
Off(OUT_BC);
}
#ref(2012b/Member/Yuto/Mission1/IMG_0624.PNG,70%,get)
図で上のサブルーチンを表現するとこのようになる。(画像は[[...
ロボットは赤色で、凸の方に光センサがあり、その反対側が取...
アームは上げた状態から始まり、ボールを取り込んだ後枠の中...
そしてライントレースする線の方向を向き、枠から出るように...
sub shoot()
{
/*ボールをシュートするプログラム*/
OnRL(SPEED,SPEED);
Wait(1700);
Off(OUT_BC);
OnRL(SPEED,-SPEED);
Wait(1300);
Off(OUT_BC);
OnRev(OUT_A,70);
Wait(300);
Off(OUT_A);
}
#ref(2012b/Member/Yuto/Mission1/IMG_0625.PNG,70%,shoot)
図で上のサブルーチンを表現するとこのようになる。(画像は[[...
最初にも話したが、このロボットはタイヤと光センサの距離が...
従って最後のゴールの枠に対してもまっすぐではなく、斜めに...
これではどこで枠まで来たのかが判断できないということで、...
変数nOnlineがnMAXより大きくなった後、このプログラムの基準...
これを利用して、枠の正面まで動かし、シュートするようにし...
最後までライントレースをしていないのでこれが良いのかどう...
***本体 [#i638c247]
task main()
{
get();
int count=0;/*ボールを出したことをを表し、while文を抜け...
int flag=0;/*説明はプログラム外の文参照*/
int gain;/*センサの値と閾値の差分を入れる変数*/
int nOnline=0;/*黒線を連続で読んだ数*/
long t0=CurrentTick();/*動作を始めた時の現在時間を入れ...
SetSensorLight(S1);
while(count!=1){
if(SENSOR_1<=THRESHOLD-5){
if(flag==2&&(CurrentTick()-t0>=3000)){
shoot();
count=1;
}else if(flag==1&&(CurrentTick()-t0>=10000)&&( nOnlin...
flag=2;
t0=CurrentTick();/*一つの時間での処理が終わったと判...
}else if(flag==0&&(CurrentTick()-t0>=20000)){
flag=1;
/*A*/
turn_left;
Wait(400);
t0=CurrentTick();/*一つの時間での処理が終わったと判...
}else if(flag==0){
/*センサーの値が40より下の場合は...
turn_right;
}else{
if(flag==1&&(CurrentTick()-t0>=10000)){
/*B*/
OnRL(SPEED,-SPEED);
}else{
turn_left;
}
}
nOnline++;
}else if(SENSOR_1>=THRESHOLD+7){
/*センサーの値が51以上の場合は黒...
if(flag==0){
turn_left;
}else{
turn_right;
}
nOnline=0;
}else{
/*センサーの値が40-50の範囲内の場...
gain=THRESHOLD-SENSOR_1;
if(flag==0){
OnRL(SPEED-gain,SPEED+gain);
}else{
OnRL(SPEED+gain,SPEED-gain);
}
nOnline=0;
}
Wait(STEP);
}
}
まず、変数flagについてだが、これは主にライントレースをす...
最初(flag=0の時)は黒線の右側でライントレースをし、大体1つ...
この切り替えの時に、白線の上にいると脱線してしまう。~
そこでコメントAの部分で左旋回をし、少なくとも黒線の上に乗...
左側でのライントレースをしてから10秒後にflag=2になるが、...
これでゴール前の急カーブを曲がり切れるようにコメントBの部...
**反省点 [#a4f6e948]
-タイヤと光センサの距離をもっと近づけるべきだった。
-障害物に接触しないサイズにする必要があった。
-本体を中心としたロボット作成をすべきだった。
**感想・考察 [#p90b341c]
構想をそのまま形にするのはなかなか難しいことだと感じた。~
このロボットでも一応成功はしているが、やはり交差点は判断...
プログラムの前に、まず本体の構造を重要視すべきだと実感し...
&br;
ページ名: