2015a/Member/nori/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* 課題内容 [#sf34144c]
** ライントレース [#e0a11e64]
ライントレースをしながら,途中にあるピンポン玉をゴールま...
私はAからBのコース(P地点,Q地点ともに直進)でライントレー...
#ref(2015a/Mission2/2015a-mission2.png,50%)
*** ルール [#t0506adb]
-P地点とQ地点の間のどこかにピンポン玉を置く.
-三叉路および交差点では2秒間停止する.
-可能であればA,B,Cのそれぞれにエリアに入る三叉路付近から...
[[課題2>2015a/Mission2]]参照
* 目次 [#j88475a2]
#contents
* コース [#e79a5a13]
私は黄色い丸の場所にピンポン玉を置いて,次のようなコース...
#ref(./course.png,30%)
* ロボット [#b280d77c]
** 全体 [#n12d0019]
ピンポン玉を挟んでシュートする動作をするため,クワガタの...
&ref(./DSC_0221 (2).JPG,10%);
&ref(./DSC_0223.JPG,11%);
** タイヤ部分 [#ecacf051]
挟んでシュートする機構のため縦に長くなってしまったから,...
また,前タイヤと後ろタイヤの間隔が広いとうまく曲がれずラ...
そこで,インストラクションのロボットのタイヤ部分を参考に...
** アーム部分 [#fd189801]
&ref(./DSC_0230_01.jpg,9%);
&ref(./DSC_0233_01(1).jpg,9%);
&ref(./DSC_0241 (2).JPG,9%);
ピンポン玉を挟む,押し出してシュートするという動作をする...
上の真ん中の図の黄色で囲って示してあるブロックはシャフト...
水色で囲って示してある部分が動かせる部分になっている.
仕組みは上図のようになっていて,
+モーターBについているギアが回る(橙矢印)
+ラックギアが平行移動する(赤矢印)
+その先に取り付けてあるウォームギアが前後する(青矢印)
+アーム部分が開閉する(緑矢印)
という仕組みだ.開くと同時にピンポン玉を押し出せるように...
また,開くときと閉じるときに本体の部品にあたって,開きす...
そこで,モーターBの軸の部分にクラッチギアを用いることで,...
** 光センサー [#w358038f]
光センサーはできるだけ左右のタイヤの中心に持ってくると,...
#ref(./DSC_0228(1).JPG,10%)
またこのロボットは,ピンポン玉をシュートする部分があるた...
プログラムがラインの左側をトレースするようになっているた...
* プログラム [#tc80bb2f]
** 定数[#e95297f7]
- THRESHOLD・・・一番黒い場所,白い場所のライトセンサーの...
- STEP・・・定数STEPはライントレースをするときに,1回の判...
- EYE・・・光センサーの値をEYEとした.
#define THRESHOLD 44
#define STEP 1
#define EYE SENSOR_2
** マクロ[#z0ce7e8f]
- pause・・・交差点,三叉路に入ったと判定したとき,2秒間...
- go_forward・・・ライントレースでセンサーの値が丁度しき...
- correct_direction(t)・・・交叉点,三叉路に入った後は少...
#define pause Off(OUT_AC);Wait(200);
#define go_forward OnFwd(OUT_AC);
#define correct_direction(t) OnFwd(OUT_A);OnRev(OUT_C);W...
** サブルーチン [#c64b4935]
- catch_ball・・・進みながらピンポン玉をキャッチする.
- shoot・・・少し止まってからピンポン玉をシュートする.速...
sub catch_ball()
{
go_forward;Wait(30);
OnFwd(OUT_B);Wait(15);
Off(OUT_ABC);
PlaySound(SOUND_FAST_UP);
}
sub shoot()
{
Off(OUT_AC);Wait(10);
SetPower(OUT_B,7);
OnRev(OUT_B);Wait(13);
Off(OUT_B);
PlaySound(SOUND_UP);
}
** 変数 [#v21dee11]
cross_point・・・交差点に差し掛かった回数をカウントするた...
この変数を使って,交差点を通った回数でmainタスクの中のwhi...
** ライントレース [#te113605]
*** 直線や緩いカーブをトレースするプログラム [#v0a15963]
サブルーチンline_traceとして定義した.
このプログラムではセンサーの値によってロボットの行動を3つ...
曲がるときは片方のタイヤを止めて曲がるようにしている.
また,真っ直ぐ進むときのパワーは3とし,曲がるときのパワー...
sub line_trace()
{
if(EYE < THRESHOLD) { //センサーの値がしきい...
SetPower(OUT_AC,THRESHOLD-EYE);
OnFwd(OUT_C);Off(OUT_A);
ClearTimer(1);
} else {
if(EYE == THRESHOLD) { //センサーの値がちょ...
SetPower(OUT_AC,3);
go_forward;
ClearTimer(1);
} else { //センサーの値がしきい値よりも高い...
SetPower(OUT_AC,EYE-THRESHOLD);
OnFwd(OUT_A);Off(OUT_C);
}
ClearTimer(0);
}
Wait(STEP);
/*黒になったときはF...
白になったときはFastTimer(1)はそのまま,黒と灰...
if(FastTimer(1) > 80){ ...
OnRev(OUT_AC);until(EYE < THRESHOLD);Of...
ClearTimer(0);
}
}
*** タイマー FastTimer(0),FastTimer(1) [#r4a9195d]
- FastTimer(0)・・・初めは変数を使って「連続で黒になった(...
しかしタイマーを使って「連続で黒になった時間」で交...
そのため,FastTimer(0)を使って,時間で交差点の判別...
- FastTimer(1)・・・FastTimer(0)とは逆で,「連続で白にな...
これを使って一定の時間白と判定し続けた場合,ライン...
mainタスクではサブルーチンline_traceをwhile文で囲ってある...
while(FastTimer(0) < 35) {
line_trace();
}
pause;
correct_direction(20);
go_forward;Wait(15);
*** 急なカーブをトレースするプログラム [#k52c9766]
P地点からQ地点には半径7.5?(このプログラムではラインの左側...
このカーブはサブルーチンline_traceでは曲がりきることがで...
そこでサブルーチンline_traceにOnRevを追加し,急なカーブを...
sub curve_trace() //OnRevを追加し急なカーブを曲がれ...
{
if(EYE < THRESHOLD) {
SetPower(OUT_C,THRESHOLD-EYE);SetPower(OUT_A,1);
OnFwd(OUT_C);OnRev(OUT_A);
ClearTimer(1);
} else {
if(EYE == THRESHOLD) {
SetPower(OUT_AC,3);
go_forward;
ClearTimer(1);
} else {
SetPower(OUT_A,EYE-THRESHOLD);SetPower(...
OnFwd(OUT_A);OnRev(OUT_C);
}
ClearTimer(0);
}
Wait(STEP);
if(FastTimer(1) > 80){
OnRev(OUT_AC);until(EYE < THRESHOLD);Off(OUT_AC);
ClearTimer(0);
}
}
** mainタスク [#tccf2fc7]
*** while文の分割 [#h72f4766]
交差点と三叉路ごとに,ピンポン玉をとってから直進,直進,...
*** タイマー FastTimer(2) [#fc6471ea]
FastTimer(2)・・・P地点からQ地点の間に,半径7.5?のカー...
*** task main [#ic456ea0]
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int cross_point=0;
ClearTimer(2);
//////////////////////
//
// エリアAからP地点
//
//////////////////////
while(cross_point==0) { ...
while(FastTimer(0) < 35) { //最初の...
line_trace();
}
pause;
correct_direction(30);
catch_ball(); //ピンポン玉を挟む
ClearTimer(0);
cross_point++; //ループ終わり
}
//////////////////////
//
// P地点からQ地点
//
//////////////////////
ClearTimer(2);
while(cross_point==1) { //cross_poi...
while((FastTimer(2) < 500)&&(FastTimer(0)...
line_trace();
}
PlaySound(SOUND_CLICK); //判定が切...
while((FastTimer(2) < 1200)&&(FastTimer(0) < 10...
curve_trace();
}
PlaySound(SOUND_CLICK); //判...
while(FastTimer(0) < 35) { //急カー...
line_trace();
}
pause;
correct_direction(20);
go_forward;Wait(15); //交差点を直進
ClearTimer(0);
cross_point++; //ループ終わり
}
//////////////////////
//
// Q地点からエリアB
//
//////////////////////
while(cross_point==2) { //cross_poi...
while(FastTimer(0) < 30) { //最後の...
line_trace();
}
pause;
correct_direction(10);
shoot(); //シュート
cross_point++; //ループ終わり
}
}
* 動画 [#w7140d73]
http://youtu.be/5y0AsZu49UQ
* まとめと反省 [#db143145]
ピンポン玉を挟んでシュートする機構のために,ロボットが大...
そのため,小回りが利きにくくなってしまい,急カーブ用のラ...
しかし,タイマーを使ってライントレースのプログラムを切り...
このプログラムだと,タイマーで制御している部分も大幅にず...
終了行:
* 課題内容 [#sf34144c]
** ライントレース [#e0a11e64]
ライントレースをしながら,途中にあるピンポン玉をゴールま...
私はAからBのコース(P地点,Q地点ともに直進)でライントレー...
#ref(2015a/Mission2/2015a-mission2.png,50%)
*** ルール [#t0506adb]
-P地点とQ地点の間のどこかにピンポン玉を置く.
-三叉路および交差点では2秒間停止する.
-可能であればA,B,Cのそれぞれにエリアに入る三叉路付近から...
[[課題2>2015a/Mission2]]参照
* 目次 [#j88475a2]
#contents
* コース [#e79a5a13]
私は黄色い丸の場所にピンポン玉を置いて,次のようなコース...
#ref(./course.png,30%)
* ロボット [#b280d77c]
** 全体 [#n12d0019]
ピンポン玉を挟んでシュートする動作をするため,クワガタの...
&ref(./DSC_0221 (2).JPG,10%);
&ref(./DSC_0223.JPG,11%);
** タイヤ部分 [#ecacf051]
挟んでシュートする機構のため縦に長くなってしまったから,...
また,前タイヤと後ろタイヤの間隔が広いとうまく曲がれずラ...
そこで,インストラクションのロボットのタイヤ部分を参考に...
** アーム部分 [#fd189801]
&ref(./DSC_0230_01.jpg,9%);
&ref(./DSC_0233_01(1).jpg,9%);
&ref(./DSC_0241 (2).JPG,9%);
ピンポン玉を挟む,押し出してシュートするという動作をする...
上の真ん中の図の黄色で囲って示してあるブロックはシャフト...
水色で囲って示してある部分が動かせる部分になっている.
仕組みは上図のようになっていて,
+モーターBについているギアが回る(橙矢印)
+ラックギアが平行移動する(赤矢印)
+その先に取り付けてあるウォームギアが前後する(青矢印)
+アーム部分が開閉する(緑矢印)
という仕組みだ.開くと同時にピンポン玉を押し出せるように...
また,開くときと閉じるときに本体の部品にあたって,開きす...
そこで,モーターBの軸の部分にクラッチギアを用いることで,...
** 光センサー [#w358038f]
光センサーはできるだけ左右のタイヤの中心に持ってくると,...
#ref(./DSC_0228(1).JPG,10%)
またこのロボットは,ピンポン玉をシュートする部分があるた...
プログラムがラインの左側をトレースするようになっているた...
* プログラム [#tc80bb2f]
** 定数[#e95297f7]
- THRESHOLD・・・一番黒い場所,白い場所のライトセンサーの...
- STEP・・・定数STEPはライントレースをするときに,1回の判...
- EYE・・・光センサーの値をEYEとした.
#define THRESHOLD 44
#define STEP 1
#define EYE SENSOR_2
** マクロ[#z0ce7e8f]
- pause・・・交差点,三叉路に入ったと判定したとき,2秒間...
- go_forward・・・ライントレースでセンサーの値が丁度しき...
- correct_direction(t)・・・交叉点,三叉路に入った後は少...
#define pause Off(OUT_AC);Wait(200);
#define go_forward OnFwd(OUT_AC);
#define correct_direction(t) OnFwd(OUT_A);OnRev(OUT_C);W...
** サブルーチン [#c64b4935]
- catch_ball・・・進みながらピンポン玉をキャッチする.
- shoot・・・少し止まってからピンポン玉をシュートする.速...
sub catch_ball()
{
go_forward;Wait(30);
OnFwd(OUT_B);Wait(15);
Off(OUT_ABC);
PlaySound(SOUND_FAST_UP);
}
sub shoot()
{
Off(OUT_AC);Wait(10);
SetPower(OUT_B,7);
OnRev(OUT_B);Wait(13);
Off(OUT_B);
PlaySound(SOUND_UP);
}
** 変数 [#v21dee11]
cross_point・・・交差点に差し掛かった回数をカウントするた...
この変数を使って,交差点を通った回数でmainタスクの中のwhi...
** ライントレース [#te113605]
*** 直線や緩いカーブをトレースするプログラム [#v0a15963]
サブルーチンline_traceとして定義した.
このプログラムではセンサーの値によってロボットの行動を3つ...
曲がるときは片方のタイヤを止めて曲がるようにしている.
また,真っ直ぐ進むときのパワーは3とし,曲がるときのパワー...
sub line_trace()
{
if(EYE < THRESHOLD) { //センサーの値がしきい...
SetPower(OUT_AC,THRESHOLD-EYE);
OnFwd(OUT_C);Off(OUT_A);
ClearTimer(1);
} else {
if(EYE == THRESHOLD) { //センサーの値がちょ...
SetPower(OUT_AC,3);
go_forward;
ClearTimer(1);
} else { //センサーの値がしきい値よりも高い...
SetPower(OUT_AC,EYE-THRESHOLD);
OnFwd(OUT_A);Off(OUT_C);
}
ClearTimer(0);
}
Wait(STEP);
/*黒になったときはF...
白になったときはFastTimer(1)はそのまま,黒と灰...
if(FastTimer(1) > 80){ ...
OnRev(OUT_AC);until(EYE < THRESHOLD);Of...
ClearTimer(0);
}
}
*** タイマー FastTimer(0),FastTimer(1) [#r4a9195d]
- FastTimer(0)・・・初めは変数を使って「連続で黒になった(...
しかしタイマーを使って「連続で黒になった時間」で交...
そのため,FastTimer(0)を使って,時間で交差点の判別...
- FastTimer(1)・・・FastTimer(0)とは逆で,「連続で白にな...
これを使って一定の時間白と判定し続けた場合,ライン...
mainタスクではサブルーチンline_traceをwhile文で囲ってある...
while(FastTimer(0) < 35) {
line_trace();
}
pause;
correct_direction(20);
go_forward;Wait(15);
*** 急なカーブをトレースするプログラム [#k52c9766]
P地点からQ地点には半径7.5?(このプログラムではラインの左側...
このカーブはサブルーチンline_traceでは曲がりきることがで...
そこでサブルーチンline_traceにOnRevを追加し,急なカーブを...
sub curve_trace() //OnRevを追加し急なカーブを曲がれ...
{
if(EYE < THRESHOLD) {
SetPower(OUT_C,THRESHOLD-EYE);SetPower(OUT_A,1);
OnFwd(OUT_C);OnRev(OUT_A);
ClearTimer(1);
} else {
if(EYE == THRESHOLD) {
SetPower(OUT_AC,3);
go_forward;
ClearTimer(1);
} else {
SetPower(OUT_A,EYE-THRESHOLD);SetPower(...
OnFwd(OUT_A);OnRev(OUT_C);
}
ClearTimer(0);
}
Wait(STEP);
if(FastTimer(1) > 80){
OnRev(OUT_AC);until(EYE < THRESHOLD);Off(OUT_AC);
ClearTimer(0);
}
}
** mainタスク [#tccf2fc7]
*** while文の分割 [#h72f4766]
交差点と三叉路ごとに,ピンポン玉をとってから直進,直進,...
*** タイマー FastTimer(2) [#fc6471ea]
FastTimer(2)・・・P地点からQ地点の間に,半径7.5?のカー...
*** task main [#ic456ea0]
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
int cross_point=0;
ClearTimer(2);
//////////////////////
//
// エリアAからP地点
//
//////////////////////
while(cross_point==0) { ...
while(FastTimer(0) < 35) { //最初の...
line_trace();
}
pause;
correct_direction(30);
catch_ball(); //ピンポン玉を挟む
ClearTimer(0);
cross_point++; //ループ終わり
}
//////////////////////
//
// P地点からQ地点
//
//////////////////////
ClearTimer(2);
while(cross_point==1) { //cross_poi...
while((FastTimer(2) < 500)&&(FastTimer(0)...
line_trace();
}
PlaySound(SOUND_CLICK); //判定が切...
while((FastTimer(2) < 1200)&&(FastTimer(0) < 10...
curve_trace();
}
PlaySound(SOUND_CLICK); //判...
while(FastTimer(0) < 35) { //急カー...
line_trace();
}
pause;
correct_direction(20);
go_forward;Wait(15); //交差点を直進
ClearTimer(0);
cross_point++; //ループ終わり
}
//////////////////////
//
// Q地点からエリアB
//
//////////////////////
while(cross_point==2) { //cross_poi...
while(FastTimer(0) < 30) { //最後の...
line_trace();
}
pause;
correct_direction(10);
shoot(); //シュート
cross_point++; //ループ終わり
}
}
* 動画 [#w7140d73]
http://youtu.be/5y0AsZu49UQ
* まとめと反省 [#db143145]
ピンポン玉を挟んでシュートする機構のために,ロボットが大...
そのため,小回りが利きにくくなってしまい,急カーブ用のラ...
しかし,タイマーを使ってライントレースのプログラムを切り...
このプログラムだと,タイマーで制御している部分も大幅にず...
ページ名: