2018a/Member/hirotaka/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
目次
#contents
*課題2 [#xd5191b6]
下の図のようなコースを各チームで作成し、「ミッション」を...
黒い線に沿って動き、350mlの空き缶(黄色で表示)を移動させる...
二つのコースがあり、自分はコース1を選択して作成した。&br;
下の図で青→緑→黄色の矢印の順で動き、緑の矢印上は空き缶を...
課題について詳しくは[[こちら>2018a/Mission2]]。
#ref(./コース.png,70%,コース)
*ロボットの説明 [#wccbcd36]
**全体像 [#cded12c3]
レゴのクラフトガイドの作り方を参考に車輪、光センサーの取...
缶をつかむ機構は虫取り網の要領で囲って運ぶようにした。
#ref(./全体像.jpg,70%,全体像)
**つかむ機構 [#u0706100]
始めはモーターの動力を直でつないでアームを制御をしていた...
#ref(./つかむところ.png,70%,つかむとこ)
*プログラムの説明 [#see65286]
**ライントレースの仕組み [#qfe27031]
コースの関係上左側のふちをライントレースするようにした。&...
ライントレースをするうえで重要なのは光センサーである。黒...
私たちは白と黒の間の値を基準として、そのプラスマイナスで...
#ref(./閾値.png,70%,閾値)
下の表にその値で行う動作を示す。
#ref(./動作表.png,80%,動作表)
***ライントレースのプログラム [#yd12d976]
上の表で整理した動作をマクロとして以下のように定義した。
#define MIGISENKAI OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define MIGIMAGARI OnFwd(OUT_A);Off(OUT_C); //右曲がり
#define HIDARISENKAI OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define HIDARIMAGARI OnFwd(OUT_C);Off(OUT_A); //左曲がり
#define middle 45 //白と黒の境目の値
下にライントレースで使用したサブプログラムを記載する。
sub Line() //ライントレース
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=28) //左旋回が0.28秒以内の場合はルー...
{
if(SENSOR_1>middle+8)
{
MIGISENKAI
ClearTimer(0); //白だったら右旋回しなさい
}
else if(SENSOR_1>middle+6)
{
MIGIMAGARI
ClearTimer(0); //白っぽいなら右に曲がりなさい
}
else if(SENSOR_1>middle)
{
OnFwd(OUT_AC);
ClearTimer(0); //中間なら直進しなさい
}
else if(SENSOR_1>middle-4)
{
HIDARIMAGARI
ClearTimer(0); //黒っぽいなら左に曲がりなさい
}
else
{
HIDARIMAGARI //黒なら旋回しなさい←変更点!
}
}
Off(OUT_AC); //とまれ
}
このプログラムをよく見てもらうと真っ黒と感知したときの動...
**交差点の判断 [#v748f15f]
交差点を認識させるにはライントレース中の真っ黒である時間...
#ref(./交差点.png,40%,交差点)
ここでなぜライントレースのプログラムを変更したのか説明す...
-タイヤの出力が大きいこと&br;
→交差点でもすぐに回転しトレースし続けてしまう。
-センサーの位置が車体から離れていること&br;
→交差点に対して車体が斜めに入ってしまいターンにかかる時間...
わかりずらいと思うので下の図にて補足する。
#ref(./光センサー問題.png,70%,問題)
#ref(./光センサー問題2.png,60%,問題点)
上の写真は実際の機体部の様子である。
**マクロ [#xf2cd6df]
ライントレースで使った以外に以下のマクロを定義した。
#define go(time) OnFwd(OUT_AC);Wait(time);Off(OUT_AC); /...
#define back(time) OnRev(OUT_AC);Wait(time);Off(OUT_AC);...
#define LEFT(angle) OnFwd(OUT_C);OnRev(OUT_A);Wait(angle...
#define RIGHT(angle) OnFwd(OUT_A);OnRev(OUT_C);Wait(angl...
交差点を渡る時間や缶を取りに行く時間をその時々で調節でき...
**サブプログラム [#efb4f59d]
ライントレースで使用したサブプログラムのほかに以下のプロ...
下のサブプログラムはGからH間のライントレースで使用するプ...
sub Line2() //特殊ライントレース
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=2500) //GからH間のライントレース
{
if(SENSOR_1>middle+8)
{
MIGISENKAI //白だったら右旋回しなさい
}
else if(SENSOR_1>middle+6)
{
MIGIMAGARI //白っぽいなら右に曲がりなさい
}
else if(SENSOR_1>middle)
{
OnFwd(OUT_AC); //中間なら直進しなさい
}
else if(SENSOR_1>middle-4)
{
HIDARIMAGARI //黒っぽいなら左に曲がりなさい
}
else
{
HIDARISENKAI //黒なら旋回しなさい
}
}
Off(OUT_AC);
}
次のプログラムは真っ白を検知するまで左回転するプログラム...
sub TURN_LEFT() //白感知左曲がり
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
OnFwd(OUT_C);
OnRev(OUT_A);
until(SENSOR_1>=58); //真っ白を感知するまで待つ
Off(OUT_AC); //停止
}
#ref(./ライントレース開始.png,50%,ライントレース開始)
次のプログラムは缶をつかむプログラムと、離すプログラムで...
sub CATCH() //つかむ
{
OnFwd(OUT_B);
Wait(30);
Off(OUT_B);
}
sub RELEASE() //離す
{
OnFwd(OUT_B);
Wait(30);
Off(OUT_B);
}
**メインプログラム [#t9cdc219]
task main()
{
Line(); //A-C
Wait(100); //停止地点
go(40) //Cの交差点を渡りきるための直進
Line(); //Cから
GO_WHITE(); //C-Dの交差点
LEFT(15) //白のとこまで回転させる。
Line(); //白の値からライントレースを開始し、Dの交差点を...
Wait(100); //停止位置
go(10) //缶をつかむため所定の位置まで前進する。
CATCH(); //つかむ
Wait(100); //アームを下げ安定させるための時間
back(28) //戻る<ここの値は前進時よりも大きい値でないと...
Wait(40); //速く動き出すと誤作動するので少し時間を空ける
TURN_LEFT();
実際にうまくいったのはここまでである。
次のライントレースから交差点でないのに停止してしまう問題...
Line(); //D-E
go(40) //E
Line(); //E-F
TURN_LEFT(); //白を感知させる
Line(); //F-G
Wait(100); //停止位置
TURN_LEFT(); //白を感知させる
Line2(); //G-H'<曲線の連続部分>
Line(); //H'-H<曲線エリアから抜け出してHの交差点を感知>
Wait(100); //停止位置
RIGHT(90) //90度
Line(); //H-I
Wait(100); //停止位置
Line(); //I-L
go(40)
Line(); //L-K
go(40)
Line(); //K-J
Wait(100); //停止位置
LEFT(90) //90度
go(80) //所定の位置へ
RELEASE(); //はなす
back(80) //Jに戻る
LEFT(90) //180度
Line(); //J-B
Wait(100);
go(30) //2cm+A
TURN_LEFT();
Line(); //B-A
}
*まとめ [#q80da23d]
前回の課題1に比べ様々な問題に直面した。機体に関するトラ...
今回の課題の制御は時間で調整しようとするとトラブルが多く...
次の課題が最後なのでこれまで学んだことを生かして課題をク...
終了行:
[[2018a/Member]]
目次
#contents
*課題2 [#xd5191b6]
下の図のようなコースを各チームで作成し、「ミッション」を...
黒い線に沿って動き、350mlの空き缶(黄色で表示)を移動させる...
二つのコースがあり、自分はコース1を選択して作成した。&br;
下の図で青→緑→黄色の矢印の順で動き、緑の矢印上は空き缶を...
課題について詳しくは[[こちら>2018a/Mission2]]。
#ref(./コース.png,70%,コース)
*ロボットの説明 [#wccbcd36]
**全体像 [#cded12c3]
レゴのクラフトガイドの作り方を参考に車輪、光センサーの取...
缶をつかむ機構は虫取り網の要領で囲って運ぶようにした。
#ref(./全体像.jpg,70%,全体像)
**つかむ機構 [#u0706100]
始めはモーターの動力を直でつないでアームを制御をしていた...
#ref(./つかむところ.png,70%,つかむとこ)
*プログラムの説明 [#see65286]
**ライントレースの仕組み [#qfe27031]
コースの関係上左側のふちをライントレースするようにした。&...
ライントレースをするうえで重要なのは光センサーである。黒...
私たちは白と黒の間の値を基準として、そのプラスマイナスで...
#ref(./閾値.png,70%,閾値)
下の表にその値で行う動作を示す。
#ref(./動作表.png,80%,動作表)
***ライントレースのプログラム [#yd12d976]
上の表で整理した動作をマクロとして以下のように定義した。
#define MIGISENKAI OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define MIGIMAGARI OnFwd(OUT_A);Off(OUT_C); //右曲がり
#define HIDARISENKAI OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define HIDARIMAGARI OnFwd(OUT_C);Off(OUT_A); //左曲がり
#define middle 45 //白と黒の境目の値
下にライントレースで使用したサブプログラムを記載する。
sub Line() //ライントレース
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=28) //左旋回が0.28秒以内の場合はルー...
{
if(SENSOR_1>middle+8)
{
MIGISENKAI
ClearTimer(0); //白だったら右旋回しなさい
}
else if(SENSOR_1>middle+6)
{
MIGIMAGARI
ClearTimer(0); //白っぽいなら右に曲がりなさい
}
else if(SENSOR_1>middle)
{
OnFwd(OUT_AC);
ClearTimer(0); //中間なら直進しなさい
}
else if(SENSOR_1>middle-4)
{
HIDARIMAGARI
ClearTimer(0); //黒っぽいなら左に曲がりなさい
}
else
{
HIDARIMAGARI //黒なら旋回しなさい←変更点!
}
}
Off(OUT_AC); //とまれ
}
このプログラムをよく見てもらうと真っ黒と感知したときの動...
**交差点の判断 [#v748f15f]
交差点を認識させるにはライントレース中の真っ黒である時間...
#ref(./交差点.png,40%,交差点)
ここでなぜライントレースのプログラムを変更したのか説明す...
-タイヤの出力が大きいこと&br;
→交差点でもすぐに回転しトレースし続けてしまう。
-センサーの位置が車体から離れていること&br;
→交差点に対して車体が斜めに入ってしまいターンにかかる時間...
わかりずらいと思うので下の図にて補足する。
#ref(./光センサー問題.png,70%,問題)
#ref(./光センサー問題2.png,60%,問題点)
上の写真は実際の機体部の様子である。
**マクロ [#xf2cd6df]
ライントレースで使った以外に以下のマクロを定義した。
#define go(time) OnFwd(OUT_AC);Wait(time);Off(OUT_AC); /...
#define back(time) OnRev(OUT_AC);Wait(time);Off(OUT_AC);...
#define LEFT(angle) OnFwd(OUT_C);OnRev(OUT_A);Wait(angle...
#define RIGHT(angle) OnFwd(OUT_A);OnRev(OUT_C);Wait(angl...
交差点を渡る時間や缶を取りに行く時間をその時々で調節でき...
**サブプログラム [#efb4f59d]
ライントレースで使用したサブプログラムのほかに以下のプロ...
下のサブプログラムはGからH間のライントレースで使用するプ...
sub Line2() //特殊ライントレース
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=2500) //GからH間のライントレース
{
if(SENSOR_1>middle+8)
{
MIGISENKAI //白だったら右旋回しなさい
}
else if(SENSOR_1>middle+6)
{
MIGIMAGARI //白っぽいなら右に曲がりなさい
}
else if(SENSOR_1>middle)
{
OnFwd(OUT_AC); //中間なら直進しなさい
}
else if(SENSOR_1>middle-4)
{
HIDARIMAGARI //黒っぽいなら左に曲がりなさい
}
else
{
HIDARISENKAI //黒なら旋回しなさい
}
}
Off(OUT_AC);
}
次のプログラムは真っ白を検知するまで左回転するプログラム...
sub TURN_LEFT() //白感知左曲がり
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
OnFwd(OUT_C);
OnRev(OUT_A);
until(SENSOR_1>=58); //真っ白を感知するまで待つ
Off(OUT_AC); //停止
}
#ref(./ライントレース開始.png,50%,ライントレース開始)
次のプログラムは缶をつかむプログラムと、離すプログラムで...
sub CATCH() //つかむ
{
OnFwd(OUT_B);
Wait(30);
Off(OUT_B);
}
sub RELEASE() //離す
{
OnFwd(OUT_B);
Wait(30);
Off(OUT_B);
}
**メインプログラム [#t9cdc219]
task main()
{
Line(); //A-C
Wait(100); //停止地点
go(40) //Cの交差点を渡りきるための直進
Line(); //Cから
GO_WHITE(); //C-Dの交差点
LEFT(15) //白のとこまで回転させる。
Line(); //白の値からライントレースを開始し、Dの交差点を...
Wait(100); //停止位置
go(10) //缶をつかむため所定の位置まで前進する。
CATCH(); //つかむ
Wait(100); //アームを下げ安定させるための時間
back(28) //戻る<ここの値は前進時よりも大きい値でないと...
Wait(40); //速く動き出すと誤作動するので少し時間を空ける
TURN_LEFT();
実際にうまくいったのはここまでである。
次のライントレースから交差点でないのに停止してしまう問題...
Line(); //D-E
go(40) //E
Line(); //E-F
TURN_LEFT(); //白を感知させる
Line(); //F-G
Wait(100); //停止位置
TURN_LEFT(); //白を感知させる
Line2(); //G-H'<曲線の連続部分>
Line(); //H'-H<曲線エリアから抜け出してHの交差点を感知>
Wait(100); //停止位置
RIGHT(90) //90度
Line(); //H-I
Wait(100); //停止位置
Line(); //I-L
go(40)
Line(); //L-K
go(40)
Line(); //K-J
Wait(100); //停止位置
LEFT(90) //90度
go(80) //所定の位置へ
RELEASE(); //はなす
back(80) //Jに戻る
LEFT(90) //180度
Line(); //J-B
Wait(100);
go(30) //2cm+A
TURN_LEFT();
Line(); //B-A
}
*まとめ [#q80da23d]
前回の課題1に比べ様々な問題に直面した。機体に関するトラ...
今回の課題の制御は時間で調整しようとするとトラブルが多く...
次の課題が最後なのでこれまで学んだことを生かして課題をク...
ページ名: