- 追加された行はこの色です。
- 削除された行はこの色です。
[[2012b/MemberOnly/進行状況]]
^q^
*Mission2レポート [#kdb5cd9e]
目次一覧
#contents
**メンバー紹介 [#zf7cd4f1]
blackcat
scar
toshi
yoshi
**課題の内容 [#b9b0d6b8]
***概要 [#dd83266e]
紙パックを所定の位置から所定の位置に運搬する。
ロボコンのフィールド平面図
#ref(./robocon2012b.png,80%,Mission2_field)
フィールドの説明
-フィールドは課題1で使用した紙を2枚つなぎ合わせる (向きは自由)
-白い紙パックと黒い紙パックがそれぞれ3個づつ対角のゴール(課題1のゴール)に置かれている (前1個、後2個の2列に配置する)
-2枚の紙のつなぎ目に断面が約3cm×4cmの角材を両面テープまたは押しピンで貼り付ける。
-黒い線の幅は20mmとする
***ルール [#gb56c77a]
基本ルール
-白い紙パックと黒い紙パックを入れ替える。
-競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
-課題1のスタート地点からスタートする。
-スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
-開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
-途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。
-最終的にゴールに運び込まれた紙パックの数で点数を計算する。
基本得点の計算方法
-運びこまれた紙パックに1個つき3点。ただし、紙パックを2段または3段に積み上げた場合は、2段目の紙パックを6点、3段目の紙パックを9点とする。
-紙パックが半分以上ゴールからはみ出している場合は、1個2点、はみ出している部分が半分未満の場合は1個2点とする
-一部がゴールの外にはみ出た出た紙パックの上に積み上げられた紙パックは、何段目であっても各3点とする。
技術点の計算方法&br;
以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。 得点の目安:
-紙パックまでたどり着く動作 (3点)
-紙パックを運ぶ動作(2点)
-障害物を越える動作 (4点)
-2台以上のロボット、あるいは単体のロボットの場合は2台のRCX,NXTの連携の良さ(3点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
-その他 (4点)
RIGHT:(画像及び文章は[[2012b/ロボコン]]より引用)
**ロボットの紹介 [#l7fe4118]
***全体ついて [#w9c564b1]
-コンセプト
-構造の説明
***パックを運ぶ機構について [#w85034af]
-コンセプト
-構造の説明
***工夫・苦労した点 [#vabeb7eb]
***反省点と考察 [#c83abdcd]
**プログラムの紹介 [#o721ccc9]
***概要 [#e9ff5d03]
今回の課題は、プログラムを作成する段階で私達の能力では高得点を取ることは不可能だと判断したので、&br;とりあえずパックを最低2個は運ぶ、といったプログラムとなっています。&br;
また、今回は動作にライントレースを組み込むと逆に精度が下がると判断したので、全ての動作を値を指定して実行させています。&br;また、その際にモータの回転角制御や左右のモータの同期によって、各動作の誤差を最小限にしようと努めました。
全体の動作の流れとしては
+パックの前まで直進
+パックを回収
+その場で90度右旋回して直進
+パックを押して壁際に設置し、その後後退
+90度右旋回して、スタート地点手前まで前進
+90度左旋回して、壁際まで前進
+反対側のロボットが設置したパックを回収
+後退して90度左旋回
+前進してパックを所定の位置まで運び、パックを放す
+終了
といった様になります。
***作成したプログラムとその詳しい説明 [#w5cbcf5d]
#define SPEED_H 45
#define SPEED_L 35
#define SPEED_LL 20
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H,SPEED_H);
#define turn_left1 OnRL(SPEED_L,-SPEED_L);
#define turn_left0 OnRL(SPEED_L,-SPEED_LL);
#define turn_right0 OnRL(-SPEED_LL,SPEED_L);
#define turn_right1 OnRL(-SPEED_L,SPEED_L);
#define pi 180
#define catch1 RotateMotor(OUT_A,SPEED_H,2*pi);
sub catch2()
{
OnFwdSync(OUT_BC,SPEED_H,0);
Wait(2000);
Off(OUT_BC);
OnFwd(OUT_A,SPEED_L);
Wait(1500);
Off(OUT_A);
Wait(200);
OnFwdSync(OUT_BC,-SPEED_H,0);
Wait(2000);
Off(OUT_BC);
OnRev(OUT_A,SPEED_L);
Wait(1200);
Off(OUT_A);
OnFwdSync(OUT_BC,SPEED_H,0);
Wait(1000);
Off(OUT_BC);
OnFwd(OUT_A,SPEED_L);
Wait(1200);
Off(OUT_A);
Wait(200);
OnFwdSync(OUT_BC,-SPEED_H,0);
Wait(1000);
Off(OUT_BC);
}
task main()
{
OnFwdSync(OUT_BC,SPEED_H,0);
Wait(2800);
Off(OUT_BC);
catch1;
Off(OUT_ABC);
Wait(100);
RotateMotor(OUT_B,-SPEED_L,2*pi);
OnFwdSync(OUT_BC,SPEED_H,0);
Wait(800);
Off(OUT_BC);
RotateMotor(OUT_A,-SPEED_H,3*pi);
OnFwdSync(OUT_BC,SPEED_L,0);
Wait(900);
Off(OUT_BC);
OnFwdSync(OUT_BC,-SPEED_L,0);
Wait(1000);
Off(OUT_BC);
RotateMotor(OUT_B,-SPEED_L,2*pi);
/*ここまでで一個回収して受け渡し*/
OnFwdSync(OUT_BC,SPEED_H,0);
Wait(1800);
Off(OUT_BC);
RotateMotor(OUT_C,-SPEED_L,2*pi);
catch2();
/*反対側のパック回収*/
RotateMotor(OUT_C,-SPEED_L,2*pi);
OnFwdSync(OUT_BC,SPEED_H,0);
Wait(2000);
Off(OUT_BC);
RotateMotor(OUT_A,-SPEED_H,2*pi);
/*お持ち帰り*/
}
***工夫・苦労した点 [#e62e201e]
***反省点と考察 [#i05dad03]
**全体の感想・反省等 [#v0cbb671]