2019b/Member/yuu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
* 課題1:お絵描きロボット [#we1fcdeb]
チームメイトの似顔絵を描くロボットを製作しなさい。
* ロボットについて [#z6259212]
xyプロッタ型のロボットを作りました。ロボットの前面と後面...
&ref(IMG_5646comp.jpg,nolink,90%, );
&ref(IMG_5645comp.jpg,nolink,90%, );
** 台車部分 [#p61cd538]
台車部分はy方向に動きます。台車部分には上側部分を乗せるた...
&ref(IMG_5644comp.jpg,nolink,60%, );
** 上側部分 [#vf84d15e]
右下写真の右モータはy方向に動かすためのタイヤを回転させる...
&ref(IMG_5643comp.jpg,nolink,90%, );
&ref(IMG_5660comp.jpg,nolink,110%, );
* プログラムについて [#o2332a14]
** マクロおよび定数 [#j2cc36a5]
#define PenUp RotateMotor(OUT_A, 50, 16) //ペン...
#define PenDown RotateMotor(OUT_A, -50, 16) //ペン...
const float RADIAN = 3.14/180;
PenUpはペンを上げる、PenDownはペンを下げるためのものです...
** 曲線(楕円弧)をかくサブルーチン [#h992b2da]
void WriteEllipse(float Xradius, float Yradius, float an...
{
float theta1 = angle1*RADIAN; //単位をラジ...
float theta2 = angle2*RADIAN; //単位をラジ...
const float d_theta = 0.01;
for (float theta = theta1 ; theta < theta2 ; theta =...
int Xa = Xradius * cos(theta);
int Xb = Xradius * cos(theta+d_theta);
int Ya = Yradius * sin(theta);
int Yb = Yradius * sin(theta+d_theta);
RotateMotor(OUT_B, 60, Xb-Xa);
RotateMotor(OUT_C, 20, Yb-Ya);
}
}
図のようにx半径rx、y半径ryの楕円を書く時、微小部分AからB...
プログラムでは、~
X_radias、Y_radiasはそれぞれx半径 [rx]、y半径 [ry]~
angle1とtheta1は弧の始めの角度~
angle2とtheta2は弧の終わりの角度(angleの単位は度、th...
d_thetaは角度の変化量 [dθ]、thetaは角度 [θ]~
としています。
この方法で書くため、なめらかな曲線はかけず、ぎざぎざにな...
&ref(IMG_E5667comp.jpg,nolink,50%, );
** ペンを移動させるサブルーチン [#x21ee2a6]
void MovePen(int X, int Y)
{
RotateMotor(OUT_B, 20, X);
RotateMotor(OUT_C, 20, Y);
}
x方向にXだけ動かしたのち、y方向にYだけ動かします。
** ペン上下+線をかくサブルーチン [#oef1466a]
void MDEU(int X, int Y, float Xradius, float Yradius, fl...
{
MovePen(X, Y);
PenDown;
WriteEllipse(Xradius, Yradius, angle1, angle2);
PenUp;
}
void MDSU(int X, int Y)
{
MovePen(X, Y+10);
MovePen(0, -10);
PenDown;
MovePen(25, 7);
MovePen(-25, -7);
PenUp;
}
かき始めるところにペン持っていき、ペンを下ろし、線をかき...
MDEU(''M''ovePen Pen''D''own Write''E''llipse Pen''U''p)...
** メインプログラム [#a3e6132e]
task main()
{
Wait(1000); //すぐに動か...
MDEU(-210, 212, 78, 100, 100, 240); //A
MDEU(0, 36, 144, 250, 240, 302); //B
MDEU(0, -34, 78, 100, 300, 440); //C
MDEU(0, -54, 24, 150, 40, 80); //D
MDEU(-20, 0, 12, 64, 90, 180); //E
MDEU(-18, 57, 40, 63, 90, 180); //F
MDEU(115, -5, 70, 20, 90, 160); //G
MDEU(-20, 0, 70, 20, 20, 90); //H
MDSU(28, -20); //I
MDSU(58, 0); //J
MovePen(-20, -15);
PenDown;
MovePen(0, -10);
MovePen(0, 10); //K
PenUp;
MovePen(-50, 0);
MDEU(10, -20, 50, 30, 200, 340); //L
}
サブルーチンを利用してメインプログラムを書いています。左...
&ref(IMG_56542comp.jpg,nolink,60%, );
&ref(IMG_5654comp.jpg,nolink,60%, );
* 感想 [#d228ca2d]
うまくかけたほうだと思いますが、ペンが高すぎると線をかけ...
終了行:
目次
#contents
* 課題1:お絵描きロボット [#we1fcdeb]
チームメイトの似顔絵を描くロボットを製作しなさい。
* ロボットについて [#z6259212]
xyプロッタ型のロボットを作りました。ロボットの前面と後面...
&ref(IMG_5646comp.jpg,nolink,90%, );
&ref(IMG_5645comp.jpg,nolink,90%, );
** 台車部分 [#p61cd538]
台車部分はy方向に動きます。台車部分には上側部分を乗せるた...
&ref(IMG_5644comp.jpg,nolink,60%, );
** 上側部分 [#vf84d15e]
右下写真の右モータはy方向に動かすためのタイヤを回転させる...
&ref(IMG_5643comp.jpg,nolink,90%, );
&ref(IMG_5660comp.jpg,nolink,110%, );
* プログラムについて [#o2332a14]
** マクロおよび定数 [#j2cc36a5]
#define PenUp RotateMotor(OUT_A, 50, 16) //ペン...
#define PenDown RotateMotor(OUT_A, -50, 16) //ペン...
const float RADIAN = 3.14/180;
PenUpはペンを上げる、PenDownはペンを下げるためのものです...
** 曲線(楕円弧)をかくサブルーチン [#h992b2da]
void WriteEllipse(float Xradius, float Yradius, float an...
{
float theta1 = angle1*RADIAN; //単位をラジ...
float theta2 = angle2*RADIAN; //単位をラジ...
const float d_theta = 0.01;
for (float theta = theta1 ; theta < theta2 ; theta =...
int Xa = Xradius * cos(theta);
int Xb = Xradius * cos(theta+d_theta);
int Ya = Yradius * sin(theta);
int Yb = Yradius * sin(theta+d_theta);
RotateMotor(OUT_B, 60, Xb-Xa);
RotateMotor(OUT_C, 20, Yb-Ya);
}
}
図のようにx半径rx、y半径ryの楕円を書く時、微小部分AからB...
プログラムでは、~
X_radias、Y_radiasはそれぞれx半径 [rx]、y半径 [ry]~
angle1とtheta1は弧の始めの角度~
angle2とtheta2は弧の終わりの角度(angleの単位は度、th...
d_thetaは角度の変化量 [dθ]、thetaは角度 [θ]~
としています。
この方法で書くため、なめらかな曲線はかけず、ぎざぎざにな...
&ref(IMG_E5667comp.jpg,nolink,50%, );
** ペンを移動させるサブルーチン [#x21ee2a6]
void MovePen(int X, int Y)
{
RotateMotor(OUT_B, 20, X);
RotateMotor(OUT_C, 20, Y);
}
x方向にXだけ動かしたのち、y方向にYだけ動かします。
** ペン上下+線をかくサブルーチン [#oef1466a]
void MDEU(int X, int Y, float Xradius, float Yradius, fl...
{
MovePen(X, Y);
PenDown;
WriteEllipse(Xradius, Yradius, angle1, angle2);
PenUp;
}
void MDSU(int X, int Y)
{
MovePen(X, Y+10);
MovePen(0, -10);
PenDown;
MovePen(25, 7);
MovePen(-25, -7);
PenUp;
}
かき始めるところにペン持っていき、ペンを下ろし、線をかき...
MDEU(''M''ovePen Pen''D''own Write''E''llipse Pen''U''p)...
** メインプログラム [#a3e6132e]
task main()
{
Wait(1000); //すぐに動か...
MDEU(-210, 212, 78, 100, 100, 240); //A
MDEU(0, 36, 144, 250, 240, 302); //B
MDEU(0, -34, 78, 100, 300, 440); //C
MDEU(0, -54, 24, 150, 40, 80); //D
MDEU(-20, 0, 12, 64, 90, 180); //E
MDEU(-18, 57, 40, 63, 90, 180); //F
MDEU(115, -5, 70, 20, 90, 160); //G
MDEU(-20, 0, 70, 20, 20, 90); //H
MDSU(28, -20); //I
MDSU(58, 0); //J
MovePen(-20, -15);
PenDown;
MovePen(0, -10);
MovePen(0, 10); //K
PenUp;
MovePen(-50, 0);
MDEU(10, -20, 50, 30, 200, 340); //L
}
サブルーチンを利用してメインプログラムを書いています。左...
&ref(IMG_56542comp.jpg,nolink,60%, );
&ref(IMG_5654comp.jpg,nolink,60%, );
* 感想 [#d228ca2d]
うまくかけたほうだと思いますが、ペンが高すぎると線をかけ...
ページ名: