2016b/Member/pen/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016b/Member]]&br;
目次&br;
#contents
*課題について [#o71d3bfc]
&ref(2016b/Member/pen/Mission3/2016b-mission3.png,50%,マ...
[[詳しくはこちら:http://yakushi.shinshu-u.ac.jp/robotics/...
&br;
*機体について [#ia2fc844]
今回わたしが担当したのは、ピッチャーのロボットです。ボー...
+ピッチャーマシンのような打ち出し
+自由落下によって転がす&br;
の2種類を考えましたが、1では、ボールの発射と装填を1つのモ...
*バッターロボットに関して [#jc08c67b]
バッターロボットは、発射したボールを掴み、ゴールに入れる...
**機体の全体像 [#y6e3d023]
&ref(2016b/Member/pen/Mission3/全体像.jpeg,50%,全体像);
&ref(2016b/Member/pen/Mission3/全体像2.jpeg,50%,全体像);
&ref(2016b/Member/pen/Mission3/全体像_3.jpeg,50%,全体像);
&ref(2016b/Member/pen/Mission3/全体像_4.jpeg,50%,全体像);
&br;
***発射機構 [#le9444f0]
&ref(2016b/Member/pen/Mission3/発射ユニット.jpeg,50%);
&ref(2016b/Member/pen/Mission3/発射ユニット_2.jpeg,50%);
&ref(2016b/Member/pen/Mission3/装填構造.jpeg,50%);
&ref(2016b/Member/pen/Mission3/ギアユニット.jpeg,50%);
&br;
***各種センサー [#x20b2d67]
&ref(2016b/Member/pen/Mission3/センサー.jpeg,50%);
&ref(2016b/Member/pen/Mission3/センサー_2.jpeg,50%);
&br;
*プログラムについて [#m5dc9ef0]
**プログラムの解説 [#r8449133]
***ライントレースの処理 [#sdfd9232]
[[前回と同じ:http://yakushi.shinshu-u.ac.jp/robotics/?201...
***交差点の処理 [#id38ca84]
[[前回の判定処理はそのまま使い:http://yakushi.shinshu-u.a...
line_trace_and_intersection_judgment(31,100);
この関数では、センサーの値が31以下であり、それが100ms続い...
***近い物体に向きを合わせる処理 [#he1de990]
アルミ缶を検出するプログラムを参考にしました。センサーの...
**プログラムの流れ [#jd9c49fa]
ポッチャーロボットでは、バッターから1〜3の番号を受け取...
***1番の流れ [#dd11ddcd]
&ref(2016b/Member/pen/Mission3/2016b-mission3-移動.png,12...
&br;
?.5cm前進&br;
?.1.2秒間ライントレース&br;
?.右に70°回転&br;
?.30cm前進&br;
?.6秒間ライントレース&br;
?.交差点を検出するまでライントレース&br;
?.7.2秒間ライントレース&br;
?.右に90°回転&br;
?.13cm前進&br;
***2番の流れ [#db08aef8]
バッターに対して向きを合わせます。そのために、ゴールに対...
***3番の流れ [#f8139746]
ボールを発射します。
**本文 [#y7358e18]
#define moter_conect_move OUT_AB //駆動輪モ...
#define moter_conect_option OUT_C //駆動輪以...
#define moter_conect_move_L OUT_A //左駆動輪...
#define moter_conect_move_R OUT_B //右駆動輪...
#define SPEED 55 //通常モー...
#define SPEED_FAST 60 //通常モー...
#define SPEED_SLOW 40 //通常モー...
#define SPEED_line_trace 30 //ライント...
#define SPEED_FAST_line_trace 40 //ライント...
#define SPEED_SLOW_line_trace 30 //ライント...
#define THRESHOLD 40 //白と黒の...
const float diameter = 5.45; //タイヤの...
const float track = 11.38; //タイヤの...
const float pi=3.1415; //円周率
//関数エリア
void stop_move() //すべての...
{
Off(OUT_ABC);
Wait(1);
}
void fwdDist(float d) //距離 d cm...
{
stop_move(); //モーター...
float angle = d/(pi*diameter)*360.0; //前進に必要な...
RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, 0...
}
void turnAng_L(float ang) //左に ang...
{
stop_move(); //モーター...
float angle = track/diameter * ang; //左回転に...
RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, 1...
}
void turnAng_R(float ang) //右に an...
{
stop_move(); //モーター...
float angle = track/diameter * ang; //右回転に...
RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, -...
}
int searchDirection(long ang) //一番近い...
{
stop_move(); //モーター...
long tacho_min ;
int d_min = 300 ;
long angle = (track/diameter)*ang;
turnAng_L(ang/2);
ResetTachoCount(moter_conect_move);
OnFwdSync(moter_conect_move,SPEED_SLOW,-100);
while(MotorTachoCount(moter_conect_move_L)<=angle)
{
int US_average = SensorUS(S4) ; //3回ほど超...
US_average = US_average+SensorUS(S4); //
US_average = US_average+SensorUS(S4); //
US_average = US_average / 3 ; //
if (US_average<d_min)
{
d_min = SensorUS(S4);
tacho_min = MotorTachoCount(moter_conect_move...
}
}
OnFwdSyncEx(moter_conect_move,SPEED_SLOW,100,RESET_NO...
until(MotorTachoCount(moter_conect_move_L)<=tacho_min...
Wait(360);
Off(moter_conect_move);Wait(500);
return d_min;
}
void line_trace(int sensor_light_lv) //ライント...
{
if (sensor_light_lv < THRESHOLD-8)
{
OnFwd(moter_conect_move_R,SPEED_FAST_line_trace);
OnFwd(moter_conect_move_L,-SPEED_FAST_line_trace);
}
else if (sensor_light_lv < THRESHOLD-5)
{
OnFwd(moter_conect_move_L,SPEED_SLOW_line_trace);
}
else if (sensor_light_lv < THRESHOLD +5)
{
OnFwdSync(moter_conect_move,SPEED_line_trace,0);
}
else if (sensor_light_lv < THRESHOLD+8)
{
OnFwd(moter_conect_move_R,SPEED_SLOW_line_trace);
}
else
{
OnFwd(moter_conect_move_L,SPEED_FAST_line_trace);
OnFwd(moter_conect_move_R,-SPEED_FAST_line_trace);
}
}
long intersection_judgment(long t0,int threshold)//Senso...
{
if (SENSOR_1 > threshold) //現在...
{
t0 = CurrentTick(); //現在...
}
return t0 ; //t0の...
}
//関数(task_mainで呼び出す)エリア
void set_sensor_all()
{
SetSensorLight(S1); // ライ...
SetSensorLowspeed(S4); //超音...
}
void firing_ball() //ボー...
{
stop_move(); //モー...
RotateMotor(moter_conect_option,85,537); //optio...
}
void line_tracing_in_seconds(float seconds) //secon...
{
stop_move();
long t0 =CurrentTick();
float temp=1000*seconds; //while...
while(CurrentTick()-t0 < temp) //temp...
{
line_trace(SENSOR_1); //ライ...
}
}
void line_trace_and_intersection_judgment(int threshold,...
{
stop_move(); //モー...
long t0 = CurrentTick(); //現在...
while(CurrentTick()-t0 < judgment_time) //judgm...
{
line_trace(SENSOR_1); //ライ...
t0=intersection_judgment(t0,threshold); //現在...
}
stop_move(); //モー...
Wait(1000); //交差...
PlaySound(SOUND_UP); //交差...
}
void move_A_to_inside_of_M() //スタ...
{
fwdDist(5.0); //5cm前進
line_tracing_in_seconds(1.2); //1.2秒...
turnAng_R(70.0); //右に7...
fwdDist(30.0); //30cm...
line_tracing_in_seconds(6.0); //6秒間...
line_trace_and_intersection_judgment(31,100); //交差...
line_tracing_in_seconds(7.2); //7.2秒...
turnAng_R(90.0); //右に9...
fwdDist(13.0); //13cm...
}
void mukiawase() //ロボ...
{
turnAng_L(10.0); //弁当...
int a =searchDirection(60); //一番...
turnAng_R(3.0); //バッ...
}
void send_action_finish() //バッ...
{
SendRemoteNumber(0,MAILBOX1,1);
}
int receive_action_signal() //バッ...
{
int temp = 0; //メッ...
while(temp==0) //メッ...
{
ReceiveRemoteNumber(MAILBOX2,true,temp); //メッ...
}
PlaySound(SOUND_UP); //メッ...
return temp; //受け...
}
//taskエリア
task main()
{
set_sensor_all(); //セン...
int action_number=0; //命令...
while(true)
{
action_number = receive_action_signal();//命令...
if (action_number == 1) //命令...
{
move_A_to_inside_of_M(); //ピッ...
action_number = 0; //命令...
}
else if (action_number == 2) //命令...
{
mukiawase(); //ロボ...
action_number = 0; //命令...
}
else if (action_number == 3) //命令...
{
firing_ball(); //ボー...
action_number = 0; //命令...
}
send_action_finish(); //動作...
PlaySound(SOUND_UP); //動作...
}
}
*感想 [#ued603b3]
今回、ロボット同士の連携をメインに行なったが、実際にやっ...
終了行:
[[2016b/Member]]&br;
目次&br;
#contents
*課題について [#o71d3bfc]
&ref(2016b/Member/pen/Mission3/2016b-mission3.png,50%,マ...
[[詳しくはこちら:http://yakushi.shinshu-u.ac.jp/robotics/...
&br;
*機体について [#ia2fc844]
今回わたしが担当したのは、ピッチャーのロボットです。ボー...
+ピッチャーマシンのような打ち出し
+自由落下によって転がす&br;
の2種類を考えましたが、1では、ボールの発射と装填を1つのモ...
*バッターロボットに関して [#jc08c67b]
バッターロボットは、発射したボールを掴み、ゴールに入れる...
**機体の全体像 [#y6e3d023]
&ref(2016b/Member/pen/Mission3/全体像.jpeg,50%,全体像);
&ref(2016b/Member/pen/Mission3/全体像2.jpeg,50%,全体像);
&ref(2016b/Member/pen/Mission3/全体像_3.jpeg,50%,全体像);
&ref(2016b/Member/pen/Mission3/全体像_4.jpeg,50%,全体像);
&br;
***発射機構 [#le9444f0]
&ref(2016b/Member/pen/Mission3/発射ユニット.jpeg,50%);
&ref(2016b/Member/pen/Mission3/発射ユニット_2.jpeg,50%);
&ref(2016b/Member/pen/Mission3/装填構造.jpeg,50%);
&ref(2016b/Member/pen/Mission3/ギアユニット.jpeg,50%);
&br;
***各種センサー [#x20b2d67]
&ref(2016b/Member/pen/Mission3/センサー.jpeg,50%);
&ref(2016b/Member/pen/Mission3/センサー_2.jpeg,50%);
&br;
*プログラムについて [#m5dc9ef0]
**プログラムの解説 [#r8449133]
***ライントレースの処理 [#sdfd9232]
[[前回と同じ:http://yakushi.shinshu-u.ac.jp/robotics/?201...
***交差点の処理 [#id38ca84]
[[前回の判定処理はそのまま使い:http://yakushi.shinshu-u.a...
line_trace_and_intersection_judgment(31,100);
この関数では、センサーの値が31以下であり、それが100ms続い...
***近い物体に向きを合わせる処理 [#he1de990]
アルミ缶を検出するプログラムを参考にしました。センサーの...
**プログラムの流れ [#jd9c49fa]
ポッチャーロボットでは、バッターから1〜3の番号を受け取...
***1番の流れ [#dd11ddcd]
&ref(2016b/Member/pen/Mission3/2016b-mission3-移動.png,12...
&br;
?.5cm前進&br;
?.1.2秒間ライントレース&br;
?.右に70°回転&br;
?.30cm前進&br;
?.6秒間ライントレース&br;
?.交差点を検出するまでライントレース&br;
?.7.2秒間ライントレース&br;
?.右に90°回転&br;
?.13cm前進&br;
***2番の流れ [#db08aef8]
バッターに対して向きを合わせます。そのために、ゴールに対...
***3番の流れ [#f8139746]
ボールを発射します。
**本文 [#y7358e18]
#define moter_conect_move OUT_AB //駆動輪モ...
#define moter_conect_option OUT_C //駆動輪以...
#define moter_conect_move_L OUT_A //左駆動輪...
#define moter_conect_move_R OUT_B //右駆動輪...
#define SPEED 55 //通常モー...
#define SPEED_FAST 60 //通常モー...
#define SPEED_SLOW 40 //通常モー...
#define SPEED_line_trace 30 //ライント...
#define SPEED_FAST_line_trace 40 //ライント...
#define SPEED_SLOW_line_trace 30 //ライント...
#define THRESHOLD 40 //白と黒の...
const float diameter = 5.45; //タイヤの...
const float track = 11.38; //タイヤの...
const float pi=3.1415; //円周率
//関数エリア
void stop_move() //すべての...
{
Off(OUT_ABC);
Wait(1);
}
void fwdDist(float d) //距離 d cm...
{
stop_move(); //モーター...
float angle = d/(pi*diameter)*360.0; //前進に必要な...
RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, 0...
}
void turnAng_L(float ang) //左に ang...
{
stop_move(); //モーター...
float angle = track/diameter * ang; //左回転に...
RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, 1...
}
void turnAng_R(float ang) //右に an...
{
stop_move(); //モーター...
float angle = track/diameter * ang; //右回転に...
RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, -...
}
int searchDirection(long ang) //一番近い...
{
stop_move(); //モーター...
long tacho_min ;
int d_min = 300 ;
long angle = (track/diameter)*ang;
turnAng_L(ang/2);
ResetTachoCount(moter_conect_move);
OnFwdSync(moter_conect_move,SPEED_SLOW,-100);
while(MotorTachoCount(moter_conect_move_L)<=angle)
{
int US_average = SensorUS(S4) ; //3回ほど超...
US_average = US_average+SensorUS(S4); //
US_average = US_average+SensorUS(S4); //
US_average = US_average / 3 ; //
if (US_average<d_min)
{
d_min = SensorUS(S4);
tacho_min = MotorTachoCount(moter_conect_move...
}
}
OnFwdSyncEx(moter_conect_move,SPEED_SLOW,100,RESET_NO...
until(MotorTachoCount(moter_conect_move_L)<=tacho_min...
Wait(360);
Off(moter_conect_move);Wait(500);
return d_min;
}
void line_trace(int sensor_light_lv) //ライント...
{
if (sensor_light_lv < THRESHOLD-8)
{
OnFwd(moter_conect_move_R,SPEED_FAST_line_trace);
OnFwd(moter_conect_move_L,-SPEED_FAST_line_trace);
}
else if (sensor_light_lv < THRESHOLD-5)
{
OnFwd(moter_conect_move_L,SPEED_SLOW_line_trace);
}
else if (sensor_light_lv < THRESHOLD +5)
{
OnFwdSync(moter_conect_move,SPEED_line_trace,0);
}
else if (sensor_light_lv < THRESHOLD+8)
{
OnFwd(moter_conect_move_R,SPEED_SLOW_line_trace);
}
else
{
OnFwd(moter_conect_move_L,SPEED_FAST_line_trace);
OnFwd(moter_conect_move_R,-SPEED_FAST_line_trace);
}
}
long intersection_judgment(long t0,int threshold)//Senso...
{
if (SENSOR_1 > threshold) //現在...
{
t0 = CurrentTick(); //現在...
}
return t0 ; //t0の...
}
//関数(task_mainで呼び出す)エリア
void set_sensor_all()
{
SetSensorLight(S1); // ライ...
SetSensorLowspeed(S4); //超音...
}
void firing_ball() //ボー...
{
stop_move(); //モー...
RotateMotor(moter_conect_option,85,537); //optio...
}
void line_tracing_in_seconds(float seconds) //secon...
{
stop_move();
long t0 =CurrentTick();
float temp=1000*seconds; //while...
while(CurrentTick()-t0 < temp) //temp...
{
line_trace(SENSOR_1); //ライ...
}
}
void line_trace_and_intersection_judgment(int threshold,...
{
stop_move(); //モー...
long t0 = CurrentTick(); //現在...
while(CurrentTick()-t0 < judgment_time) //judgm...
{
line_trace(SENSOR_1); //ライ...
t0=intersection_judgment(t0,threshold); //現在...
}
stop_move(); //モー...
Wait(1000); //交差...
PlaySound(SOUND_UP); //交差...
}
void move_A_to_inside_of_M() //スタ...
{
fwdDist(5.0); //5cm前進
line_tracing_in_seconds(1.2); //1.2秒...
turnAng_R(70.0); //右に7...
fwdDist(30.0); //30cm...
line_tracing_in_seconds(6.0); //6秒間...
line_trace_and_intersection_judgment(31,100); //交差...
line_tracing_in_seconds(7.2); //7.2秒...
turnAng_R(90.0); //右に9...
fwdDist(13.0); //13cm...
}
void mukiawase() //ロボ...
{
turnAng_L(10.0); //弁当...
int a =searchDirection(60); //一番...
turnAng_R(3.0); //バッ...
}
void send_action_finish() //バッ...
{
SendRemoteNumber(0,MAILBOX1,1);
}
int receive_action_signal() //バッ...
{
int temp = 0; //メッ...
while(temp==0) //メッ...
{
ReceiveRemoteNumber(MAILBOX2,true,temp); //メッ...
}
PlaySound(SOUND_UP); //メッ...
return temp; //受け...
}
//taskエリア
task main()
{
set_sensor_all(); //セン...
int action_number=0; //命令...
while(true)
{
action_number = receive_action_signal();//命令...
if (action_number == 1) //命令...
{
move_A_to_inside_of_M(); //ピッ...
action_number = 0; //命令...
}
else if (action_number == 2) //命令...
{
mukiawase(); //ロボ...
action_number = 0; //命令...
}
else if (action_number == 3) //命令...
{
firing_ball(); //ボー...
action_number = 0; //命令...
}
send_action_finish(); //動作...
PlaySound(SOUND_UP); //動作...
}
}
*感想 [#ued603b3]
今回、ロボット同士の連携をメインに行なったが、実際にやっ...
ページ名: