2018a/Member/ryota/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
*課題2 [#j074aeb4]
ライントレースを主に指定されたコースについてロボットに指...
**コース [#n2c605ed]
#ref(2018a-mission2.png)
-1.Aをスタート
-2.Bを右折
-3.Jで一時停止の後、Yの空き缶をキャッチしてJに戻る
-4.JからKに向かい、Kを直進
-5.Lを直進
-6.Iを左折
-7.Hで一時停止の後、左折
-8.Gで一時停止の後、右折
-9.Fで一時停止の後、右折
-10.Eを直進
-11.Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう
-12.Cで一時停止の後、直進
-13.Bを直進
-14.Aで停止
(一時停止の指定がある場所は、1秒間停止すること)
*設計思想 [#g393ad4a]
時間との兼ね合いも考えて.シンプルにミスが起きづらい設計...
主題がライントレースなので小回りが利く小型の機体がいいと...
*工夫点 [#t0569e1c]
#ref(ダウンロード.png)
赤外線センサを地面スレスレに置くことで狭い範囲で識別する...
#ref(ダウンロード (1).png)
カンを掴む機構については四角い枠を上下に動かすだけのシン...
#ref(ダウンロード (2).png)
この機体も後輪についてミッション1同様2×2で自由度を持た...
#ref(ダウンロード (3).png)
重量のある本体をブロックで固定するのでは剛性に限界がある...
**反省点 [#jdd73d16]
・カンを持ちあげる部分について,ただの四角いゲージでは下...
・カンを認識する動作をかなり微調整に頼ったため,失敗する...
・主な移動手段のライントレースについては速度の遅さを除い...
**プログラム [#g8008c8f]
#define turnL OnFwd(OUT_A,30); OnFwd(OUT_B,-20): ...
#define turnR OnFwd(OUT_A,-20); OnFwd(OUT_B,30); ...
#define armUP OnFwd(OUT_C,-20); Wait(1500); Off(OUT_C); ...
#define armDW OnFwd(OUT_C,20); Wait(1500); Off(OUT_C); ...
task main()
{
SetSensorLight(S2);
long t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); ...
}
} //AからBまでラ...
OnFwd(OUT_B,20);
Wait(500);
Off(OUT_B); //Bで右折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Jまでライン...
}
}
Off(OUT_AB);
Wait(1000); //Jで一時停止
armDW //空き缶をキャ...
OnFwd(OUT_AB,-20);
Wait(500); //Jにもどる
repeat(2){
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
}
OnFwd(OUT_AB,20);
Wait(500);
} //JからK、...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Iまでライント...
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Iを左折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Hまでライン...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Hで一時停止...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Gまでライント...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_B,20);
Wait(750);
Off(OUT_B); //Gで一時停止後...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick();
}
} //Fまでライント...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_B,20);
Wait(500);
Off(OUT_B); //Fで一時停止後...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick();
}
}
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Eまでライントレ...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick();
}
}
Off(OUT_AB);
Wait(1000); //Dまでライントレ...
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A);
armUP //空き缶を置く
OnFwd(OUT_B,20);
Wait(500);
Off(OUT_B); //Dに戻る
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Cまでライントレ...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Cで一時停止後直進
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
}
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Bまでライントレ...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
}
Off(OUT_AB); //Aで停止
・ライントレースの際白か黒の二択で定義したため動きが小刻...
・超音波センサをうまく利用できればプログラムをかなり簡潔...
終了行:
[[2018a/Member]]
*課題2 [#j074aeb4]
ライントレースを主に指定されたコースについてロボットに指...
**コース [#n2c605ed]
#ref(2018a-mission2.png)
-1.Aをスタート
-2.Bを右折
-3.Jで一時停止の後、Yの空き缶をキャッチしてJに戻る
-4.JからKに向かい、Kを直進
-5.Lを直進
-6.Iを左折
-7.Hで一時停止の後、左折
-8.Gで一時停止の後、右折
-9.Fで一時停止の後、右折
-10.Eを直進
-11.Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう
-12.Cで一時停止の後、直進
-13.Bを直進
-14.Aで停止
(一時停止の指定がある場所は、1秒間停止すること)
*設計思想 [#g393ad4a]
時間との兼ね合いも考えて.シンプルにミスが起きづらい設計...
主題がライントレースなので小回りが利く小型の機体がいいと...
*工夫点 [#t0569e1c]
#ref(ダウンロード.png)
赤外線センサを地面スレスレに置くことで狭い範囲で識別する...
#ref(ダウンロード (1).png)
カンを掴む機構については四角い枠を上下に動かすだけのシン...
#ref(ダウンロード (2).png)
この機体も後輪についてミッション1同様2×2で自由度を持た...
#ref(ダウンロード (3).png)
重量のある本体をブロックで固定するのでは剛性に限界がある...
**反省点 [#jdd73d16]
・カンを持ちあげる部分について,ただの四角いゲージでは下...
・カンを認識する動作をかなり微調整に頼ったため,失敗する...
・主な移動手段のライントレースについては速度の遅さを除い...
**プログラム [#g8008c8f]
#define turnL OnFwd(OUT_A,30); OnFwd(OUT_B,-20): ...
#define turnR OnFwd(OUT_A,-20); OnFwd(OUT_B,30); ...
#define armUP OnFwd(OUT_C,-20); Wait(1500); Off(OUT_C); ...
#define armDW OnFwd(OUT_C,20); Wait(1500); Off(OUT_C); ...
task main()
{
SetSensorLight(S2);
long t0 = CurrentTick();
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); ...
}
} //AからBまでラ...
OnFwd(OUT_B,20);
Wait(500);
Off(OUT_B); //Bで右折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick(); //Jまでライン...
}
}
Off(OUT_AB);
Wait(1000); //Jで一時停止
armDW //空き缶をキャ...
OnFwd(OUT_AB,-20);
Wait(500); //Jにもどる
repeat(2){
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
}
OnFwd(OUT_AB,20);
Wait(500);
} //JからK、...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Iまでライント...
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Iを左折
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Hまでライン...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A); //Hで一時停止...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Gまでライント...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_B,20);
Wait(750);
Off(OUT_B); //Gで一時停止後...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick();
}
} //Fまでライント...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_B,20);
Wait(500);
Off(OUT_B); //Fで一時停止後...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick();
}
}
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Eまでライントレ...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnR;
} else {
turnL;
t0 = CurrentTick();
}
}
Off(OUT_AB);
Wait(1000); //Dまでライントレ...
OnFwd(OUT_A,20);
Wait(500);
Off(OUT_A);
armUP //空き缶を置く
OnFwd(OUT_B,20);
Wait(500);
Off(OUT_B); //Dに戻る
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
} //Cまでライントレ...
Off(OUT_AB);
Wait(1000);
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Cで一時停止後直進
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
}
OnFwd(OUT_AB,20);
Wait(500);
Off(OUT_AB); //Bまでライントレ...
while (CurrentTick()-t0 <= 300) {
if (SENSOR_2 < 40){
turnL;
} else {
turnR;
t0 = CurrentTick();
}
}
Off(OUT_AB); //Aで停止
・ライントレースの際白か黒の二択で定義したため動きが小刻...
・超音波センサをうまく利用できればプログラムをかなり簡潔...
ページ名: