2014b/Member/arisyka/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2014b/Member]]
目次
#contents
*はじめに [#h65b02b1]
課題は書道ロボットの作成である。
詳しい内容として、
各自の名前の中の一文字をA4用紙の中に書きなさい。 ただし7...
マクロや関数などを使い、main関数はなるべく単純になるよう...
([[2014年後期/課題1:http://yakushi.shinshu-u.ac.jp/robot...
今回は「香」という文字をロボットに書かせる。
*ロボットの説明 [#l6d65f52]
#ref(2014b/Member/arisyka/Mission1/IMG_3305 p.gif,30%)
ペンを持たせるために赤で囲まれた部分を基礎となる車体に取...
ペンはこれからの計算を少しでも楽にするため、ペン先をタイ...
*ロボットの動作・プログラミングの説明 [#yb48396e]
ロボットに求める動きは
・必要な角度を回転させる
・ペンの上げ下げ
の2つが主となる。
全体で使う定義としてSPEED=50、モーターB、Cをそれぞれ右、...
今回は距離からタイヤの回転角を計算するfloat型の関数を使っ...
float GetAngle(float d)
{
const float diameter=5.45; //タイヤの直径(?)
const float pi=3.1415; //円周率(π)
float ang = d/(diameter*pi)*360.0; //角度を計算する
return ang; //角度を返す
}
**ロボットを回転させる [#q9d8bfe3]
文字を書くためには、ロボット本体を回転させる必要がある。...
#ref(2014b/Member/arisyka/Mission1/nxc 説明.gif,40%)
タイヤとタイヤの長さ(r)が10.5?であるから、これを元にflo...
また、ペンを上げた位置と同じ場所に持っていくために、実際...
#ref(2014b/Member/arisyka/Mission1/kaitenループ※.gif,35%)
※前後の動きは角度によって異なる。
***90度回転 [#aca1e640]
90度回転させるための円周の長さは、
L=2×3.1415×10.5×90/360=16.5?
また、90度回転した後に10?後方へ進めると元のペンの位置にい...
#define Ninety GetAngle(16.5)
#define Ten GetAngle(10)
#define NBB RotateMotor(OUT_B,SPEED,Ninety);RotateMoto...
#define NBC RotateMotor(OUT_C,SPEED,Ninety);RotateMotor...
***60度回転 [#ff4fe7c6]
90度回転と同じやり方で、
L=2×3.1415×10.5×60/360≒10.995?
また、3?前方に進んだ後、60度回転し、10.494?後方へ進めると...
#define Sixty GetAngle(10.995)
#define Three RotateMotor(OUT_BC,SPEED,GetAngle(3));
#define SixtyBackB Three;RotateMotor(OUT_B,SPEED,Sixty);...
#define SixtyBackC Three;RotateMotor(OUT_C,SPEED,Sixty);...
***20度回転 [#afd6aa67]
90度回転と同じやり方で
L=2×3.1415×10.5×20/360≒3.665?
また、5?進んだ後、20度回転し、後ろに6.146(3.646+2.5)?後...
#define Twenty GetAngle(3.665)
#define Five RotateMotor(OUT_BC,SPEED,GetAngle(5));
#define TwoFiveB RotateMotor(OUT_BC,-50,GetAngle(2.5));
#define TwentyBackB Five;RotateMotor(OUT_B,SPEED,Twenty)...
#define TwentyBackC Five;RotateMotor(OUT_C,SPEED,Twenty)...
**ペンの動作 [#x33b61aa]
ここでは唯一float型の関数を使わずにモーターの回転角度を指...
#define UP RotateMotor(OUT_A,SPEED,-50); //ペンを...
#define DOWN RotateMotor(OUT_A,SPEED,50); //ペンを...
#ref(2014b/Member/arisyka/Mission1/down up ループ.gif,40%)
*字を書く [#h20e4079]
**書く順番 [#o48f3095]
「香」を書くために、
1、?「十」を書く→?「日」を書く(「口」→「一」)→?「八」を...
#ref(2014b/Member/arisyka/Mission1/nxc senn 1.2.gif,50%)
2、?「ノ」を書く→?横線4本を書く→?縦線3本書く→?「八」を書く
#ref(2014b/Member/arisyka/Mission1/nxc senn 3.gif,50%)
順番を3つ考え、プログラミングし、試してみた結果、2の方が...
**プログラム [#qc6c67ee]
始めに長さを定理しますが、前へ進む距離を英語で表記し、後...
#define Two RotateMotor(OUT_BC,SPEED,GetAngle(2)); ...
#define TwoFive RotateMotor(OUT_BC,SPEED,GetAngle(2.5));...
#define ThreeFive RotateMotor(OUT_BC,SPEED,GetAngle(3.5));
#define Four RotateMotor(OUT_BC,SPEED,GetAngle(4));
#define FiveFive RotateMotor(OUT_BC,SPEED,GetAngle(5.5));
#define Six RotateMotor(OUT_BC,SPEED,GetAngle(6));
#define Seven RotateMotor(OUT_BC,SPEED,GetAngle(7));
#define Eight RotateMotor(OUT_BC,SPEED,GetAngle(8));
#define Eleven RotateMotor(OUT_BC,SPEED,GetAngle(11));
#define OneB RotateMotor(OUT_BC,-50,GetAngle(1)); /...
#define ThreeB RotateMotor(OUT_BC,-50,GetAngle(3));
#define SixB RotateMotor(OUT_BC,-50,GetAngle(6));
-「ノ」を書く
task main ()
{
Wait(2000);
DOWN;
Eight; //「ノ」を書く
-横線4本引く
UP;
Two;
SixtyBackB;
Two;
NBB;
DOWN;
Eleven; //「十」の「一」を書く
UP;
NBC;
TwoFive;
NBC;
Two;
DOWN;
Seven; //「日」の上の「一」を書く
UP;
NBB;
Two;
NBB;
DOWN;
Seven; //「日」の真ん中の「一」を書く
UP;
NBC;
Two;
NBC;
DOWN;
Seven; //「日」の下の「一」を書く
UP;
-縦線3本引く
NBC;
DOWN;
Four; //「日」の左の「|」を書く
UP;
NBC;
Seven;
NBC;
DOWN;
Four; //「日」の右の「|」を書く
UP;
NBC;
ThreeFive;
NBC;
Four;
TwentyBackC; //角度の大きなズレを修正
TwentyBackC;
DOWN;
Five; //「十」の「|」を書く
UP;
-「八」を書く
ThreeB;
OneB;
OneB;
NBC;
Three;
NBB;
DOWN;
RotateMotor(OUT_B,SPEED,Sixty); //10.494?の弧を描く...
UP;
}
*感想・考察 [#nc23b398]
想像していた以上に「香」を書くことが難しかった。計算上、...
そのため、最終的な大きな角度のズレを20度回転で修正してい...
その甲斐もあって段々と形は整えていったが、自分が理想とし...
今回のミッションを終えて、私のロボットは他の班に比べ、工...
終了行:
[[2014b/Member]]
目次
#contents
*はじめに [#h65b02b1]
課題は書道ロボットの作成である。
詳しい内容として、
各自の名前の中の一文字をA4用紙の中に書きなさい。 ただし7...
マクロや関数などを使い、main関数はなるべく単純になるよう...
([[2014年後期/課題1:http://yakushi.shinshu-u.ac.jp/robot...
今回は「香」という文字をロボットに書かせる。
*ロボットの説明 [#l6d65f52]
#ref(2014b/Member/arisyka/Mission1/IMG_3305 p.gif,30%)
ペンを持たせるために赤で囲まれた部分を基礎となる車体に取...
ペンはこれからの計算を少しでも楽にするため、ペン先をタイ...
*ロボットの動作・プログラミングの説明 [#yb48396e]
ロボットに求める動きは
・必要な角度を回転させる
・ペンの上げ下げ
の2つが主となる。
全体で使う定義としてSPEED=50、モーターB、Cをそれぞれ右、...
今回は距離からタイヤの回転角を計算するfloat型の関数を使っ...
float GetAngle(float d)
{
const float diameter=5.45; //タイヤの直径(?)
const float pi=3.1415; //円周率(π)
float ang = d/(diameter*pi)*360.0; //角度を計算する
return ang; //角度を返す
}
**ロボットを回転させる [#q9d8bfe3]
文字を書くためには、ロボット本体を回転させる必要がある。...
#ref(2014b/Member/arisyka/Mission1/nxc 説明.gif,40%)
タイヤとタイヤの長さ(r)が10.5?であるから、これを元にflo...
また、ペンを上げた位置と同じ場所に持っていくために、実際...
#ref(2014b/Member/arisyka/Mission1/kaitenループ※.gif,35%)
※前後の動きは角度によって異なる。
***90度回転 [#aca1e640]
90度回転させるための円周の長さは、
L=2×3.1415×10.5×90/360=16.5?
また、90度回転した後に10?後方へ進めると元のペンの位置にい...
#define Ninety GetAngle(16.5)
#define Ten GetAngle(10)
#define NBB RotateMotor(OUT_B,SPEED,Ninety);RotateMoto...
#define NBC RotateMotor(OUT_C,SPEED,Ninety);RotateMotor...
***60度回転 [#ff4fe7c6]
90度回転と同じやり方で、
L=2×3.1415×10.5×60/360≒10.995?
また、3?前方に進んだ後、60度回転し、10.494?後方へ進めると...
#define Sixty GetAngle(10.995)
#define Three RotateMotor(OUT_BC,SPEED,GetAngle(3));
#define SixtyBackB Three;RotateMotor(OUT_B,SPEED,Sixty);...
#define SixtyBackC Three;RotateMotor(OUT_C,SPEED,Sixty);...
***20度回転 [#afd6aa67]
90度回転と同じやり方で
L=2×3.1415×10.5×20/360≒3.665?
また、5?進んだ後、20度回転し、後ろに6.146(3.646+2.5)?後...
#define Twenty GetAngle(3.665)
#define Five RotateMotor(OUT_BC,SPEED,GetAngle(5));
#define TwoFiveB RotateMotor(OUT_BC,-50,GetAngle(2.5));
#define TwentyBackB Five;RotateMotor(OUT_B,SPEED,Twenty)...
#define TwentyBackC Five;RotateMotor(OUT_C,SPEED,Twenty)...
**ペンの動作 [#x33b61aa]
ここでは唯一float型の関数を使わずにモーターの回転角度を指...
#define UP RotateMotor(OUT_A,SPEED,-50); //ペンを...
#define DOWN RotateMotor(OUT_A,SPEED,50); //ペンを...
#ref(2014b/Member/arisyka/Mission1/down up ループ.gif,40%)
*字を書く [#h20e4079]
**書く順番 [#o48f3095]
「香」を書くために、
1、?「十」を書く→?「日」を書く(「口」→「一」)→?「八」を...
#ref(2014b/Member/arisyka/Mission1/nxc senn 1.2.gif,50%)
2、?「ノ」を書く→?横線4本を書く→?縦線3本書く→?「八」を書く
#ref(2014b/Member/arisyka/Mission1/nxc senn 3.gif,50%)
順番を3つ考え、プログラミングし、試してみた結果、2の方が...
**プログラム [#qc6c67ee]
始めに長さを定理しますが、前へ進む距離を英語で表記し、後...
#define Two RotateMotor(OUT_BC,SPEED,GetAngle(2)); ...
#define TwoFive RotateMotor(OUT_BC,SPEED,GetAngle(2.5));...
#define ThreeFive RotateMotor(OUT_BC,SPEED,GetAngle(3.5));
#define Four RotateMotor(OUT_BC,SPEED,GetAngle(4));
#define FiveFive RotateMotor(OUT_BC,SPEED,GetAngle(5.5));
#define Six RotateMotor(OUT_BC,SPEED,GetAngle(6));
#define Seven RotateMotor(OUT_BC,SPEED,GetAngle(7));
#define Eight RotateMotor(OUT_BC,SPEED,GetAngle(8));
#define Eleven RotateMotor(OUT_BC,SPEED,GetAngle(11));
#define OneB RotateMotor(OUT_BC,-50,GetAngle(1)); /...
#define ThreeB RotateMotor(OUT_BC,-50,GetAngle(3));
#define SixB RotateMotor(OUT_BC,-50,GetAngle(6));
-「ノ」を書く
task main ()
{
Wait(2000);
DOWN;
Eight; //「ノ」を書く
-横線4本引く
UP;
Two;
SixtyBackB;
Two;
NBB;
DOWN;
Eleven; //「十」の「一」を書く
UP;
NBC;
TwoFive;
NBC;
Two;
DOWN;
Seven; //「日」の上の「一」を書く
UP;
NBB;
Two;
NBB;
DOWN;
Seven; //「日」の真ん中の「一」を書く
UP;
NBC;
Two;
NBC;
DOWN;
Seven; //「日」の下の「一」を書く
UP;
-縦線3本引く
NBC;
DOWN;
Four; //「日」の左の「|」を書く
UP;
NBC;
Seven;
NBC;
DOWN;
Four; //「日」の右の「|」を書く
UP;
NBC;
ThreeFive;
NBC;
Four;
TwentyBackC; //角度の大きなズレを修正
TwentyBackC;
DOWN;
Five; //「十」の「|」を書く
UP;
-「八」を書く
ThreeB;
OneB;
OneB;
NBC;
Three;
NBB;
DOWN;
RotateMotor(OUT_B,SPEED,Sixty); //10.494?の弧を描く...
UP;
}
*感想・考察 [#nc23b398]
想像していた以上に「香」を書くことが難しかった。計算上、...
そのため、最終的な大きな角度のズレを20度回転で修正してい...
その甲斐もあって段々と形は整えていったが、自分が理想とし...
今回のミッションを終えて、私のロボットは他の班に比べ、工...
ページ名: