2015a/Member/Rabbit/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2015a/Member]]
#contents
* 今回の課題について [#r00b1864]
今回の課題は次のコースをライントレースをすることである。
#ref(./2015a-mission2.png,50%)
私の担当はBからAのコースです。
ただラインをたどるだけではなく
( 1 ) B地点からA地点へ (Q交差点では直進、P三叉路では直進)
( 2 )PとQで2秒間停止
( 3 )エリアAの三叉路付近からボールをゴール(図の茶色の...
と言う3つの条件を満たさなくてはいけない。
*ロボット本体について [#oeb7edf7]
ライントレースをしてコースを進む車体とボールをつかむため...
**車体について [#of6e552c]
#ref(./IMG_0555.JPG,10%)
付属のマニュアルに書いてあるロボットを使った。
モーターCを右のタイヤ(写真の下側)を、モーターAを左タイ...
二つのモーターを使って前進、後進、その場で旋回、片方のモ...
OnRevで前進、OnFwdで後進する。
**アームについて [#x5441150]
#ref(./IMG_0552.JPG,10%)
決まった時間がたつとアームが下がりボールを捕まえるように...
モーターBを使って動かす。
#ref(./IMG_0605.JPG,10%)
OnRevでアームを持ち上げる。赤い矢印はモーターB、青い矢印...
#ref(./IMG_0606.JPG,10%)
OnFwdでアームを下げる。赤い矢印はモーターB、青い矢印はア...
モーターBを回転させることでアームを下げてボールを捕まえた...
**全体 [#ld0055da]
#ref(./IMG_0551.JPG,20%)
この写真がロボットの完成品の全体である。
ボールをシュートする時はアームを持ち上げて一度後ろに下が...
*一つ目のプログラムについて [#e500d461]
**定義について [#xa13aeb5]
***しきい値の基準とモーターを動かす時の力の定義、1回の判...
#define threshold 45 //しきい値の基準
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER); //モーター...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //モータ...
#define step 3 //1回の判断でロボットを動作させる時間
今回の課題ではモーターを動かす時の力は、前進の時は大きく...
1回の判断でロボットを動作させる時間はあまり考えず、うまく...
***ロボットの動きに関する定義 [#k121acd6]
#define go_forward set_power_H; OnRev(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_C);OnFwd(OUT_A...
#define turn_left0 set_power_L; OnRev(OUT_C);Off(OUT_A);...
#define turn_right1 set_power_L; OnRev(OUT_A);OnFwd(OUT_...
#define turn_right0 set_power_L; OnRev(OUT_A);Off(OUT_C)...
OnRevで前進、OnFwdで後進する。
モーターを動かす時の力は、前進の時は大きく曲がるときは小...
***交差点の横断に関する定義 [#o3c6526d]
#define max 5 //連続して右旋回できる最大値
#define short_break Off(OUT_AC);Wait(10); //小休止
#define closs_line OnRev(OUT_AC);Wait(20);short_break;Wa...
連続して旋回できる最大値はあまり考えず、うまくいったとき...
講義中に使った資料に小休止が入っていたのでここにも書いて...
(1)PとQで2秒間停止 を成功させるために交差点を渡った...
***タイマーに関する定義 [#lb42fec4]
#define Qkara 600 //Qについてから交差点を渡るまでの時間...
#define Pmade1 210 //Qの交差点を渡ってからボールをつかむ...
#define Pmade2 810 //ボールを掴んでからPに着くまでの時間...
#define last 1210 //PについてからエリアAにつくまでの時間...
Qkaraを一つ目のタイマーで測る。Pmade1とPmade2を二つ目のタ...
タイマーを使って交差点があっても交差点とみなさないプログ...
Pmade1とPmade2の間でボールを捕まえる。
lastの後にボールをシュートするので合計で28秒くらいの時...
***アームの動作に関する定義 [#ia3e5033]
#define ageru OnRev(OUT_B);Wait(9);Off(OUT_B); //アーム...
#define sageru OnFwd(OUT_B);Wait(15);Off(OUT_B); //アー...
#define utu OnFwd(OUT_AC);Wait(50);ageru;OnRev(OUT_AC);W...
シュートする時はアームを持ち上げて一度後ろに下がってから...
OnRevでアームを持ち上げる。OnFwdでアームを下げる。
シュートする時はアームを持ち上げて一度後ろに下がってから...
**サブルーチンについて [#ha47a244]
***交差点があっても交差点とみなさないプログラム(普通のラ...
下の図の?、?を移動する時のプログラム。急カーブを交差点と...
線の右側を走るためにしきい値が小さいときは右に、大きいと...
まっすぐ進むときはモーターの力を大きく、曲がるときは小さ...
sub line_traceN() //交差点があっても交差点とみなさないプ...
{
if(SENSOR_2 < threshold -8) { turn_right1; } //しきい値...
else if (SENSOR_2 < threshold -6) { turn_right0;} //しき...
else if (SENSOR_2 < threshold -3) { go_forward;} //しき...
else if (SENSOR_2 < threshold -2) { turn_left0;} //しき...
else { turn_left1;} //しきい値が43以上の時は左に旋回
Wait(step); //1回の判断でロボットを動作させる時間
}
しきい値が37より小さい時は右に旋回。しきい値が37以上...
しきい値が39以上で42より小さい時は前進。
しきい値が42の時は右のタイヤだけを動かしてゆっくり左に...
***交差点を渡ることが出来るプログラム(交差点があれば交差...
明るさの判断を繰り返しているときに連続して黒(しきい値3...
下の図の?、?を走るプログラム。交差点を見つけて渡ることが...
黒が連続した時以外は上に書いてあるサブルーチンと同じ動き...
sub line_traceK() //交差点を渡ることが出来るプログラム(...
{
int nOnline=0; //カウンタを0にする。
while (nOnline < max) { //黒が連続したとき以外は上のサ...
if (SENSOR_2 < threshold-8) {turn_right1; nOnline+...
else {if (SENSOR_2 < threshold -6) { turn_right0;}...
else if (SENSOR_2 < threshold-3) {go_forward;} //...
else if (SENSOR_2 < threshold -2) {turn_left0;} /...
else {turn_left1;} //しきい値が43以上の時は左に...
nOnline=0; } //しきい値が37以上の時はカウントをゼ...
Wait(step); //1回の判断でロボットを動作させる時間
}
しきい値が37より小さいときだけひとつカウントを増やす。5...
しきい値が37以上なら0から数えなおしをする。
しきい値が37より小さい値を5回以上連続でとるとそこを交...
short_break //小休止
turn_left1; Wait(max*step); //車体を道に対してまっす...
closs_line; //交差点を渡り2秒間停止する。小休止の中...
nOnline=0; // 渡り終わったらカウンタをリセットする。
}
交差点を渡ったら2秒間停止する。小休止の中の0.1秒+1.9秒...
渡り終わったらカウンタをリセットする。
**task main() について [#vcaa89a9]
急カーブのあるところでは交差点があっても交差点とみなさな...
タイマーを使って二つのサブルーチンを切り替えてゴールに向...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーを2番に...
ClearTimer(0); //一つ目のタイマーで時間を計り始める
while (FastTimer(0) <= Qkara) {line_traceK(); } //Qを通...
Pl...
交差点を渡ることが出来るプログラム(交差点があれば交差点...
ClearTimer(1); //2つ目のタイマーで時間を計り始める
ここで使うタイマーを変更します。
while (FastTimer(1) <= Pmade1) {line_traceN();} //ボール...
sageru; //ボールを捕まえる。黄色の×印のあたりでボールを...
Pl...
while (FastTimer(1) <= Pmade2) {line_traceN();} //Pに移...
P...
Qを通過後、ボールの近くに移動してボールを捕まえる。そのあ...
ClearTimer(2); //3つ目のタイマーで時間を計り始める
もう一度使うタイマーを変更する。
while (FastTimer(2) <= last) {line_traceK();} //Pを通過...
Pla...
線の右を走るので、Pを交差点を渡ることが出来るプログラム(...
線の右側を走ればPからAの間にあるカーブを交差点とみなして...
utu; //ボールをシュートする。水色の×印のあたりでシュート...
}
エリアAに入る場所の三叉路を交差点とみなして進み、三叉路...
#ref(./b.JPG,20%)
3つのタイマーを使って時間ごとに行う動作を変える。
プログラムの横に書いてある番号と写真の番号が同じになって...
音を鳴らすのはどのタイミングで次に動作に移ったかを分かり...
Pを通過した後は急なカーブがないので、交差点を渡ることが出...
ボールをシュートする時にはアームをあげて体当たりしてゴー...
*問題点 [#oc37101c]
一つ目 光センサーを車体の先端に付けると車体が曲がったと...
二つ目 アームがボールをつかむ前に弾き飛ばしてしまう。
三つめ コースBからAの左側を走ると三叉路Pを直進してしまい...
四つ目 コースを進むうちに時間のずれが蓄積する。そのため...
五つ目 まっすぐゴールに向かってシュートできない。
*解決方法 [#b6da9d3c]
一つ目 車体の中心近くに光センサーを取り付けて、車体が回...
二つ目 車体に固定されている下の黄色の部品は初めは
#ref(./IMG_0516.JPG,20%)
この写真のようになっていたが実際に動かしてみると下に固定...
三つ目 線の右側を走るプログラムを作った。線の右側を走る...
四つ目 タイマーを複数使うことで時間のずれが蓄積しないよ...
五つ目 PからエリアAまで交差点を渡ることが出来るプログラ...
で移動する。エリアAに入る場所の三叉路を交差点とみなして進...
*二つ目のプログラムについて [#t46e46eb]
一口コメントを参考にして時間に頼らずにBからAまで線をたど...
線をたどるだけならタイマーを使わずに済むが、ボールを捕ま...
**考察と反省 [#v9cd4c52]
このプログラムを作ってからすぐにロボットを分解してしまっ...
連続して右旋回できる最大値と1回の判断でロボットを動作させ...
**定義について [#y13c7921]
#define threshold 45 //しきい値の基準
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER); //モーター...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //モータ...
#define step 3 //1回の判断でロボットを動作させる時間
#define go_forward set_power_H; OnRev(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_C);OnFwd(OUT_A...
#define turn_left0 set_power_L; OnRev(OUT_C);Off(OUT_A);...
#define turn_right1 set_power_L; OnRev(OUT_A);OnFwd(OUT_...
#define turn_right0 set_power_L; OnRev(OUT_A);Off(OUT_C)...
#define short_break Off(OUT_AC);Wait(10); //小休止
#define closs_line OnRev(OUT_AC);Wait(20);short_break;Wa...
#define ageru OnRev(OUT_B);Wait(9);Off(OUT_B); //アーム...
#define sageru OnFwd(OUT_B);Wait(15);Off(OUT_B); //アー...
#define utu OnFwd(OUT_AC);Wait(50);ageru;OnRev(OUT_AC);W...
ほとんどの定義は一つ目のプログラムと同じである。説明は上...
#define max 12 //連続して右旋回できる最大値
#define bmade 810 //ボールを捕まえるまで
#define last 1810 //エリアAまで
一つ目のプログラムとは異なる定義。
連続して右旋回できる最大値を増やすことで急カーブを交差点...
タイマーを使ったのはボールの近くに行くまでの時間を計る事と
もう一つはエリアAについてエリアAに入る三叉路を渡った後の...
**サブルーチンについて [#s7c13e45]
sub line_traceK() //交差点を渡ることが出来るプログラム(...
{
int nOnline=0; //カウンタを0にする。
while (nOnline < max) { //黒が連続したとき以外は上のサ...
if (SENSOR_2 < threshold-8) {turn_right1; nOnline++...
else {if (SENSOR_2 < threshold -6) { turn_right0;} ...
else if (SENSOR_2 < threshold-3) {go_forward;} //...
else if (SENSOR_2 < threshold -2) {turn_left0;} //...
else {turn_left1;} //しきい値が43以上の時は左に旋回
nOnline=0; } //しきい値が37以上の時はカウントをゼロ...
Wait(step); //1回の判断でロボットを動作させる時間
}
short_break //小休止
turn_left1; Wait(max*step); //車体を道に対してまっすぐ...
closs_line; //交差点を渡り2秒間停止する。小休止の中の...
nOnline=0; // 渡り終わったらカウンタをリセットする。
}
連続でしきい値が37を下回った時にそこを交差点とみなすサ...
**task main について [#qf74b6d1]
サブルーチンは一つしかないので一つ目のプログラムと違い交...
タイマーを使ったのはボールの近くに行くまでの時間を計る事と
もう一つはエリアAについてエリアAに入る三叉路を渡った後の...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーを2番に...
ClearTimer(0); //一つ目のタイマーで時間を計り始める
while (FastTimer(0) <= bmade) {line_traceK(); } //ボール...
Pla...
交差点を渡ることが出来るプログラム(交差点があれば交差点...
sageru; //ボールを捕まえる。黄色の×印のあたりでボールを...
Pla...
ClearTimer(1); //2つ目のタイマーで時間を計り始める
ここで使うタイマーを変更する。
while (FastTimer(1) <= last) {line_traceK();} //エリアA...
Play...
ボールを捕まえた後Pに向かう。 連続して右旋回できる最大値...
Pを交差点とみなして渡りエリアAに向かう。
utu; //ボールをシュートする。水色の×印のあたりでシュート...
}
エリアAに入る場所の三叉路を交差点とみなして進み、三叉路...
#ref(./p.JPG,20%)
*問題点(一つ目のプログラムの時に見つけた五つの問題点がこ...
一つ目 光センサーを車体の先端に付けると車体が曲がったと...
二つ目 アームがボールをつかむ前に弾き飛ばしてしまう。
三つめ コースBからAの左側を走ると三叉路Pを直進してしまい...
四つ目 コースを進むうちに時間のずれが蓄積する。そのため...
五つ目 まっすぐゴールに向かってシュートできない。
六つ目 交差点を曲がり道と誤認識してしまう。
*解決方法 [#b6da9d3c]
一つ目 車体の中心近くに光センサーを取り付けて、車体が回...
二つ目 車体に固定されている下の黄色の部品は初めは
#ref(./IMG_0516.JPG,20%)
この写真のようになっていたが実際に動かしてみると下に固定...
三つ目 線の右側を走るプログラムを作った。線の右側を走る...
四つ目 タイマーを複数使うことで時間のずれが蓄積しないよ...
五つ目 PからエリアAまで交差点を渡ることが出来るプログラ...
で移動する。エリアAに入る場所の三叉路を交差点とみなして進...
六つ目 連続して右旋回できる最大値が大きすぎるのが原因だ...
*感想 [#p726a8ff]
大体28秒くらいでスタートからシュートするところまででき...
他のチームのように付属のマニュアルにないロボットを作れな...
OnRevで前進、OnFwdで後進する。どうしてこうなるのか分から...
「Pmade」と「Qmade」と言う定義をそれぞれ「Pまで」と「Qま...
ロボコンの後に書き直しているので、以前のものと少し違いま...
終了行:
[[2015a/Member]]
#contents
* 今回の課題について [#r00b1864]
今回の課題は次のコースをライントレースをすることである。
#ref(./2015a-mission2.png,50%)
私の担当はBからAのコースです。
ただラインをたどるだけではなく
( 1 ) B地点からA地点へ (Q交差点では直進、P三叉路では直進)
( 2 )PとQで2秒間停止
( 3 )エリアAの三叉路付近からボールをゴール(図の茶色の...
と言う3つの条件を満たさなくてはいけない。
*ロボット本体について [#oeb7edf7]
ライントレースをしてコースを進む車体とボールをつかむため...
**車体について [#of6e552c]
#ref(./IMG_0555.JPG,10%)
付属のマニュアルに書いてあるロボットを使った。
モーターCを右のタイヤ(写真の下側)を、モーターAを左タイ...
二つのモーターを使って前進、後進、その場で旋回、片方のモ...
OnRevで前進、OnFwdで後進する。
**アームについて [#x5441150]
#ref(./IMG_0552.JPG,10%)
決まった時間がたつとアームが下がりボールを捕まえるように...
モーターBを使って動かす。
#ref(./IMG_0605.JPG,10%)
OnRevでアームを持ち上げる。赤い矢印はモーターB、青い矢印...
#ref(./IMG_0606.JPG,10%)
OnFwdでアームを下げる。赤い矢印はモーターB、青い矢印はア...
モーターBを回転させることでアームを下げてボールを捕まえた...
**全体 [#ld0055da]
#ref(./IMG_0551.JPG,20%)
この写真がロボットの完成品の全体である。
ボールをシュートする時はアームを持ち上げて一度後ろに下が...
*一つ目のプログラムについて [#e500d461]
**定義について [#xa13aeb5]
***しきい値の基準とモーターを動かす時の力の定義、1回の判...
#define threshold 45 //しきい値の基準
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER); //モーター...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //モータ...
#define step 3 //1回の判断でロボットを動作させる時間
今回の課題ではモーターを動かす時の力は、前進の時は大きく...
1回の判断でロボットを動作させる時間はあまり考えず、うまく...
***ロボットの動きに関する定義 [#k121acd6]
#define go_forward set_power_H; OnRev(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_C);OnFwd(OUT_A...
#define turn_left0 set_power_L; OnRev(OUT_C);Off(OUT_A);...
#define turn_right1 set_power_L; OnRev(OUT_A);OnFwd(OUT_...
#define turn_right0 set_power_L; OnRev(OUT_A);Off(OUT_C)...
OnRevで前進、OnFwdで後進する。
モーターを動かす時の力は、前進の時は大きく曲がるときは小...
***交差点の横断に関する定義 [#o3c6526d]
#define max 5 //連続して右旋回できる最大値
#define short_break Off(OUT_AC);Wait(10); //小休止
#define closs_line OnRev(OUT_AC);Wait(20);short_break;Wa...
連続して旋回できる最大値はあまり考えず、うまくいったとき...
講義中に使った資料に小休止が入っていたのでここにも書いて...
(1)PとQで2秒間停止 を成功させるために交差点を渡った...
***タイマーに関する定義 [#lb42fec4]
#define Qkara 600 //Qについてから交差点を渡るまでの時間...
#define Pmade1 210 //Qの交差点を渡ってからボールをつかむ...
#define Pmade2 810 //ボールを掴んでからPに着くまでの時間...
#define last 1210 //PについてからエリアAにつくまでの時間...
Qkaraを一つ目のタイマーで測る。Pmade1とPmade2を二つ目のタ...
タイマーを使って交差点があっても交差点とみなさないプログ...
Pmade1とPmade2の間でボールを捕まえる。
lastの後にボールをシュートするので合計で28秒くらいの時...
***アームの動作に関する定義 [#ia3e5033]
#define ageru OnRev(OUT_B);Wait(9);Off(OUT_B); //アーム...
#define sageru OnFwd(OUT_B);Wait(15);Off(OUT_B); //アー...
#define utu OnFwd(OUT_AC);Wait(50);ageru;OnRev(OUT_AC);W...
シュートする時はアームを持ち上げて一度後ろに下がってから...
OnRevでアームを持ち上げる。OnFwdでアームを下げる。
シュートする時はアームを持ち上げて一度後ろに下がってから...
**サブルーチンについて [#ha47a244]
***交差点があっても交差点とみなさないプログラム(普通のラ...
下の図の?、?を移動する時のプログラム。急カーブを交差点と...
線の右側を走るためにしきい値が小さいときは右に、大きいと...
まっすぐ進むときはモーターの力を大きく、曲がるときは小さ...
sub line_traceN() //交差点があっても交差点とみなさないプ...
{
if(SENSOR_2 < threshold -8) { turn_right1; } //しきい値...
else if (SENSOR_2 < threshold -6) { turn_right0;} //しき...
else if (SENSOR_2 < threshold -3) { go_forward;} //しき...
else if (SENSOR_2 < threshold -2) { turn_left0;} //しき...
else { turn_left1;} //しきい値が43以上の時は左に旋回
Wait(step); //1回の判断でロボットを動作させる時間
}
しきい値が37より小さい時は右に旋回。しきい値が37以上...
しきい値が39以上で42より小さい時は前進。
しきい値が42の時は右のタイヤだけを動かしてゆっくり左に...
***交差点を渡ることが出来るプログラム(交差点があれば交差...
明るさの判断を繰り返しているときに連続して黒(しきい値3...
下の図の?、?を走るプログラム。交差点を見つけて渡ることが...
黒が連続した時以外は上に書いてあるサブルーチンと同じ動き...
sub line_traceK() //交差点を渡ることが出来るプログラム(...
{
int nOnline=0; //カウンタを0にする。
while (nOnline < max) { //黒が連続したとき以外は上のサ...
if (SENSOR_2 < threshold-8) {turn_right1; nOnline+...
else {if (SENSOR_2 < threshold -6) { turn_right0;}...
else if (SENSOR_2 < threshold-3) {go_forward;} //...
else if (SENSOR_2 < threshold -2) {turn_left0;} /...
else {turn_left1;} //しきい値が43以上の時は左に...
nOnline=0; } //しきい値が37以上の時はカウントをゼ...
Wait(step); //1回の判断でロボットを動作させる時間
}
しきい値が37より小さいときだけひとつカウントを増やす。5...
しきい値が37以上なら0から数えなおしをする。
しきい値が37より小さい値を5回以上連続でとるとそこを交...
short_break //小休止
turn_left1; Wait(max*step); //車体を道に対してまっす...
closs_line; //交差点を渡り2秒間停止する。小休止の中...
nOnline=0; // 渡り終わったらカウンタをリセットする。
}
交差点を渡ったら2秒間停止する。小休止の中の0.1秒+1.9秒...
渡り終わったらカウンタをリセットする。
**task main() について [#vcaa89a9]
急カーブのあるところでは交差点があっても交差点とみなさな...
タイマーを使って二つのサブルーチンを切り替えてゴールに向...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーを2番に...
ClearTimer(0); //一つ目のタイマーで時間を計り始める
while (FastTimer(0) <= Qkara) {line_traceK(); } //Qを通...
Pl...
交差点を渡ることが出来るプログラム(交差点があれば交差点...
ClearTimer(1); //2つ目のタイマーで時間を計り始める
ここで使うタイマーを変更します。
while (FastTimer(1) <= Pmade1) {line_traceN();} //ボール...
sageru; //ボールを捕まえる。黄色の×印のあたりでボールを...
Pl...
while (FastTimer(1) <= Pmade2) {line_traceN();} //Pに移...
P...
Qを通過後、ボールの近くに移動してボールを捕まえる。そのあ...
ClearTimer(2); //3つ目のタイマーで時間を計り始める
もう一度使うタイマーを変更する。
while (FastTimer(2) <= last) {line_traceK();} //Pを通過...
Pla...
線の右を走るので、Pを交差点を渡ることが出来るプログラム(...
線の右側を走ればPからAの間にあるカーブを交差点とみなして...
utu; //ボールをシュートする。水色の×印のあたりでシュート...
}
エリアAに入る場所の三叉路を交差点とみなして進み、三叉路...
#ref(./b.JPG,20%)
3つのタイマーを使って時間ごとに行う動作を変える。
プログラムの横に書いてある番号と写真の番号が同じになって...
音を鳴らすのはどのタイミングで次に動作に移ったかを分かり...
Pを通過した後は急なカーブがないので、交差点を渡ることが出...
ボールをシュートする時にはアームをあげて体当たりしてゴー...
*問題点 [#oc37101c]
一つ目 光センサーを車体の先端に付けると車体が曲がったと...
二つ目 アームがボールをつかむ前に弾き飛ばしてしまう。
三つめ コースBからAの左側を走ると三叉路Pを直進してしまい...
四つ目 コースを進むうちに時間のずれが蓄積する。そのため...
五つ目 まっすぐゴールに向かってシュートできない。
*解決方法 [#b6da9d3c]
一つ目 車体の中心近くに光センサーを取り付けて、車体が回...
二つ目 車体に固定されている下の黄色の部品は初めは
#ref(./IMG_0516.JPG,20%)
この写真のようになっていたが実際に動かしてみると下に固定...
三つ目 線の右側を走るプログラムを作った。線の右側を走る...
四つ目 タイマーを複数使うことで時間のずれが蓄積しないよ...
五つ目 PからエリアAまで交差点を渡ることが出来るプログラ...
で移動する。エリアAに入る場所の三叉路を交差点とみなして進...
*二つ目のプログラムについて [#t46e46eb]
一口コメントを参考にして時間に頼らずにBからAまで線をたど...
線をたどるだけならタイマーを使わずに済むが、ボールを捕ま...
**考察と反省 [#v9cd4c52]
このプログラムを作ってからすぐにロボットを分解してしまっ...
連続して右旋回できる最大値と1回の判断でロボットを動作させ...
**定義について [#y13c7921]
#define threshold 45 //しきい値の基準
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER); //モーター...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //モータ...
#define step 3 //1回の判断でロボットを動作させる時間
#define go_forward set_power_H; OnRev(OUT_AC); //前進
#define turn_left1 set_power_L; OnRev(OUT_C);OnFwd(OUT_A...
#define turn_left0 set_power_L; OnRev(OUT_C);Off(OUT_A);...
#define turn_right1 set_power_L; OnRev(OUT_A);OnFwd(OUT_...
#define turn_right0 set_power_L; OnRev(OUT_A);Off(OUT_C)...
#define short_break Off(OUT_AC);Wait(10); //小休止
#define closs_line OnRev(OUT_AC);Wait(20);short_break;Wa...
#define ageru OnRev(OUT_B);Wait(9);Off(OUT_B); //アーム...
#define sageru OnFwd(OUT_B);Wait(15);Off(OUT_B); //アー...
#define utu OnFwd(OUT_AC);Wait(50);ageru;OnRev(OUT_AC);W...
ほとんどの定義は一つ目のプログラムと同じである。説明は上...
#define max 12 //連続して右旋回できる最大値
#define bmade 810 //ボールを捕まえるまで
#define last 1810 //エリアAまで
一つ目のプログラムとは異なる定義。
連続して右旋回できる最大値を増やすことで急カーブを交差点...
タイマーを使ったのはボールの近くに行くまでの時間を計る事と
もう一つはエリアAについてエリアAに入る三叉路を渡った後の...
**サブルーチンについて [#s7c13e45]
sub line_traceK() //交差点を渡ることが出来るプログラム(...
{
int nOnline=0; //カウンタを0にする。
while (nOnline < max) { //黒が連続したとき以外は上のサ...
if (SENSOR_2 < threshold-8) {turn_right1; nOnline++...
else {if (SENSOR_2 < threshold -6) { turn_right0;} ...
else if (SENSOR_2 < threshold-3) {go_forward;} //...
else if (SENSOR_2 < threshold -2) {turn_left0;} //...
else {turn_left1;} //しきい値が43以上の時は左に旋回
nOnline=0; } //しきい値が37以上の時はカウントをゼロ...
Wait(step); //1回の判断でロボットを動作させる時間
}
short_break //小休止
turn_left1; Wait(max*step); //車体を道に対してまっすぐ...
closs_line; //交差点を渡り2秒間停止する。小休止の中の...
nOnline=0; // 渡り終わったらカウンタをリセットする。
}
連続でしきい値が37を下回った時にそこを交差点とみなすサ...
**task main について [#qf74b6d1]
サブルーチンは一つしかないので一つ目のプログラムと違い交...
タイマーを使ったのはボールの近くに行くまでの時間を計る事と
もう一つはエリアAについてエリアAに入る三叉路を渡った後の...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーを2番に...
ClearTimer(0); //一つ目のタイマーで時間を計り始める
while (FastTimer(0) <= bmade) {line_traceK(); } //ボール...
Pla...
交差点を渡ることが出来るプログラム(交差点があれば交差点...
sageru; //ボールを捕まえる。黄色の×印のあたりでボールを...
Pla...
ClearTimer(1); //2つ目のタイマーで時間を計り始める
ここで使うタイマーを変更する。
while (FastTimer(1) <= last) {line_traceK();} //エリアA...
Play...
ボールを捕まえた後Pに向かう。 連続して右旋回できる最大値...
Pを交差点とみなして渡りエリアAに向かう。
utu; //ボールをシュートする。水色の×印のあたりでシュート...
}
エリアAに入る場所の三叉路を交差点とみなして進み、三叉路...
#ref(./p.JPG,20%)
*問題点(一つ目のプログラムの時に見つけた五つの問題点がこ...
一つ目 光センサーを車体の先端に付けると車体が曲がったと...
二つ目 アームがボールをつかむ前に弾き飛ばしてしまう。
三つめ コースBからAの左側を走ると三叉路Pを直進してしまい...
四つ目 コースを進むうちに時間のずれが蓄積する。そのため...
五つ目 まっすぐゴールに向かってシュートできない。
六つ目 交差点を曲がり道と誤認識してしまう。
*解決方法 [#b6da9d3c]
一つ目 車体の中心近くに光センサーを取り付けて、車体が回...
二つ目 車体に固定されている下の黄色の部品は初めは
#ref(./IMG_0516.JPG,20%)
この写真のようになっていたが実際に動かしてみると下に固定...
三つ目 線の右側を走るプログラムを作った。線の右側を走る...
四つ目 タイマーを複数使うことで時間のずれが蓄積しないよ...
五つ目 PからエリアAまで交差点を渡ることが出来るプログラ...
で移動する。エリアAに入る場所の三叉路を交差点とみなして進...
六つ目 連続して右旋回できる最大値が大きすぎるのが原因だ...
*感想 [#p726a8ff]
大体28秒くらいでスタートからシュートするところまででき...
他のチームのように付属のマニュアルにないロボットを作れな...
OnRevで前進、OnFwdで後進する。どうしてこうなるのか分から...
「Pmade」と「Qmade」と言う定義をそれぞれ「Pまで」と「Qま...
ロボコンの後に書き直しているので、以前のものと少し違いま...
ページ名: