2019a/Member/motoki/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
目次
#contents
*課題2 [#pde1fae2]
コースをトレースし、ボールを運び、ゴールまで持っていく.
**選んだコース [#t8d55a74]
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
&ref(2ロボティクスゼミ 課題.png);
*ロボット [#gf027040]
**本体の構造 [#xa03e15a]
本体の構造は説明書に記載してあるものをつかった.
**アームの構造 [#i36a8a55]
アームは前にボールにかぶさるような形の構造にした.
また,ボールを運ぶ際引きずる形で持っていくのでボールが左...
&ref(IMG_1501[1].jpg);
**全体図 [#e18207ad]
&ref(IMG_1499[1].jpg);
*プログラミング [#eb8fba79]
**ライントレース [#d4ca93cb]
***定義 [#k2db0e39]
黒い線を追従するライントレースのプログラミングを作るとい...
それぞれの値は,「完全な白」=65,「白と境界」=55,「境...
それらの明るさによって曲がる方向が変わるようにする.
&ref(ロボティクスゼミ ライントレース.png);
5段階に分けて考えると,それらは左に旋回,左に移動,直進,...
実際にその動作を定義すると
#define SPEED 20
#define turn_left OnFwd(OUT_B,SPEED);Off(OUT_C)
#define turn_right Off(OUT_B);OnFwd(OUT_C,SPEED);
#define light_senkai OnRev(OUT_B,SPEED);OnFwd(OUT_C,SPEE...
#define left_senkai OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
#define go_straight OnFwd(OUT_BC,SPEED);
これは左側をトレースするためのプログラムだが右側をトレー...
#define bturn_left OnRev(OUT_B,SPEED);Off(OUT_C);
#define bturn_right Off(OUT_B);OnRev(OUT_C,SPEED);
#define blight_senkai OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPE...
#define bleft_senkai OnRev(OUT_B,SPEED);OnFwd(OUT_C,SPEE...
#define go_back OnRev(OUT_BC,SPEED);
*交差点 [#u96b8d64]
**交差点判断 [#se68a8b8]
交差点の判断は,連続して黒が一定の時間続いたらで止まるよ...
SetSensorLight(S3);
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time)
これがそのプログラムだ.stop_timeは後ほど説明する.
&ref(36A72633-4FC3-4BCE-925D-D891F7F6F66E.jpeg);
**交差点とY字カーブの判断 [#cee7c21c]
黒が何秒続くかで交差点と判断するが交差点とY字カーブの判断...
intには2つの利点がある.
一つ目は,先ほども記述したように交差点とY字カーブを判断で...
二つ目は,機体の傾きによっては同じカーブでも時間に差が出...
&ref(ロボティクスゼミ int説明.png);
このように同じカーブでも機体の向きが違うだけで黒にいる時...
今回は,直角の交差点はintの中身を140にし,最初のY字カーブ...
&ref(ロボティクスゼミ int数字.png);
*サブルーチン [#r2fd24ef]
主にトレースする時に使うサブルーチンを設定する.
**左トレース [#a482035b]
sub follow_lineB1(int stop_time)
{
SetSensorLight(S3);
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_3>=65){
light_senkai;
t0=CurrentTick();
}else if(SENSOR_3>=55){
turn_right;
t0=CurrentTick();
}else if(SENSOR_3>=47){
OnFwd(OUT_BC,SPEED);
t0=CurrentTick();
}else if(SENSOR_3>=42){
turn_left;
t0=CurrentTick();
}else if(SENSOR_3>=35){
left_senkai;
}
} Off(OUT_BC);
}
**右トレース [#wdbd87a5]
sub follow_lineB2()
{
SetSensorLight(S3);
long t0=CurrentTick(); ...
while(CurrentTick()-t0<140){
if(SENSOR_3>=65){
left_senkai;
t0=CurrentTick();
}else if(SENSOR_3>=55){
turn_left;
t0=CurrentTick();
}else if(SENSOR_3>=45){
OnFwd(OUT_BC,SPEED);
t0=CurrentTick();
}else if(SENSOR_3>=42){
turn_right;
t0=CurrentTick();
}else if(SENSOR_3>=35){
light_senkai;
}
}Off(OUT_BC);
}
**交差点横断 [#j9ccda00]
sub cross_line()
{
OnFwd(OUT_BC,SPEED);
Wait(300);
Off(OUT_BC);
OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEE...
Wait(400);
Off(OUT_BC);
}
交差点の横断は交差点で止まるとき少し本体が傾くのでそのま...
**ボール [#abd4308d]
***ボールを取るプログラム [#v2589e65]
まずボールを取る前にアームを上にあげる
OnRev(OUT_A,SPEED);
Wait(500);
Off(OUT_A);
前進しボールに近づく
OnFwd(OUT_BC,SPEED);
Wait(500);
Off(OUT_BC);
アームを下げる
OnFwd(OUT_A,SPEED);
Wait(800);
Off(OUT_A);
***ボールをゴールに入れるためのプログラム [#w2eec986]
ボールをゴールにれる方法は機械本体が前進するタイミングで...
まず本体のライントレースが終わったら,バックする
OnRev(OUT_BC,SPEED);
Wait(800);
Off(OUT_BC);
次に本体が直進すると同時にアームを上げる
OnFwd(OUT_BC,SPEED);OnRev(OUT_A,SPEED);
Wait(800);
Off(OUT_ABC);
*全体のプログラム [#s98fecb6]
task main()
{
follow_lineB1(140);
OnFwd(OUT_BC,SPEED);
Wait(600);
Off(OUT_BC);
OnRev(OUT_B,SPEED);OnFwd(OUT_C,SPEED);
Wait(400);
Off(OUT_BC);
OnFwd(OUT_BC,SPEED);
Wait(2000);
Off(OUT_BC);
OnRev(OUT_A,SPEED);
Wait(500);
Off(OUT_A);
OnFwd(OUT_BC,SPEED);
Wait(500);
Off(OUT_BC);
OnFwd(OUT_A,SPEED);
Wait(800);
Off(OUT_A);
OnRev(OUT_BC,SPEED);
Wait(3000);
Off(OUT_BC);
OnRev(OUT_C,SPEED);OnFwd(OUT_B,SPEED);
Wait(300);
Off(OUT_BC);
follow_lineB1(120);
cross_line();
follow_lineB1(70);
cross_line();
follow_lineB1(70);
OnFwd(OUT_BC,SPEED);
Wait(300);
Off(OUT_BC);
follow_lineB2();
OnFwd(OUT_BC,SPEED);
Wait(300);
Off(OUT_BC);
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
Wait(400);
Off(OUT_BC);
follow_lineB2();
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
Wait(100);
Off(OUT_BC);
OnRev(OUT_BC,SPEED);
Wait(800);
Off(OUT_BC);
OnFwd(OUT_BC,SPEED);OnRev(OUT_A,SPEED);
Wait(800);
Off(OUT_ABC);
}
*反省・課題 [#w34ea42a]
機械の方は時間をかけずに制作できたので良かった.
また,コースを書くときにペンで書いたので場所によって濃さ...
プログラムはもっとうまくできたと思った.余計なプログラム...
終了行:
[[2019a/Member]]
目次
#contents
*課題2 [#pde1fae2]
コースをトレースし、ボールを運び、ゴールまで持っていく.
**選んだコース [#t8d55a74]
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
&ref(2ロボティクスゼミ 課題.png);
*ロボット [#gf027040]
**本体の構造 [#xa03e15a]
本体の構造は説明書に記載してあるものをつかった.
**アームの構造 [#i36a8a55]
アームは前にボールにかぶさるような形の構造にした.
また,ボールを運ぶ際引きずる形で持っていくのでボールが左...
&ref(IMG_1501[1].jpg);
**全体図 [#e18207ad]
&ref(IMG_1499[1].jpg);
*プログラミング [#eb8fba79]
**ライントレース [#d4ca93cb]
***定義 [#k2db0e39]
黒い線を追従するライントレースのプログラミングを作るとい...
それぞれの値は,「完全な白」=65,「白と境界」=55,「境...
それらの明るさによって曲がる方向が変わるようにする.
&ref(ロボティクスゼミ ライントレース.png);
5段階に分けて考えると,それらは左に旋回,左に移動,直進,...
実際にその動作を定義すると
#define SPEED 20
#define turn_left OnFwd(OUT_B,SPEED);Off(OUT_C)
#define turn_right Off(OUT_B);OnFwd(OUT_C,SPEED);
#define light_senkai OnRev(OUT_B,SPEED);OnFwd(OUT_C,SPEE...
#define left_senkai OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
#define go_straight OnFwd(OUT_BC,SPEED);
これは左側をトレースするためのプログラムだが右側をトレー...
#define bturn_left OnRev(OUT_B,SPEED);Off(OUT_C);
#define bturn_right Off(OUT_B);OnRev(OUT_C,SPEED);
#define blight_senkai OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPE...
#define bleft_senkai OnRev(OUT_B,SPEED);OnFwd(OUT_C,SPEE...
#define go_back OnRev(OUT_BC,SPEED);
*交差点 [#u96b8d64]
**交差点判断 [#se68a8b8]
交差点の判断は,連続して黒が一定の時間続いたらで止まるよ...
SetSensorLight(S3);
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time)
これがそのプログラムだ.stop_timeは後ほど説明する.
&ref(36A72633-4FC3-4BCE-925D-D891F7F6F66E.jpeg);
**交差点とY字カーブの判断 [#cee7c21c]
黒が何秒続くかで交差点と判断するが交差点とY字カーブの判断...
intには2つの利点がある.
一つ目は,先ほども記述したように交差点とY字カーブを判断で...
二つ目は,機体の傾きによっては同じカーブでも時間に差が出...
&ref(ロボティクスゼミ int説明.png);
このように同じカーブでも機体の向きが違うだけで黒にいる時...
今回は,直角の交差点はintの中身を140にし,最初のY字カーブ...
&ref(ロボティクスゼミ int数字.png);
*サブルーチン [#r2fd24ef]
主にトレースする時に使うサブルーチンを設定する.
**左トレース [#a482035b]
sub follow_lineB1(int stop_time)
{
SetSensorLight(S3);
long t0=CurrentTick();
while(CurrentTick()-t0<stop_time){
if(SENSOR_3>=65){
light_senkai;
t0=CurrentTick();
}else if(SENSOR_3>=55){
turn_right;
t0=CurrentTick();
}else if(SENSOR_3>=47){
OnFwd(OUT_BC,SPEED);
t0=CurrentTick();
}else if(SENSOR_3>=42){
turn_left;
t0=CurrentTick();
}else if(SENSOR_3>=35){
left_senkai;
}
} Off(OUT_BC);
}
**右トレース [#wdbd87a5]
sub follow_lineB2()
{
SetSensorLight(S3);
long t0=CurrentTick(); ...
while(CurrentTick()-t0<140){
if(SENSOR_3>=65){
left_senkai;
t0=CurrentTick();
}else if(SENSOR_3>=55){
turn_left;
t0=CurrentTick();
}else if(SENSOR_3>=45){
OnFwd(OUT_BC,SPEED);
t0=CurrentTick();
}else if(SENSOR_3>=42){
turn_right;
t0=CurrentTick();
}else if(SENSOR_3>=35){
light_senkai;
}
}Off(OUT_BC);
}
**交差点横断 [#j9ccda00]
sub cross_line()
{
OnFwd(OUT_BC,SPEED);
Wait(300);
Off(OUT_BC);
OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEE...
Wait(400);
Off(OUT_BC);
}
交差点の横断は交差点で止まるとき少し本体が傾くのでそのま...
**ボール [#abd4308d]
***ボールを取るプログラム [#v2589e65]
まずボールを取る前にアームを上にあげる
OnRev(OUT_A,SPEED);
Wait(500);
Off(OUT_A);
前進しボールに近づく
OnFwd(OUT_BC,SPEED);
Wait(500);
Off(OUT_BC);
アームを下げる
OnFwd(OUT_A,SPEED);
Wait(800);
Off(OUT_A);
***ボールをゴールに入れるためのプログラム [#w2eec986]
ボールをゴールにれる方法は機械本体が前進するタイミングで...
まず本体のライントレースが終わったら,バックする
OnRev(OUT_BC,SPEED);
Wait(800);
Off(OUT_BC);
次に本体が直進すると同時にアームを上げる
OnFwd(OUT_BC,SPEED);OnRev(OUT_A,SPEED);
Wait(800);
Off(OUT_ABC);
*全体のプログラム [#s98fecb6]
task main()
{
follow_lineB1(140);
OnFwd(OUT_BC,SPEED);
Wait(600);
Off(OUT_BC);
OnRev(OUT_B,SPEED);OnFwd(OUT_C,SPEED);
Wait(400);
Off(OUT_BC);
OnFwd(OUT_BC,SPEED);
Wait(2000);
Off(OUT_BC);
OnRev(OUT_A,SPEED);
Wait(500);
Off(OUT_A);
OnFwd(OUT_BC,SPEED);
Wait(500);
Off(OUT_BC);
OnFwd(OUT_A,SPEED);
Wait(800);
Off(OUT_A);
OnRev(OUT_BC,SPEED);
Wait(3000);
Off(OUT_BC);
OnRev(OUT_C,SPEED);OnFwd(OUT_B,SPEED);
Wait(300);
Off(OUT_BC);
follow_lineB1(120);
cross_line();
follow_lineB1(70);
cross_line();
follow_lineB1(70);
OnFwd(OUT_BC,SPEED);
Wait(300);
Off(OUT_BC);
follow_lineB2();
OnFwd(OUT_BC,SPEED);
Wait(300);
Off(OUT_BC);
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
Wait(400);
Off(OUT_BC);
follow_lineB2();
OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
Wait(100);
Off(OUT_BC);
OnRev(OUT_BC,SPEED);
Wait(800);
Off(OUT_BC);
OnFwd(OUT_BC,SPEED);OnRev(OUT_A,SPEED);
Wait(800);
Off(OUT_ABC);
}
*反省・課題 [#w34ea42a]
機械の方は時間をかけずに制作できたので良かった.
また,コースを書くときにペンで書いたので場所によって濃さ...
プログラムはもっとうまくできたと思った.余計なプログラム...
ページ名: