2019b/Member/numanum/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019b/Member]]
#contents
*課題1 [#d3481a74]
チームメイトの似顔絵を描くロボットを製作しなさい。
*ロボットの説明 [#y611a10f]
**全体構造と方針 [#i5d2f930]
前輪の間、つまり回転の中心に筆を配置して描く構造にした。
また、できるだけ機構を簡単なものにしている。
#ref(IMG_68521.JPG)
**モーター、機械本体の配置 [#v2682fd8]
ロボットが自ら移動・回転する構造であるため、余計な力が発...
**筆に関する機構について [#ad08d167]
筆の上げ下げを司っている機構は最も単純で、モーターと直接...
#ref(IMG_68531.JPG)
しかしその弊害で筆がロボットの内側に配置されているため、...
***重心の位置による問題 [#i8cd7fb3]
本来ならタイヤが大きい前方に位置しているのが理想であるた...
#ref(IMG_68541.JPG)
さらに、あまり大きな直進などはせず後輪の角度が毎回違うの...
*プログラムの説明 [#le4763cc]
まずは頻出になるものを定義する。RESTは一回の行動毎に入れ...
#define SPEED 50
#define STRAIGHT(t) OnFwdSync(OUT_BC,SPEED,0); Wait(t); ...
#define PEN_UP OnFwd(OUT_A,SPEED); Wait(100); Off(OUT_A);
#define PEN_DOWN OnRev(OUT_A,SPEED); Wait(100);Off(OUT_A);
#define REST Wait(500);
「タイヤを軸」にして回る際の角度を計算する式を作る。
float GetAngle1(float d)
{
const float diameter = 5.45;
const float length = 11.0;
float ang = d*length*2/diameter;
return ang;
}
今度はその場で「筆を軸」に回転する角度を計算する式を作る。
float GetAngle2(float k)
{
const diameter = 5.45;
const length = 11.0;
float ang = length*k/diameter;
return ang;
}
ここからメインのプログラムになる。
task main()
{
int angle = GetAngle1(90.0);
int angle1 = GetAngle2(90.0);
int angle2 = GetAngle2(120.0); //角度の設定
repeat(2){ //左上から輪郭を描く
RotateMotor(OUT_C,SPEED,angle);
STRAIGHT(300);
RotateMotor(OUT_C,SPEED,angle);
STRAIGHT(500); //一度目で頭、二度...
}
RotateMotorEx(OUT_BC,SPEED,angle1,100,true,true);
REST;
STRAIGHT(1100); //前髪を直線で描く
REST;
PEN_UP; //次の描き始めまで...
REST;
RotateMotorEx(OUT_BC,SPEED,angle2,100,true,true); /...
REST;
STRAIGHT(400);
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,100,true,true);
PEN_DOWN; //眼鏡の描き始めに...
repeat(2){
STRAIGHT(300);
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,100,true,true);
REST;
OnFwd(OUT_B,70);
OnFwd(OUT_C,-35);
Wait(2150);
Off(OUT_BC); //眼鏡の円を反時計回り...
REST;
PEN_UP;
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,-100,true,true);
REST;
STRAIGHT(400);
REST;
PEN_DOWN; //眼鏡のレンズの右端...
} //一度目で右、二度目...
REST;
STRAIGHT(300); //左の輪郭上に戻って...
PEN_UP; //次の描き始めまで筆...
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,-100,true,true);
STRAIGHT(200);
RotateMotor(OUT_B,SPEED,angle);
PEN_DOWN; //口の描き始めに移動
REST;
STRAIGHT(400); //口を描く
PEN_UP;
}
最初は使用する角度を羅列しておく。120°は理論上使う必要は...
一つ目のrepeatでは顔の輪郭を描き、二つ目のrepeatは相方の...
眼鏡を描いた後は左タイヤを軸に回転させ、口の場所まで移動...
*お絵かき結果 [#m87b62f1]
#ref(IMG_68551.JPG)
*反省・感想 [#s856788e]
当初はXY座標系で作ろうとしたがどうしてもできなかったため...
終了行:
[[2019b/Member]]
#contents
*課題1 [#d3481a74]
チームメイトの似顔絵を描くロボットを製作しなさい。
*ロボットの説明 [#y611a10f]
**全体構造と方針 [#i5d2f930]
前輪の間、つまり回転の中心に筆を配置して描く構造にした。
また、できるだけ機構を簡単なものにしている。
#ref(IMG_68521.JPG)
**モーター、機械本体の配置 [#v2682fd8]
ロボットが自ら移動・回転する構造であるため、余計な力が発...
**筆に関する機構について [#ad08d167]
筆の上げ下げを司っている機構は最も単純で、モーターと直接...
#ref(IMG_68531.JPG)
しかしその弊害で筆がロボットの内側に配置されているため、...
***重心の位置による問題 [#i8cd7fb3]
本来ならタイヤが大きい前方に位置しているのが理想であるた...
#ref(IMG_68541.JPG)
さらに、あまり大きな直進などはせず後輪の角度が毎回違うの...
*プログラムの説明 [#le4763cc]
まずは頻出になるものを定義する。RESTは一回の行動毎に入れ...
#define SPEED 50
#define STRAIGHT(t) OnFwdSync(OUT_BC,SPEED,0); Wait(t); ...
#define PEN_UP OnFwd(OUT_A,SPEED); Wait(100); Off(OUT_A);
#define PEN_DOWN OnRev(OUT_A,SPEED); Wait(100);Off(OUT_A);
#define REST Wait(500);
「タイヤを軸」にして回る際の角度を計算する式を作る。
float GetAngle1(float d)
{
const float diameter = 5.45;
const float length = 11.0;
float ang = d*length*2/diameter;
return ang;
}
今度はその場で「筆を軸」に回転する角度を計算する式を作る。
float GetAngle2(float k)
{
const diameter = 5.45;
const length = 11.0;
float ang = length*k/diameter;
return ang;
}
ここからメインのプログラムになる。
task main()
{
int angle = GetAngle1(90.0);
int angle1 = GetAngle2(90.0);
int angle2 = GetAngle2(120.0); //角度の設定
repeat(2){ //左上から輪郭を描く
RotateMotor(OUT_C,SPEED,angle);
STRAIGHT(300);
RotateMotor(OUT_C,SPEED,angle);
STRAIGHT(500); //一度目で頭、二度...
}
RotateMotorEx(OUT_BC,SPEED,angle1,100,true,true);
REST;
STRAIGHT(1100); //前髪を直線で描く
REST;
PEN_UP; //次の描き始めまで...
REST;
RotateMotorEx(OUT_BC,SPEED,angle2,100,true,true); /...
REST;
STRAIGHT(400);
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,100,true,true);
PEN_DOWN; //眼鏡の描き始めに...
repeat(2){
STRAIGHT(300);
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,100,true,true);
REST;
OnFwd(OUT_B,70);
OnFwd(OUT_C,-35);
Wait(2150);
Off(OUT_BC); //眼鏡の円を反時計回り...
REST;
PEN_UP;
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,-100,true,true);
REST;
STRAIGHT(400);
REST;
PEN_DOWN; //眼鏡のレンズの右端...
} //一度目で右、二度目...
REST;
STRAIGHT(300); //左の輪郭上に戻って...
PEN_UP; //次の描き始めまで筆...
REST;
RotateMotorEx(OUT_BC,SPEED,angle1,-100,true,true);
STRAIGHT(200);
RotateMotor(OUT_B,SPEED,angle);
PEN_DOWN; //口の描き始めに移動
REST;
STRAIGHT(400); //口を描く
PEN_UP;
}
最初は使用する角度を羅列しておく。120°は理論上使う必要は...
一つ目のrepeatでは顔の輪郭を描き、二つ目のrepeatは相方の...
眼鏡を描いた後は左タイヤを軸に回転させ、口の場所まで移動...
*お絵かき結果 [#m87b62f1]
#ref(IMG_68551.JPG)
*反省・感想 [#s856788e]
当初はXY座標系で作ろうとしたがどうしてもできなかったため...
ページ名: