2019a/Member/Asahi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
*課題2 [#a5b9a302]
下の図のようなコースを各チームで作成し、「ミッション」を...
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&re...
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
私は上記のコースでロボットを動かしながら,ピンポン玉を回...
*ロボットの構造 [#ae476dc8]
ロボットを作る上でこ気を付けたことは小回りが利くという点...
ロボットが大きくなりすぎて光センサーとタイヤの距離が離れ...
また,私たちはピンポン玉を運ぶための方法としてアームを取...
アームを上げ下げすることでピンポン玉を移動させるのに成功...
全体像は以下の写真の通りです.
&ref(2019a/Member/Asahi/Mission2/IMG_1785.jpg,50%,?機構);
*プログラムの説明 [#c41805fa]
**定義したプログラム [#rba811eb]
何回も同じプログラムを書くことは無駄であるため定義しまし...
#define black 30
#define white 50
#define speedH 30
#define speedL 10
#define mae OnFwd(OUT_BC,speedH);//直進
#define turnRRR OnFwd(OUT_C,speedH);OnRev(OUT_B,speedH);...
#define turnLLL OnFwd(OUT_B,speedH);OnRev(OUT_C,speedH);...
#define turnRR OnFwd(OUT_C,speedH);Off(OUT_B);//微右旋回
#define turnLL OnFwd(OUT_B,speedH);Off(OUT_C);//微左旋回
#define turnR OnFwd(OUT_C,speedH);OnFwd(OUT_B,speedL);//...
#define turnL OnFwd(OUT_B,speedH);OnFwd(OUT_C,speedL);//...
#define step 1
#define jikan 100
#define teishi Off(OUT_BC);Wait(300)
**サブルーチン [#s20991b8]
ライントレースや交差点で止まった後に直進するためのプログ...
***ライントレース [#q5d05bf3]
ライントレースは4つ用意しました.それは直進するときの左...
それを以下に載せます.
交差点で止まり,直進するときの左側のライントレース
光センサーが指定した時間以上,黒と測定したら止まるように...
これが交差点で止まるで止まるためのプログラムである.
void linetraceSL()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){//もし光センサーで白がが測定され...
turnRR;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnR;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnL;
} else{
turnLL;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
交差点で止まり,直進するときの右側のライントレース
void linetraceSR()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){//もし光センサーで白がが測定され...
turnLL;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnL;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnR;
} else{
turnRR;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
交差点で止まり,カーブを渡る時の左側のライントレース
void linetraceCL()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){//もし光センサーで白がが測定され...
turnRRR;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnRR;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnLL;
} else{
turnLLL;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
交差点で止まり,カーブを渡る時の右側のライントレース
void linetraceCR()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){
turnLL;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnL;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnR;
} else{
turnRR;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
***交差点で直進するプログラム [#kb17e0b6]
まず,光センサーが白-5を超えるまでまっすぐ進み,次に光セ...
void crossline()//交差点を渡る
{
mae;
until(SENSOR_3>white-5);//光センサーが白-5を超えるまで
turnR
until(SENSOR_3>black+5);//光センサーが黒+5を超えるまで
}
***右に曲がるプログラム [#e1ec5902]
void Rcurve()//右に曲がる
{
turnRRR;
until(SENSOR_3>white-5);//光センサーが白-5を超えるまで
}
***左に曲がるプログラム [#q94d9624]
void Lcurve()//左に曲がる
{
turnLLL
until(SENSOR_3>white);//光センサーが白を超えるまで
}
***ロボットの向きを変えるプログラム [#y70b7bfe]
void kaiten()//ロボットを180度回転させる
{
mae;
Wait(900)
OnFwd(OUT_B,20);OnRev(OUT_C,10);
until(SENSOR_3<black+5);
}
**メインプログラム [#td3fc862]
メインプログラムは、定義したものを組み合わせます.
task main()
{
SetSensorLight(S3);
linetraceCL();//M→K
crossline();//交差点を渡る
OnFwd(OUT_BC,30);Wait(2900);Off(OUT_BC);//K→L
OnFwd(OUT_A,30);Wait(1000);Off(OUT_A);//アームを下げ...
kaiten();//ロボットの向きを変える
linetraceSR();L→K
Rcurve();//右に曲がる
linetreceSL();//K→J
teishi;//一時停止
Lcurve();//左に曲がる
linetraceCL();//J→I
croseline();//交差点を渡る
linetraceCL();//J→H
croseline();//交差点を渡る
linetraceCL();//H→G
Lcurve();//左に曲がる
linetraceSL();//G→F
Lcurve();//左に曲がる
linetraceSL();//F→E
Lcurve();//左に曲がる
linetraceSL();//E→D
teishi;//一時停止
crossline();//交差点を渡る
linetraceCR();//D→B
teishi;//一時停止
OnRev(OUT_A,30);Wait(1000);Off(OUT_A);//アームを上げ...
}
*まとめ [#b322ee94]
今回のプログラムはサブルーチンを多く用いました.始めはラ...
終了行:
[[2019a/Member]]
*課題2 [#a5b9a302]
下の図のようなコースを各チームで作成し、「ミッション」を...
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&re...
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
私は上記のコースでロボットを動かしながら,ピンポン玉を回...
*ロボットの構造 [#ae476dc8]
ロボットを作る上でこ気を付けたことは小回りが利くという点...
ロボットが大きくなりすぎて光センサーとタイヤの距離が離れ...
また,私たちはピンポン玉を運ぶための方法としてアームを取...
アームを上げ下げすることでピンポン玉を移動させるのに成功...
全体像は以下の写真の通りです.
&ref(2019a/Member/Asahi/Mission2/IMG_1785.jpg,50%,?機構);
*プログラムの説明 [#c41805fa]
**定義したプログラム [#rba811eb]
何回も同じプログラムを書くことは無駄であるため定義しまし...
#define black 30
#define white 50
#define speedH 30
#define speedL 10
#define mae OnFwd(OUT_BC,speedH);//直進
#define turnRRR OnFwd(OUT_C,speedH);OnRev(OUT_B,speedH);...
#define turnLLL OnFwd(OUT_B,speedH);OnRev(OUT_C,speedH);...
#define turnRR OnFwd(OUT_C,speedH);Off(OUT_B);//微右旋回
#define turnLL OnFwd(OUT_B,speedH);Off(OUT_C);//微左旋回
#define turnR OnFwd(OUT_C,speedH);OnFwd(OUT_B,speedL);//...
#define turnL OnFwd(OUT_B,speedH);OnFwd(OUT_C,speedL);//...
#define step 1
#define jikan 100
#define teishi Off(OUT_BC);Wait(300)
**サブルーチン [#s20991b8]
ライントレースや交差点で止まった後に直進するためのプログ...
***ライントレース [#q5d05bf3]
ライントレースは4つ用意しました.それは直進するときの左...
それを以下に載せます.
交差点で止まり,直進するときの左側のライントレース
光センサーが指定した時間以上,黒と測定したら止まるように...
これが交差点で止まるで止まるためのプログラムである.
void linetraceSL()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){//もし光センサーで白がが測定され...
turnRR;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnR;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnL;
} else{
turnLL;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
交差点で止まり,直進するときの右側のライントレース
void linetraceSR()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){//もし光センサーで白がが測定され...
turnLL;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnL;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnR;
} else{
turnRR;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
交差点で止まり,カーブを渡る時の左側のライントレース
void linetraceCL()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){//もし光センサーで白がが測定され...
turnRRR;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnRR;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnLL;
} else{
turnLLL;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
交差点で止まり,カーブを渡る時の右側のライントレース
void linetraceCR()//交差点で止まる
{
long t0=0,t_black=0,t_max=jikan;
t0=CurrentTick();//t0は現在の時間
while(t_black<t_max){//t_blackがt_maxを超えるまで続...
if(SENSOR_3>white){
turnLL;
} else if(SENSOR_3>white-5){//もし光センサーで白-5...
turnL;
} else if(SENSOR_3>black+5){//もし光センサーで黒+5...
mae;
} else if(SENSOR_3>black){//もし光センサーで黒が測...
turnR;
} else{
turnRR;
t0=CurrentTick();//t0は現在の時間
until((SENSOR_3<black+5)&&(SENSOR_3>black));//黒+5...
t_black=CurrentTick()-t0;
}
Wait(step);
}
}
***交差点で直進するプログラム [#kb17e0b6]
まず,光センサーが白-5を超えるまでまっすぐ進み,次に光セ...
void crossline()//交差点を渡る
{
mae;
until(SENSOR_3>white-5);//光センサーが白-5を超えるまで
turnR
until(SENSOR_3>black+5);//光センサーが黒+5を超えるまで
}
***右に曲がるプログラム [#e1ec5902]
void Rcurve()//右に曲がる
{
turnRRR;
until(SENSOR_3>white-5);//光センサーが白-5を超えるまで
}
***左に曲がるプログラム [#q94d9624]
void Lcurve()//左に曲がる
{
turnLLL
until(SENSOR_3>white);//光センサーが白を超えるまで
}
***ロボットの向きを変えるプログラム [#y70b7bfe]
void kaiten()//ロボットを180度回転させる
{
mae;
Wait(900)
OnFwd(OUT_B,20);OnRev(OUT_C,10);
until(SENSOR_3<black+5);
}
**メインプログラム [#td3fc862]
メインプログラムは、定義したものを組み合わせます.
task main()
{
SetSensorLight(S3);
linetraceCL();//M→K
crossline();//交差点を渡る
OnFwd(OUT_BC,30);Wait(2900);Off(OUT_BC);//K→L
OnFwd(OUT_A,30);Wait(1000);Off(OUT_A);//アームを下げ...
kaiten();//ロボットの向きを変える
linetraceSR();L→K
Rcurve();//右に曲がる
linetreceSL();//K→J
teishi;//一時停止
Lcurve();//左に曲がる
linetraceCL();//J→I
croseline();//交差点を渡る
linetraceCL();//J→H
croseline();//交差点を渡る
linetraceCL();//H→G
Lcurve();//左に曲がる
linetraceSL();//G→F
Lcurve();//左に曲がる
linetraceSL();//F→E
Lcurve();//左に曲がる
linetraceSL();//E→D
teishi;//一時停止
crossline();//交差点を渡る
linetraceCR();//D→B
teishi;//一時停止
OnRev(OUT_A,30);Wait(1000);Off(OUT_A);//アームを上げ...
}
*まとめ [#b322ee94]
今回のプログラムはサブルーチンを多く用いました.始めはラ...
ページ名: