2013a/Member/Hiko/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*ロボットの紹介 [#xad7c17c]
-このロボットが完成したのは課題の直前でした。それまでに何...
#ref(2013a/Member/Hiko/Mission1/image.jpg,10%)
**改良の結果 [#u0a8fba8]
-それでもアームの部分が予定より大きくなってしまったので、...
-アームの形をシンプルにすることで、アームを壊れにくくしま...
-缶をつかむメインのアーム以外にも下に缶が倒れないようにサ...
-タッチ(センサーを使わないことで、缶が軽すぎて反応しない...
-アームの力が強すぎて部品が破損する可能性があるのでトルク...
*コース攻略 [#b8c0055d]
-タッチセンサーを使わないので、時間ごとにロボットの動きを...
-しきい値の値を変えることで交差点を渡るようにしました。
-時間ごとに区切ったプログラムが切り替わるごとに音を出すよ...
-最後の缶を置くところは、ロボットが180度回転し缶を置い...
#ref(2013a/Member/Hiko/Mission1/robotics-2013a-mission1.j...
**コースを攻略する上での難関 [#x74cb940]
+缶をつかむ
-まず、缶をつかむことが最初の難関でした。人間ならつかむも...
+交差点
-プログラム自体あまり得意ではなかった私は交差点をうまく渡...
+円
-交差点を抜けるとすぐに円になります。ここではロボットが大...
+缶を置く
-このプログラムを作るうえで一番根気がいる作業でした。ロボ...
*プログラムの説明 [#ab8ab5e8]
#define THRESHOLD 45 //しきい値の定義
#define HIPOWER 7 //直線を走る時のパワー
#define LOWPOWER 2 //カーブを走る時のパワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER); //缶を挟...
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(O...
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(O...
#define turn_left1 set_power_L ;OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 200
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
↑ここまでがこのプログラムの定義
task main () {
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0;
ClearTimer(0);
while(FastTimer(0)<=600){
while(nOnline < nMAX && FastTimer(0)<=600){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
arm_fwd;
PlaySound(SOUND_CLICK);
↑このプログラムで缶をつかむ
while(FastTimer(0)<=1600){
while(nOnline < nMAX && FastTimer(0)<=1600){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
turn_right1;
Wait(10);
arm_fwd;
↑いったん内側を走行する
while(FastTimer(0)<=1200){
while(nOnline < nMAX && FastTimer(0)<=1200){
if(SENSOR_2< THRESHOLD -15) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -13){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD +2){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_DOWN);
turn_left1;
Wait(10);
arm_fwd;
↑円を回りやすい外回りで回る、そして缶をつかみなおす
while(FastTimer(0)<=2000){
while(nOnline < nMAX && FastTimer(0)<=2000){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_LOW_BEEP);
turn_right1;
Wait(20);
arm_fwd;
↑二つ目の円も外回りで回る
while(FastTimer(0)<=2900){
while(nOnline < nMAX && FastTimer(0)<=2900){
if(SENSOR_2< THRESHOLD -15) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -13){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD +2){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_FAST_UP);
arm_fwd;
while(FastTimer(0)<=4500){
while(nOnline < nMAX && FastTimer(0)<=4500){
if(SENSOR_2< THRESHOLD -13) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_DOUBLE_BEEP);
turn_left1; Wait(275);
arm_bwd;
OnRev(OUT_AC); Wait(100);
turn_left1; Wait(275);
↑ここがこのプログラムの最後の難関、ここでロボットが缶を離...
while(FastTimer(0)<=5500){
while(nOnline < nMAX && FastTimer(0)<=5500){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
}
↑ゴールに着く
-ポイントは、しきい値をたびたび変えることで交差点を渡るこ...
*感想 [#q6db5aad]
-ライントレースをするロボットを作ることは実際にやってみる...
-タイマーでプログラムを切り替えるので、時間を正確にはから...
*反省点 [#gc8ee745]
-自分のパソコンでUSBメモリが起動できず、ペアにとても迷...
-この講義の勉強にあまり時間をかけられなかった。
-サブルーチンや関数などを完璧に理解できてない。
*まとめ [#rc4a5766]
-最初はプログラムが全く理解できずにとても戸惑った。一応の...
-成功するときもあったが失敗のが多いので、今回の反省点を見...
終了行:
*ロボットの紹介 [#xad7c17c]
-このロボットが完成したのは課題の直前でした。それまでに何...
#ref(2013a/Member/Hiko/Mission1/image.jpg,10%)
**改良の結果 [#u0a8fba8]
-それでもアームの部分が予定より大きくなってしまったので、...
-アームの形をシンプルにすることで、アームを壊れにくくしま...
-缶をつかむメインのアーム以外にも下に缶が倒れないようにサ...
-タッチ(センサーを使わないことで、缶が軽すぎて反応しない...
-アームの力が強すぎて部品が破損する可能性があるのでトルク...
*コース攻略 [#b8c0055d]
-タッチセンサーを使わないので、時間ごとにロボットの動きを...
-しきい値の値を変えることで交差点を渡るようにしました。
-時間ごとに区切ったプログラムが切り替わるごとに音を出すよ...
-最後の缶を置くところは、ロボットが180度回転し缶を置い...
#ref(2013a/Member/Hiko/Mission1/robotics-2013a-mission1.j...
**コースを攻略する上での難関 [#x74cb940]
+缶をつかむ
-まず、缶をつかむことが最初の難関でした。人間ならつかむも...
+交差点
-プログラム自体あまり得意ではなかった私は交差点をうまく渡...
+円
-交差点を抜けるとすぐに円になります。ここではロボットが大...
+缶を置く
-このプログラムを作るうえで一番根気がいる作業でした。ロボ...
*プログラムの説明 [#ab8ab5e8]
#define THRESHOLD 45 //しきい値の定義
#define HIPOWER 7 //直線を走る時のパワー
#define LOWPOWER 2 //カーブを走る時のパワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER); //缶を挟...
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(O...
#define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(O...
#define turn_left1 set_power_L ;OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\
OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 200
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 300
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
↑ここまでがこのプログラムの定義
task main () {
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0;
ClearTimer(0);
while(FastTimer(0)<=600){
while(nOnline < nMAX && FastTimer(0)<=600){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
arm_fwd;
PlaySound(SOUND_CLICK);
↑このプログラムで缶をつかむ
while(FastTimer(0)<=1600){
while(nOnline < nMAX && FastTimer(0)<=1600){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_DOUBLE_BEEP);
ClearTimer(0);
turn_right1;
Wait(10);
arm_fwd;
↑いったん内側を走行する
while(FastTimer(0)<=1200){
while(nOnline < nMAX && FastTimer(0)<=1200){
if(SENSOR_2< THRESHOLD -15) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -13){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD +2){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_DOWN);
turn_left1;
Wait(10);
arm_fwd;
↑円を回りやすい外回りで回る、そして缶をつかみなおす
while(FastTimer(0)<=2000){
while(nOnline < nMAX && FastTimer(0)<=2000){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_LOW_BEEP);
turn_right1;
Wait(20);
arm_fwd;
↑二つ目の円も外回りで回る
while(FastTimer(0)<=2900){
while(nOnline < nMAX && FastTimer(0)<=2900){
if(SENSOR_2< THRESHOLD -15) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -13){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD +2){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_FAST_UP);
arm_fwd;
while(FastTimer(0)<=4500){
while(nOnline < nMAX && FastTimer(0)<=4500){
if(SENSOR_2< THRESHOLD -13) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_right0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_DOUBLE_BEEP);
turn_left1; Wait(275);
arm_bwd;
OnRev(OUT_AC); Wait(100);
turn_left1; Wait(275);
↑ここがこのプログラムの最後の難関、ここでロボットが缶を離...
while(FastTimer(0)<=5500){
while(nOnline < nMAX && FastTimer(0)<=5500){
if(SENSOR_2< THRESHOLD -13) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -11){
turn_left0;
}else if(SENSOR_2< THRESHOLD -7){
go_fwd;
}else if(SENSOR_2< THRESHOLD -1){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
}
↑ゴールに着く
-ポイントは、しきい値をたびたび変えることで交差点を渡るこ...
*感想 [#q6db5aad]
-ライントレースをするロボットを作ることは実際にやってみる...
-タイマーでプログラムを切り替えるので、時間を正確にはから...
*反省点 [#gc8ee745]
-自分のパソコンでUSBメモリが起動できず、ペアにとても迷...
-この講義の勉強にあまり時間をかけられなかった。
-サブルーチンや関数などを完璧に理解できてない。
*まとめ [#rc4a5766]
-最初はプログラムが全く理解できずにとても戸惑った。一応の...
-成功するときもあったが失敗のが多いので、今回の反省点を見...
ページ名: