2017b/Member/arso/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017b/Member]]
&size(24){目次};
#contents
*初めに [#v99eb063]
今回の課題は、ライントレースを行い途中にある紙コップを決...
&ref(2017b/Member/arso/Mission2/第2回コース.jpg,70%,コー...
図1:コースの全体図
自分は第2コースを選んだ。第2コースの経路は
D ⇒ Cを直進 ⇒ Bを左折 ⇒ Pを左折(1秒停止) ⇒ Qを直進
⇒ Rを左折 ⇒ Fを左折 ⇒ Sを直進(1秒停止) ⇒ Y地点の紙コッ...
⇒ Sを直進(1秒停止) ⇒ Qを左折(1秒停止) ⇒ Rを直進
⇒ X地点に紙コップを置く ⇒ Pを左折 ⇒ Bを左折(1秒停止) ⇒ A
である。大まかに言うと、図1において&color(red){赤矢印};方...
*ロボットについて [#r5f4bb88]
**ロボット全体 [#ie0ac42c]
&ref(2017b/Member/arso/Mission2/DSCN1185.jpg,50%,ロボット...
写真1:ロボット全体
今回は二輪のロボットにした。後部の補助輪をなくしたことで...
**ロボット本体 [#g61034e9]
&ref(2017b/Member/arso/Mission2/DSCN1180.jpg,70%,ロボット...
写真2:ロボット本体 写真3:...
使用部品はなるべく減らし軽量化した。特に光センサーの位置...
**アーム部分 [#o1e3b114]
&ref(2017b/Member/arso/Mission2/アーム.jpg,70%,アーム);
&ref(2017b/Member/arso/Mission2/DSCN1190.jpg,60%,アーム);
写真4:回転前のアーム 写真5:...
紙コップを取るための腕は回転させてコップを取り込むように...
*プログラムについて [#nf157121]
今回のプログラムでは、アームを下ろす方をロボットの前方と...
OUT_A //右側のタイヤ
OUT_B //左側のタイヤ
OUT_C //アーム
プログラムは、ライントレース用とコップをとる用のサブルー...
**定義 [#oe2e53dc]
ライントレースのための光の強さの基準値やロボットを動かす...
#define BLACK 30 //この数値以下を黒とする
#define B_GRAY 37 //この数値を黒よりのしきい値とする
#define W_GRAY 44 //この数値を白よりのしきい値とする
#define WHITE 50 //この数値以上を白とする
#define FAST 35 //モーターの強さ(強)
#define SLOW 22 //モーターの強さ(弱)
#define MOVE_ARM 25 //モーターの強さ
以下はロボットの動きの定義である。これがライントレースの...
#define On_Motor(vR,vL)OnFwd(OUT_A,vR);OnFwd(OUT_B,vL); ...
#define go_forward On_Motor(FAST,FAST); //前進
#define turn_sharp_left On_Motor(SLOW,-SLOW); //左旋回
#define turn_gently_left On_Motor(SLOW,0); //左折
#define turn_sharp_right On_Motor(-SLOW,SLOW); //右旋回
#define turn_gently_right On_Motor(0,SLOW); //右折
下記の3つの定義は交差点で使われるものである。
#define INTERSECTION_TIME 150 //交差点判断の時間
#define CURVE_TIME 50 //円環上の経路での交差点...
#define FORWARD_TIME 300 //前進させる時間
**サブ関数 [#uf5dd655]
***ライントレース [#h0880967]
ライントレースについては[[NXTの資料:http://yakushi.shinsh...
&ref(2017b/Member/arso/Mission2/ライントレース.jpg,70%,ラ...
図2:ライントレース
図2は作成したロボットのように光センサーが車体の前方かつタ...
交差点について説明する。
&ref(2017b/Member/arso/Mission2/交差点.jpg,70%,交差点判断);
図3:交差点判断
図3のように、通常のライントレースの場合と異なり、交差点で...
&ref(2017b/Member/arso/Mission2/アーチ.jpg,70%,円環状の経...
図4:円環状の経路への出入り
また、図4のような円環上の経路への出入りも考える必要があっ...
以下に今回使用したプログラムを示す。このプログラムでは判...
sub line_trace(int blacktime,int stoptime,int fwdtime,in...
{
SetSensorLight(S1); //光センサーを設定
long t0=CurrentTick(); //時間を測定
while(CurrentTick()-t0<blacktime){ //測定時間が(bl...
if(SENSOR_1<BLACK){ //光センサーが...
turn_sharp_left; //左旋回(こ...
}
else{ //光センサーが...
t0=CurrentTick(); //測定時間を...
if(SENSOR_1<B_GRAY){ //光センサーが...
turn_gently_left; //左折
}
else if(SENSOR_1<W_GRAY){ //光センサーが...
go_forward; //前進
}
else if(SENSOR_1<WHITE){ //光センサーが...
turn_gently_right; //右折
}
else{ //光センサーが...
turn_sharp_right; //右旋回
}
}
Wait(1); //0.001秒続ける
}
Off(OUT_AB);
Wait(stoptime); //(stoptime/1000)秒間ロボ...
PlaySound(SOUND_CLICK); //音を鳴らす(交差点判断の...
go_forward;
Wait(fwdtime); //(fwdtime/1000)秒間前進
turn_sharp_left;
Wait(sharplefttime); //(sharplefttime/1000)秒間...
t0=CurrentTick(); //測定時間を初期化
}
このプログラムは、ロボットが連続して黒線の上で左旋回して...
4つの引数を用いてこのプログラム1つでほぼ全ての状況に対応...
私が選んだ第2コースでは黒のラインの左側を走るライントレー...
***コップの取得と配置 [#s46bd0af]
コップの取得と配置そのものには特別なことはなにもない。ロ...
下記のプログラムがコップの取得と配置のためのプログラムで...
sub cop(int armpower,int turnrighttime,int turnlefttime)...
{
turn_sharp_right;
Wait(turnrighttime); //(turnrighttime/1000)秒...
On_Motor(-FAST,-FAST);
Wait(150); //モーターの強さ35で0.15...
OnFwd(OUT_C,armpower);
Wait(400); //モーターの強さarmpower...
On_Motor(FAST,FAST);
Wait(160); //モーターの強さ35で0.16...
turn_sharp_left;
Wait(turnlefttime); //(turnlefttime/1000)秒間...
PlaySound(SOUND_FAST_UP); //音を鳴らす(コップの取得...
}
右旋回はコップを取るときや置くときにロボットの方向を調整...
**プログラム全体 [#k03ad36b]
#define BLACK 30
#define B_GRAY 37
#define W_GRAY 44
#define FAST 35
#define SLOW 22
#define MOVE_ARM 25
#define On_Motor(vR,vL)OnFwd(OUT_A,vR);OnFwd(OUT_B,vL);
#define go_forward On_Motor(FAST,FAST);
#define turn_sharp_left On_Motor(SLOW,-SLOW);
#define turn_gently_left On_Motor(SLOW,0);
#define turn_sharp_right On_Motor(-SLOW,SLOW);
#define turn_gently_right On_Motor(0,SLOW);
#define INTERSECTION_TIME 150
#define CURVE_TIME 50
#define FORWARD_TIME 300
sub line_trace(int blacktime,int stoptime,int fwdtime,in...
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<blacktime){
if(SENSOR_1<BLACK){
turn_sharp_left;
}
else{
t0=CurrentTick();
if(SENSOR_1<B_GRAY){
turn_gently_left;
}
else if(SENSOR_1<W_GRAY){
go_forward;
}
else if(SENSOR_1<WHITE){
turn_gently_right;
}
else{
turn_sharp_right;
}
}
Wait(1);
}
Off(OUT_AB);
Wait(stoptime);
PlaySound(SOUND_CLICK);
go_forward;
Wait(fwdtime);
turn_sharp_left;
Wait(sharplefttime);
t0=CurrentTick();
}
sub cop(int armpower,int turnrighttime,int turnlefttime)...
{
turn_sharp_right;
Wait(turnrighttime);
On_Motor(-FAST,-FAST);
Wait(150);
OnFwd(OUT_C,armpower);
Wait(400);
On_Motor(FAST,FAST);
Wait(160);
turn_sharp_left;
Wait(turnlefttime);
PlaySound(SOUND_FAST_UP);
}
task main()
{
SetSensorLight(S1); //光センサーを設定
long t0=CurrentTick(); //時間を測定
PlaySound(SOUND_UP); //音を鳴らす(開始の合図)
while(SENSOR_1>B_GRAY){
go_forward; //ラインを検知するまで前進
}
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,0); ...
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,0); ...
line_trace(INTERSECTION_TIME,0,200,1600); ...
line_trace(CURVE_TIME,1000,FORWARD_TIME,1600); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,0); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,1600); ...
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,1600); ...
line_trace(CURVE_TIME,0,0,300); ...
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,1600); ...
line_trace(INTERSECTION_TIME,1000,FORWARD_TIME,0); ...
cop(MOVE_ARM,1000,1100); ...
line_trace(INTERSECTION_TIME,1000,FORWARD_TIME,0); ...
line_trace(CURVE_TIME,,1000,FORWARD_TIME,1800); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,0); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,1400); ...
cop(-MOVE_ARM,3400,1800); ...
line_trace(INTERSECTION_TIME,0,200,1800); ...
line_trace(INTERSECTION_TIME,0,200,1700); ...
line_trace(INTERSECTION_TIME,0,0,0); ...
turn_sharp_right;
Wait(200); //0.2秒間右旋回
go_forward;
Wait(800); //0.8秒間前進
PlaySound(SOUND_FAST_UP); //音を鳴らす(ゴールの合図)
}
前述した問題についてここで述べる。それは、コップを配置し...
*結果 [#j6b693d7]
ライントレースや交差点判断は全て上手くいった。しかし、紙...
*感想と反省 [#n0c0a044]
ロボットについては、紙コップを取る腕は振り下ろす形式より...
終了行:
[[2017b/Member]]
&size(24){目次};
#contents
*初めに [#v99eb063]
今回の課題は、ライントレースを行い途中にある紙コップを決...
&ref(2017b/Member/arso/Mission2/第2回コース.jpg,70%,コー...
図1:コースの全体図
自分は第2コースを選んだ。第2コースの経路は
D ⇒ Cを直進 ⇒ Bを左折 ⇒ Pを左折(1秒停止) ⇒ Qを直進
⇒ Rを左折 ⇒ Fを左折 ⇒ Sを直進(1秒停止) ⇒ Y地点の紙コッ...
⇒ Sを直進(1秒停止) ⇒ Qを左折(1秒停止) ⇒ Rを直進
⇒ X地点に紙コップを置く ⇒ Pを左折 ⇒ Bを左折(1秒停止) ⇒ A
である。大まかに言うと、図1において&color(red){赤矢印};方...
*ロボットについて [#r5f4bb88]
**ロボット全体 [#ie0ac42c]
&ref(2017b/Member/arso/Mission2/DSCN1185.jpg,50%,ロボット...
写真1:ロボット全体
今回は二輪のロボットにした。後部の補助輪をなくしたことで...
**ロボット本体 [#g61034e9]
&ref(2017b/Member/arso/Mission2/DSCN1180.jpg,70%,ロボット...
写真2:ロボット本体 写真3:...
使用部品はなるべく減らし軽量化した。特に光センサーの位置...
**アーム部分 [#o1e3b114]
&ref(2017b/Member/arso/Mission2/アーム.jpg,70%,アーム);
&ref(2017b/Member/arso/Mission2/DSCN1190.jpg,60%,アーム);
写真4:回転前のアーム 写真5:...
紙コップを取るための腕は回転させてコップを取り込むように...
*プログラムについて [#nf157121]
今回のプログラムでは、アームを下ろす方をロボットの前方と...
OUT_A //右側のタイヤ
OUT_B //左側のタイヤ
OUT_C //アーム
プログラムは、ライントレース用とコップをとる用のサブルー...
**定義 [#oe2e53dc]
ライントレースのための光の強さの基準値やロボットを動かす...
#define BLACK 30 //この数値以下を黒とする
#define B_GRAY 37 //この数値を黒よりのしきい値とする
#define W_GRAY 44 //この数値を白よりのしきい値とする
#define WHITE 50 //この数値以上を白とする
#define FAST 35 //モーターの強さ(強)
#define SLOW 22 //モーターの強さ(弱)
#define MOVE_ARM 25 //モーターの強さ
以下はロボットの動きの定義である。これがライントレースの...
#define On_Motor(vR,vL)OnFwd(OUT_A,vR);OnFwd(OUT_B,vL); ...
#define go_forward On_Motor(FAST,FAST); //前進
#define turn_sharp_left On_Motor(SLOW,-SLOW); //左旋回
#define turn_gently_left On_Motor(SLOW,0); //左折
#define turn_sharp_right On_Motor(-SLOW,SLOW); //右旋回
#define turn_gently_right On_Motor(0,SLOW); //右折
下記の3つの定義は交差点で使われるものである。
#define INTERSECTION_TIME 150 //交差点判断の時間
#define CURVE_TIME 50 //円環上の経路での交差点...
#define FORWARD_TIME 300 //前進させる時間
**サブ関数 [#uf5dd655]
***ライントレース [#h0880967]
ライントレースについては[[NXTの資料:http://yakushi.shinsh...
&ref(2017b/Member/arso/Mission2/ライントレース.jpg,70%,ラ...
図2:ライントレース
図2は作成したロボットのように光センサーが車体の前方かつタ...
交差点について説明する。
&ref(2017b/Member/arso/Mission2/交差点.jpg,70%,交差点判断);
図3:交差点判断
図3のように、通常のライントレースの場合と異なり、交差点で...
&ref(2017b/Member/arso/Mission2/アーチ.jpg,70%,円環状の経...
図4:円環状の経路への出入り
また、図4のような円環上の経路への出入りも考える必要があっ...
以下に今回使用したプログラムを示す。このプログラムでは判...
sub line_trace(int blacktime,int stoptime,int fwdtime,in...
{
SetSensorLight(S1); //光センサーを設定
long t0=CurrentTick(); //時間を測定
while(CurrentTick()-t0<blacktime){ //測定時間が(bl...
if(SENSOR_1<BLACK){ //光センサーが...
turn_sharp_left; //左旋回(こ...
}
else{ //光センサーが...
t0=CurrentTick(); //測定時間を...
if(SENSOR_1<B_GRAY){ //光センサーが...
turn_gently_left; //左折
}
else if(SENSOR_1<W_GRAY){ //光センサーが...
go_forward; //前進
}
else if(SENSOR_1<WHITE){ //光センサーが...
turn_gently_right; //右折
}
else{ //光センサーが...
turn_sharp_right; //右旋回
}
}
Wait(1); //0.001秒続ける
}
Off(OUT_AB);
Wait(stoptime); //(stoptime/1000)秒間ロボ...
PlaySound(SOUND_CLICK); //音を鳴らす(交差点判断の...
go_forward;
Wait(fwdtime); //(fwdtime/1000)秒間前進
turn_sharp_left;
Wait(sharplefttime); //(sharplefttime/1000)秒間...
t0=CurrentTick(); //測定時間を初期化
}
このプログラムは、ロボットが連続して黒線の上で左旋回して...
4つの引数を用いてこのプログラム1つでほぼ全ての状況に対応...
私が選んだ第2コースでは黒のラインの左側を走るライントレー...
***コップの取得と配置 [#s46bd0af]
コップの取得と配置そのものには特別なことはなにもない。ロ...
下記のプログラムがコップの取得と配置のためのプログラムで...
sub cop(int armpower,int turnrighttime,int turnlefttime)...
{
turn_sharp_right;
Wait(turnrighttime); //(turnrighttime/1000)秒...
On_Motor(-FAST,-FAST);
Wait(150); //モーターの強さ35で0.15...
OnFwd(OUT_C,armpower);
Wait(400); //モーターの強さarmpower...
On_Motor(FAST,FAST);
Wait(160); //モーターの強さ35で0.16...
turn_sharp_left;
Wait(turnlefttime); //(turnlefttime/1000)秒間...
PlaySound(SOUND_FAST_UP); //音を鳴らす(コップの取得...
}
右旋回はコップを取るときや置くときにロボットの方向を調整...
**プログラム全体 [#k03ad36b]
#define BLACK 30
#define B_GRAY 37
#define W_GRAY 44
#define FAST 35
#define SLOW 22
#define MOVE_ARM 25
#define On_Motor(vR,vL)OnFwd(OUT_A,vR);OnFwd(OUT_B,vL);
#define go_forward On_Motor(FAST,FAST);
#define turn_sharp_left On_Motor(SLOW,-SLOW);
#define turn_gently_left On_Motor(SLOW,0);
#define turn_sharp_right On_Motor(-SLOW,SLOW);
#define turn_gently_right On_Motor(0,SLOW);
#define INTERSECTION_TIME 150
#define CURVE_TIME 50
#define FORWARD_TIME 300
sub line_trace(int blacktime,int stoptime,int fwdtime,in...
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<blacktime){
if(SENSOR_1<BLACK){
turn_sharp_left;
}
else{
t0=CurrentTick();
if(SENSOR_1<B_GRAY){
turn_gently_left;
}
else if(SENSOR_1<W_GRAY){
go_forward;
}
else if(SENSOR_1<WHITE){
turn_gently_right;
}
else{
turn_sharp_right;
}
}
Wait(1);
}
Off(OUT_AB);
Wait(stoptime);
PlaySound(SOUND_CLICK);
go_forward;
Wait(fwdtime);
turn_sharp_left;
Wait(sharplefttime);
t0=CurrentTick();
}
sub cop(int armpower,int turnrighttime,int turnlefttime)...
{
turn_sharp_right;
Wait(turnrighttime);
On_Motor(-FAST,-FAST);
Wait(150);
OnFwd(OUT_C,armpower);
Wait(400);
On_Motor(FAST,FAST);
Wait(160);
turn_sharp_left;
Wait(turnlefttime);
PlaySound(SOUND_FAST_UP);
}
task main()
{
SetSensorLight(S1); //光センサーを設定
long t0=CurrentTick(); //時間を測定
PlaySound(SOUND_UP); //音を鳴らす(開始の合図)
while(SENSOR_1>B_GRAY){
go_forward; //ラインを検知するまで前進
}
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,0); ...
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,0); ...
line_trace(INTERSECTION_TIME,0,200,1600); ...
line_trace(CURVE_TIME,1000,FORWARD_TIME,1600); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,0); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,1600); ...
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,1600); ...
line_trace(CURVE_TIME,0,0,300); ...
line_trace(INTERSECTION_TIME,0,FORWARD_TIME,1600); ...
line_trace(INTERSECTION_TIME,1000,FORWARD_TIME,0); ...
cop(MOVE_ARM,1000,1100); ...
line_trace(INTERSECTION_TIME,1000,FORWARD_TIME,0); ...
line_trace(CURVE_TIME,,1000,FORWARD_TIME,1800); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,0); ...
line_trace(CURVE_TIME,0,FORWARD_TIME,1400); ...
cop(-MOVE_ARM,3400,1800); ...
line_trace(INTERSECTION_TIME,0,200,1800); ...
line_trace(INTERSECTION_TIME,0,200,1700); ...
line_trace(INTERSECTION_TIME,0,0,0); ...
turn_sharp_right;
Wait(200); //0.2秒間右旋回
go_forward;
Wait(800); //0.8秒間前進
PlaySound(SOUND_FAST_UP); //音を鳴らす(ゴールの合図)
}
前述した問題についてここで述べる。それは、コップを配置し...
*結果 [#j6b693d7]
ライントレースや交差点判断は全て上手くいった。しかし、紙...
*感想と反省 [#n0c0a044]
ロボットについては、紙コップを取る腕は振り下ろす形式より...
ページ名: