2019b/Member/yamaji/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題2[#w03aca39]
[[2019b/Mission2]]を参照
私は課題2の1人目のコースを行った。
*ロボットの説明 [#x10c8e95]
**ロボットの全体像 [#v09c0663]
まず全体像を下に示す。
&ref(2019b/Member/yamaji/Mission2/全体像1.jpg,60%,全体像);
&ref(2019b/Member/yamaji/Mission2/センサ1.jpg,60%,センサ);
NXT本体とセンサをなるべく低い位置につけ、とにかく重心を...
**ボールを回収する機構 [#e67a7e82]
#ref(2019b/Member/yamaji/Mission2/持ち手1.jpg,70%,アーム)
ボールの回収は、上の写真のようにアームを作り、モータに...
*プログラムの説明 [#i318ebb8]
**定義 [#a29f6d82]
#define spd 30 //スピード
#define go_right() OnFwd(OUT_A,spd);
#define turn_right() OnFwdSync(OUT_AC,spd,-100);
#define go_left() OnFwd(OUT_C,spd);
#define turn_left() OnFwdSync(OUT_AC,spd,100);
#define go() OnFwdSync(OUT_AC,spd,0);
#define up OnFwd(OUT_B, -30);Wait(500) //ボールキャッチ...
#define down OnFwd(OUT_B, 30);Wait(700) //ボールキャッチ...
const float diameter = 5.45; //タイヤの直径
const float track = 11.05; //タイヤ間の幅
const float pi = 3.1415; //円周率
この定義は主に、下で順次説明する関数の中で使う。
**指定した距離・角度動くプログラム [#f0bb5b20]
void fwd(float d) //距離dcm前進する関数
{
long angle;
angle = d/(diameter*pi)*360.0;
RotateMotorEx(OUT_AC,spd,angle,0,true,true);
}
void turnAng(long ang) //ang度(指定した角度)旋回する...
{
long angle;
angle = (track/diameter)*ang;
RotateMotorEx(OUT_AC,spd,angle,100*sign(ang),true,tr...
}
下から2行目のRotateMotorExの中に「sign(ang)」とあるが、...
**ボールを指定した角度の範囲で探し、その距離を返すプログ...
float search_ball(long ang) //現在の方向を中心にang度の...
{
SetSensorLowspeed(S2);
long tacho_min;
float d_min;
d_min = 100000; //仮の最小値
turnAng(ang/2); //指定された角度の半分...
ResetTachoCount(OUT_AC); //角度計測をリセット
int kakudo;
float Sens;
Wait(900);
kakudo = 0;
while(kakudo <= ang){ //ang/20度ずつ旋回し、ボー...
turnAng(-ang/20);
Wait(900);
Sens = SensorUS(S2);
if(Sens < d_min){
d_min = Sens; //仮の最小値を更新
tacho_min = MotorTachoCount(OUT_A);
}
kakudo = kakudo + ang/20;
}
Wait(1000);
turnAng( - (MotorTachoCount(OUT_A) - tacho_min + 50)...
Off(OUT_AC);
Wait(100);
return d_min;
}
tacho_minはモータの回転角で、d_minは指定された角度の範...
**ライントレースのプログラム [#h07be436]
void follow_line(long tmin = 0,long tmax = 10000)//スタ...
{
long t_start,t1;
t_start = CurrentTick();
SetSensorLight(S3);
int intencity;
t1 = CurrentTick();
while((CurrentTick() - t1 < 300||CurrentTick() - t_s...
t_start < tmax)){
intencity = SENSOR_3;
if(intencity < 33){ ...
turn_left(); //左旋回
}else {
if(intencity > 43){ ...
turn_right(); //右旋回
}else if(intencity > 38 && intencity <= 43){...
go_right(); //右折
}else if(intencity >= 37 && intencity <= 38)...
go(); //直進
}else {
go_left(); //左折
}
t1 = CurrentTick();
}
}
turn_right();Wait(500);//微調整
Off(OUT_AC);Wait(2000);
}
私が行った1人目のコースはラインの左側境界をトレースする...
**ボールを見つけて回収し、帰ってくるプログラム [#c1de3add]
void fetch_ball()//ボールを見つけ回収し、戻ってくる
{
float d = search_ball(90);
fwd(d - 17);
up;
turnAng(200);
down;
turn_left();Wait(1500);
go();Wait(500);
follow_line(16000,30000);
}
90度の範囲でボールを探すようにしたが、実際はもう少し狭...
**メインプログラム [#a638cf44]
task main()
{
follow_line(8500,20000);//AからD
go();Wait(600);
follow_line(9000,20000);//DからG
go();Wait(400);
turnAng(90);
follow_line(0,3500);//GからH
turnAng(90);
OnFwd(OUT_AC,-spd);Wait(700);
fetch_ball();//HからJ
go();Wait(2500);
Off(OUT_AC);
}
途中、交差点と間違えて止まってしまったり、交差点で止ま...
*反省・感想 [#jc56cccd]
ボールを回収する機構をロボットの後ろに付けたことで、ボ...
最後に、課題2ではプログラムというソフトの面ではうまく工...
終了行:
目次
#contents
*課題2[#w03aca39]
[[2019b/Mission2]]を参照
私は課題2の1人目のコースを行った。
*ロボットの説明 [#x10c8e95]
**ロボットの全体像 [#v09c0663]
まず全体像を下に示す。
&ref(2019b/Member/yamaji/Mission2/全体像1.jpg,60%,全体像);
&ref(2019b/Member/yamaji/Mission2/センサ1.jpg,60%,センサ);
NXT本体とセンサをなるべく低い位置につけ、とにかく重心を...
**ボールを回収する機構 [#e67a7e82]
#ref(2019b/Member/yamaji/Mission2/持ち手1.jpg,70%,アーム)
ボールの回収は、上の写真のようにアームを作り、モータに...
*プログラムの説明 [#i318ebb8]
**定義 [#a29f6d82]
#define spd 30 //スピード
#define go_right() OnFwd(OUT_A,spd);
#define turn_right() OnFwdSync(OUT_AC,spd,-100);
#define go_left() OnFwd(OUT_C,spd);
#define turn_left() OnFwdSync(OUT_AC,spd,100);
#define go() OnFwdSync(OUT_AC,spd,0);
#define up OnFwd(OUT_B, -30);Wait(500) //ボールキャッチ...
#define down OnFwd(OUT_B, 30);Wait(700) //ボールキャッチ...
const float diameter = 5.45; //タイヤの直径
const float track = 11.05; //タイヤ間の幅
const float pi = 3.1415; //円周率
この定義は主に、下で順次説明する関数の中で使う。
**指定した距離・角度動くプログラム [#f0bb5b20]
void fwd(float d) //距離dcm前進する関数
{
long angle;
angle = d/(diameter*pi)*360.0;
RotateMotorEx(OUT_AC,spd,angle,0,true,true);
}
void turnAng(long ang) //ang度(指定した角度)旋回する...
{
long angle;
angle = (track/diameter)*ang;
RotateMotorEx(OUT_AC,spd,angle,100*sign(ang),true,tr...
}
下から2行目のRotateMotorExの中に「sign(ang)」とあるが、...
**ボールを指定した角度の範囲で探し、その距離を返すプログ...
float search_ball(long ang) //現在の方向を中心にang度の...
{
SetSensorLowspeed(S2);
long tacho_min;
float d_min;
d_min = 100000; //仮の最小値
turnAng(ang/2); //指定された角度の半分...
ResetTachoCount(OUT_AC); //角度計測をリセット
int kakudo;
float Sens;
Wait(900);
kakudo = 0;
while(kakudo <= ang){ //ang/20度ずつ旋回し、ボー...
turnAng(-ang/20);
Wait(900);
Sens = SensorUS(S2);
if(Sens < d_min){
d_min = Sens; //仮の最小値を更新
tacho_min = MotorTachoCount(OUT_A);
}
kakudo = kakudo + ang/20;
}
Wait(1000);
turnAng( - (MotorTachoCount(OUT_A) - tacho_min + 50)...
Off(OUT_AC);
Wait(100);
return d_min;
}
tacho_minはモータの回転角で、d_minは指定された角度の範...
**ライントレースのプログラム [#h07be436]
void follow_line(long tmin = 0,long tmax = 10000)//スタ...
{
long t_start,t1;
t_start = CurrentTick();
SetSensorLight(S3);
int intencity;
t1 = CurrentTick();
while((CurrentTick() - t1 < 300||CurrentTick() - t_s...
t_start < tmax)){
intencity = SENSOR_3;
if(intencity < 33){ ...
turn_left(); //左旋回
}else {
if(intencity > 43){ ...
turn_right(); //右旋回
}else if(intencity > 38 && intencity <= 43){...
go_right(); //右折
}else if(intencity >= 37 && intencity <= 38)...
go(); //直進
}else {
go_left(); //左折
}
t1 = CurrentTick();
}
}
turn_right();Wait(500);//微調整
Off(OUT_AC);Wait(2000);
}
私が行った1人目のコースはラインの左側境界をトレースする...
**ボールを見つけて回収し、帰ってくるプログラム [#c1de3add]
void fetch_ball()//ボールを見つけ回収し、戻ってくる
{
float d = search_ball(90);
fwd(d - 17);
up;
turnAng(200);
down;
turn_left();Wait(1500);
go();Wait(500);
follow_line(16000,30000);
}
90度の範囲でボールを探すようにしたが、実際はもう少し狭...
**メインプログラム [#a638cf44]
task main()
{
follow_line(8500,20000);//AからD
go();Wait(600);
follow_line(9000,20000);//DからG
go();Wait(400);
turnAng(90);
follow_line(0,3500);//GからH
turnAng(90);
OnFwd(OUT_AC,-spd);Wait(700);
fetch_ball();//HからJ
go();Wait(2500);
Off(OUT_AC);
}
途中、交差点と間違えて止まってしまったり、交差点で止ま...
*反省・感想 [#jc56cccd]
ボールを回収する機構をロボットの後ろに付けたことで、ボ...
最後に、課題2ではプログラムというソフトの面ではうまく工...
ページ名: