2016a/Member/kurokouchi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*ロボットの説明 [#xefd4b91]
**ロボット全体 [#s0fe2ba3]
ベースはそのまま使用し、前方の光センサーを少しタイヤ近づ...
#ref(2016a/Member/kurokouchi/Mission2/01.jpg,100%,01)
**ロボットの改良 [#qfc487e6]
ロボットの後ろタイヤを外し、カーブを曲がりやすくしました。
#ref(2016a/Member/kurokouchi/Mission2/03.jpg,100%,01)
カーブを曲がりやすくしたことで短い区間でも機体の姿勢を戻...
#ref(2016a/Member/kurokouchi/Mission2/04.jpg,100%,01)
しかし、機体が左右に細かく動くためタイヤが外れやすくなり...
*プログラムの説明 [#o7f33ffa]
**ライントレース [#a6417992]
線の左側境界部分をトレースするプログラムです。
光センサーでの色判別は
- 白部分・・・・光センサーの値:52以降
- 弱白部分・・・光センサーの値:50以降〜52以下
- 境界部分・・・光センサーの値:42以降〜50以下
- 弱黒部分・・・光センサーの値:38以降〜42以下
- 黒部分・・・・光センサーの値:38未満
とする。
タイマーについては
- FastTimer(0):交差点判別用のタイマー
~ 光センサーが黒部分の判定をしている時にカウントをして、0...
- FastTimer(1):交差点誤判別防止用のタイマー
~ 小さなカーブを交差点として誤判別しないために指定秒数間...
とする。
sub line_l(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //交差点判別用のタイマー初期化
ClearTimer(1); //交差点誤判別防止用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
if(SENSOR_2 > 52) //白部分 右回転
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //回転しすぎないように...
OnFwd(OUT_A);
OnRev(OUT_C);
}
else if(SENSOR_2 > 50) //弱白部分 右旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_A);
Off(OUT_C);
}
else if(SENSOR_2 > 42) //境界部分 直進
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,4); //直進部分では素早く進...
OnFwd(OUT_A);
OnFwd(OUT_C);
}
else if(SENSOR_2 >38 ) //弱黒部分 左旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_C);;
Off(OUT_A);
}
else{ //黒部分 左回転
SetPower(OUT_AC,2); //回転しすぎないように...
OnRev(OUT_A);
OnFwd(OUT_C);
}
if(FastTimer(0)>30&&FastTimer(1)>l_time){ //交...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
}
**交差点の判別 [#m4335358]
上記のライントレース用プログラム内の交差点判別部分につい...
if(FastTimer(0)>30&&FastTimer(1)>l_time){ //交差点...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
交差点は黒部分が長く続いた時に交差点として判別するように...
ClearTimer(0);
タイマーが0.3秒より長い時間が経過した時に交差点として判別...
if(FastTimer(0)>30)
しかし、上記のプログラムではカーブを交差点として誤判別し...
if(FastTimer(0)>30&&FastTimer(1)>l_time)
l_timeを上記の指定秒数として、メインプログラムで指定する。
**交差点での処理 [#pffb2821]
前進
#ref(2016a/Member/kurokouchi/Mission2/08.png,100%,01)
角度を戻してそのまま直進する。
sub top(){
OnRev(OUT_C);
OnFwd(OUT_A);
Wait(40);
OnFwd(OUT_AC);
Wait(10);
}
左折
#ref(2016a/Member/kurokouchi/Mission2/07.png,100%,01)
角度を戻してそのままライントレースさせる。
sub left(){
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(20);
}
右折
#ref(2016a/Member/kurokouchi/Mission2/09.png,100%,01)
角度を右寄りにして外側の線に機体を移動する。
sub right(){
OnRev(OUT_C);
OnFwd(OUT_A);
Wait(80);
}
**特別な交差点の判別 [#u883c8f5]
#ref(2016a/Member/kurokouchi/Mission2/06.png,100%,01)
上の様な交差点判別するにはロボットの姿勢をすぐに戻さなけ...
sub line_r(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //交差点判別用のタイマー初期化
ClearTimer(1); //交差点誤判別防止用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
if(SENSOR_2 > 52) //白部分 左回転
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //回転しすぎないように...
OnFwd(OUT_C);
OnRev(OUT_A);
}
else if(SENSOR_2 > 50) //弱白部分 左旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_C);
Off(OUT_A);
}
else if(SENSOR_2 > 42) //境界部分 直進
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,4); //直進部分では素早く進...
OnFwd(OUT_A);
OnFwd(OUT_C);
}
else if(SENSOR_2 >38 ) //弱黒部分 右旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_A);;
Off(OUT_C);
}
else{ //黒部分 右回転
SetPower(OUT_AC,2); //回転しすぎないように...
OnRev(OUT_C);
OnFwd(OUT_A);
}
if(FastTimer(0)>30&&FastTimer(1)>l_time){ //交...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
}
これによってひとつ前の交差点から線の左側をトレースしてい...
**最後の交差点の判別 [#jc9ff40f]
ゴール地点の四角の中に入るために、最後の交差点を判別した...
sub last(){
OnRev(OUT_C); //姿勢をまっすぐにする
OnFwd(OUT_A);
Wait(40);
OnFwd(OUT_AC); //前進
Wait(200); //2秒間待つ
Off(OUT_AC); //停止
ClearTimer(0); //交差点判別用のタイマー初期化(初期...
ClearTimer(1); //交差点誤判別防止用のタイマー初期化...
}
**メインプログラム [#d9c9b7dd]
task main ()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
l_time=300; //次の交差点までの秒数を3秒に設定
line_l(); //左側境界部分をトレース
left(); //S地点を左折
line_l();
left(); //P地点を左折
line_l();
top(); //Q地点を直進
l_time=700; //交差点誤判別防止用秒数を7秒に設定
line_l();
top(); //Q地点を直進
l_time=300; //交差点誤判別防止用秒数を3秒に設定
line_l();
right(); //R地点を右折
line_r(); //右側境界部分をトレース
left(); //P地点を左折
l_time=700; //交差点誤判別防止用秒数を7秒に設定
line_l();
last();
}
*課題結果 [#p077b3a2]
課題コースはC地点 → S左折 → P左折 → Q直進 → Q直進 → R右折...
#ref(2016a/Member/kurokouchi/Mission2/05.png,100%,01)
C地点からA地点までのタイムは1分10秒でした。
*反省・感想 [#qd4c5222]
C地点からA地点までのタイムは1分10秒で到達タイムが1分切れ...
今回の課題から光センサーを使い始めたので一つ一つの動作を...
また、機体の都合で増やした処理もあったのでロボット本体に...
終了行:
#contents
*ロボットの説明 [#xefd4b91]
**ロボット全体 [#s0fe2ba3]
ベースはそのまま使用し、前方の光センサーを少しタイヤ近づ...
#ref(2016a/Member/kurokouchi/Mission2/01.jpg,100%,01)
**ロボットの改良 [#qfc487e6]
ロボットの後ろタイヤを外し、カーブを曲がりやすくしました。
#ref(2016a/Member/kurokouchi/Mission2/03.jpg,100%,01)
カーブを曲がりやすくしたことで短い区間でも機体の姿勢を戻...
#ref(2016a/Member/kurokouchi/Mission2/04.jpg,100%,01)
しかし、機体が左右に細かく動くためタイヤが外れやすくなり...
*プログラムの説明 [#o7f33ffa]
**ライントレース [#a6417992]
線の左側境界部分をトレースするプログラムです。
光センサーでの色判別は
- 白部分・・・・光センサーの値:52以降
- 弱白部分・・・光センサーの値:50以降〜52以下
- 境界部分・・・光センサーの値:42以降〜50以下
- 弱黒部分・・・光センサーの値:38以降〜42以下
- 黒部分・・・・光センサーの値:38未満
とする。
タイマーについては
- FastTimer(0):交差点判別用のタイマー
~ 光センサーが黒部分の判定をしている時にカウントをして、0...
- FastTimer(1):交差点誤判別防止用のタイマー
~ 小さなカーブを交差点として誤判別しないために指定秒数間...
とする。
sub line_l(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //交差点判別用のタイマー初期化
ClearTimer(1); //交差点誤判別防止用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
if(SENSOR_2 > 52) //白部分 右回転
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //回転しすぎないように...
OnFwd(OUT_A);
OnRev(OUT_C);
}
else if(SENSOR_2 > 50) //弱白部分 右旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_A);
Off(OUT_C);
}
else if(SENSOR_2 > 42) //境界部分 直進
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,4); //直進部分では素早く進...
OnFwd(OUT_A);
OnFwd(OUT_C);
}
else if(SENSOR_2 >38 ) //弱黒部分 左旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_C);;
Off(OUT_A);
}
else{ //黒部分 左回転
SetPower(OUT_AC,2); //回転しすぎないように...
OnRev(OUT_A);
OnFwd(OUT_C);
}
if(FastTimer(0)>30&&FastTimer(1)>l_time){ //交...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
}
**交差点の判別 [#m4335358]
上記のライントレース用プログラム内の交差点判別部分につい...
if(FastTimer(0)>30&&FastTimer(1)>l_time){ //交差点...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
交差点は黒部分が長く続いた時に交差点として判別するように...
ClearTimer(0);
タイマーが0.3秒より長い時間が経過した時に交差点として判別...
if(FastTimer(0)>30)
しかし、上記のプログラムではカーブを交差点として誤判別し...
if(FastTimer(0)>30&&FastTimer(1)>l_time)
l_timeを上記の指定秒数として、メインプログラムで指定する。
**交差点での処理 [#pffb2821]
前進
#ref(2016a/Member/kurokouchi/Mission2/08.png,100%,01)
角度を戻してそのまま直進する。
sub top(){
OnRev(OUT_C);
OnFwd(OUT_A);
Wait(40);
OnFwd(OUT_AC);
Wait(10);
}
左折
#ref(2016a/Member/kurokouchi/Mission2/07.png,100%,01)
角度を戻してそのままライントレースさせる。
sub left(){
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(20);
}
右折
#ref(2016a/Member/kurokouchi/Mission2/09.png,100%,01)
角度を右寄りにして外側の線に機体を移動する。
sub right(){
OnRev(OUT_C);
OnFwd(OUT_A);
Wait(80);
}
**特別な交差点の判別 [#u883c8f5]
#ref(2016a/Member/kurokouchi/Mission2/06.png,100%,01)
上の様な交差点判別するにはロボットの姿勢をすぐに戻さなけ...
sub line_r(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //交差点判別用のタイマー初期化
ClearTimer(1); //交差点誤判別防止用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
if(SENSOR_2 > 52) //白部分 左回転
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //回転しすぎないように...
OnFwd(OUT_C);
OnRev(OUT_A);
}
else if(SENSOR_2 > 50) //弱白部分 左旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_C);
Off(OUT_A);
}
else if(SENSOR_2 > 42) //境界部分 直進
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,4); //直進部分では素早く進...
OnFwd(OUT_A);
OnFwd(OUT_C);
}
else if(SENSOR_2 >38 ) //弱黒部分 右旋回
{
ClearTimer(0); //黒部分ではないので交差点...
SetPower(OUT_AC,2); //旋回しすぎないように...
OnFwd(OUT_A);;
Off(OUT_C);
}
else{ //黒部分 右回転
SetPower(OUT_AC,2); //回転しすぎないように...
OnRev(OUT_C);
OnFwd(OUT_A);
}
if(FastTimer(0)>30&&FastTimer(1)>l_time){ //交...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
}
これによってひとつ前の交差点から線の左側をトレースしてい...
**最後の交差点の判別 [#jc9ff40f]
ゴール地点の四角の中に入るために、最後の交差点を判別した...
sub last(){
OnRev(OUT_C); //姿勢をまっすぐにする
OnFwd(OUT_A);
Wait(40);
OnFwd(OUT_AC); //前進
Wait(200); //2秒間待つ
Off(OUT_AC); //停止
ClearTimer(0); //交差点判別用のタイマー初期化(初期...
ClearTimer(1); //交差点誤判別防止用のタイマー初期化...
}
**メインプログラム [#d9c9b7dd]
task main ()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
l_time=300; //次の交差点までの秒数を3秒に設定
line_l(); //左側境界部分をトレース
left(); //S地点を左折
line_l();
left(); //P地点を左折
line_l();
top(); //Q地点を直進
l_time=700; //交差点誤判別防止用秒数を7秒に設定
line_l();
top(); //Q地点を直進
l_time=300; //交差点誤判別防止用秒数を3秒に設定
line_l();
right(); //R地点を右折
line_r(); //右側境界部分をトレース
left(); //P地点を左折
l_time=700; //交差点誤判別防止用秒数を7秒に設定
line_l();
last();
}
*課題結果 [#p077b3a2]
課題コースはC地点 → S左折 → P左折 → Q直進 → Q直進 → R右折...
#ref(2016a/Member/kurokouchi/Mission2/05.png,100%,01)
C地点からA地点までのタイムは1分10秒でした。
*反省・感想 [#qd4c5222]
C地点からA地点までのタイムは1分10秒で到達タイムが1分切れ...
今回の課題から光センサーを使い始めたので一つ一つの動作を...
また、機体の都合で増やした処理もあったのでロボット本体に...
ページ名: